『Python』Python编译成计算机可执行文件(Windows计算机可执行文件exe,Linux 计算机可执行文件elf,Mac计算机可执行文件mach-O)

背景:

Python 程序都是脚本的方式,一般是在解析器里运行,如果要想要给别的计算机使用,需要提前安装Python解析器和相关包才可以运行,为了在 Windows(或其它系统里) 里方便发布,我们将.py文件,编译成一个可执行文件,并且打包所需要库文件,只需要点击一个可执行文件运行,而无需安装Python和相关库文件。这样发布给用户使用何不美哉。

我们的主角 :PyInstaller

PyInstaller 是一个十分有用的第三方库,可以用来打包 python 应用程序,打包完的程序就可以在没有安装 Python 解释器的机器上运行了。

PyInstaller将 Python应用程序冻结(打包)在Windows,GNU / Linux,Mac OS X,FreeBSD,Solaris和AIX下的独立可执行文件中。
与类似工具相比,PyInstaller的主要优势在于PyInstaller可与Python 2.7和3.5-3.7一起使用;由于透明压缩,它可生成较小的可执行文件;它是完全多平台的;并且使用OS支持来加载动态库,从而确保完全兼容。

PyInstaller的主要目标是开箱即用地与第三方软件包兼容。这意味着,使用PyInstaller,使外部软件包正常工作所需的所有技巧已 集成在PyInstaller本身中,因此无需用户干预。您将不需要在Wiki中寻找技巧,也可以对文件或设置脚本进行自定义修改。例如,完全支持PyQt,Django或matplotlib之类的库,而无需手动处理插件或外部数据文件。

使用

1.安装pyinstaller
pip install pyinstaller
2.进入安装工作环境
  1. Win+R运行打开CMD
    在这里插入图片描述
    在这里插入图片描述

  2. 进入工作目录,即所编译.py文件的路径
    右键点击Python文件,属性中即可获得路径。
    在这里插入图片描述
    利用cd命令进入工作目录:

    cd C:\Users\张小胖\Desktop
    

    在这里插入图片描述

3. 生成不自定义图标的exe文件
pyinstaller -F -w game.py  (-F表示打包单个文件,-w是为了打开exe时候不弹出黑框)
4.生成带自定义图标的exe文件

在这里插入图片描述

pyinstaller -F -w -i use.ico demo.py  (-i用来设置编译成exe文件的图标,后面跟.ico格式的图片文件)

PyInstaller 支持的常用选项

-h,--help 查看该模块的帮助信息
-F,-onefile 产生单个的可执行文件
-D,--onedir 产生一个目录(包含多个文件)作为可执行程序
-a,--ascii 不包含 Unicode 字符集支持
-d,--debug 产生 debug 版本的可执行文件
-w,--windowed,--noconsolc 指定程序运行时不显示命令行窗口(仅对 Windows 有效)
-c,--nowindowed,--console 指定使用命令行窗口运行程序(仅对 Windows 有效)
-o DIR,--out=DIR 指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件
-p DIR,--path=DIR 设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径
-n NAME,--name=NAME 指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字

PyInstaller 会对脚本进行解析,并做出如下动作:

  1. 在工作目录生成 helloworld.spec 文件;

  2. 创建一个 build 文件夹;

  3. 写入一些日志文件和中间流程文件到 build 文件夹;

  4. 创建 dist 文件夹;

  5. 生成可执行文件到 dist 文件夹;

  6. 如果编译中出现错误,会生成debug.log的日志文件;

内部流程
C:\Users\张小胖\Desktop>pyinstaller -F -w demo.py
46 INFO: PyInstaller: 3.6
47 INFO: Python: 3.8.2
47 INFO: Platform: Windows-10-10.0.18362-SP0
49 INFO: wrote C:\Users\张小胖\Desktop\demo.spec
50 INFO: UPX is not available.
51 INFO: Extending PYTHONPATH with paths
['C:\\Users\\张小胖\\Desktop', 'C:\\Users\\张小胖\\Desktop']
51 INFO: checking Analysis
52 INFO: Building Analysis because Analysis-00.toc is non existent
52 INFO: Initializing module dependency graph...
54 INFO: Caching module graph hooks...
78 INFO: Analyzing base_library.zip ...
2072 INFO: Processing pre-find module path hook   distutils
2073 INFO: distutils: retargeting to non-venv dir 'c:\\users\\张小胖\\appdata\\local\\programs\\python\\python38\\lib'
4270 INFO: Caching module dependency graph...
4365 INFO: running Analysis Analysis-00.toc
4367 INFO: Adding Microsoft.Windows.Common-Controls to dependent assemblies of final executable
  required by c:\users\张小胖\appdata\local\programs\python\python38\python.exe
4630 INFO: Analyzing C:\Users\张小胖\Desktop\demo.py
4757 INFO: Processing pre-safe import module hook   urllib3.packages.six.moves
c:\users\张小胖\appdata\local\programs\python\python38\lib\site-packages\selenium\webdriver\firefox\firefox_profile.py:208: SyntaxWarning: "is" with a literal. Did you mean "=="?
  if setting is None or setting is '':
6324 INFO: Processing module hooks...
6324 INFO: Loading module hook "hook-certifi.py"...
6327 INFO: Loading module hook "hook-distutils.py"...
6330 INFO: Loading module hook "hook-encodings.py"...
6390 INFO: Loading module hook "hook-lib2to3.py"...
6396 INFO: Loading module hook "hook-pydoc.py"...
6397 INFO: Loading module hook "hook-selenium.py"...
6408 INFO: Loading module hook "hook-sysconfig.py"...
6409 INFO: Loading module hook "hook-xml.dom.domreg.py"...
6410 INFO: Loading module hook "hook-xml.etree.cElementTree.py"...
6416 INFO: Loading module hook "hook-xml.py"...
6418 INFO: Loading module hook "hook-_tkinter.py"...
6555 INFO: checking Tree
6555 INFO: Building Tree because Tree-00.toc is non existent
6556 INFO: Building Tree Tree-00.toc
6668 INFO: checking Tree
6668 INFO: Building Tree because Tree-01.toc is non existent
6669 INFO: Building Tree Tree-01.toc
6723 INFO: Looking for ctypes DLLs
6755 INFO: Analyzing run-time hooks ...
6759 INFO: Including run-time hook 'pyi_rth__tkinter.py'
6762 INFO: Including run-time hook 'pyi_rth_multiprocessing.py'
6765 INFO: Including run-time hook 'pyi_rth_certifi.py'
6775 INFO: Looking for dynamic libraries
6862 WARNING: lib not found: pywintypes38.dll dependency of c:\users\张小胖\appdata\local\programs\python\python38\lib\site-packages\win32\win32evtlog.pyd
6870 WARNING: lib not found: pywintypes38.dll dependency of c:\users\张小胖\appdata\local\programs\python\python38\lib\site-packages\win32\win32api.pyd
6925 WARNING: lib not found: pywintypes38.dll dependency of c:\users\张小胖\appdata\local\programs\python\python38\lib\site-packages\win32\win32wnet.pyd
7017 INFO: Looking for eggs
7018 INFO: Using Python library c:\users\张小胖\appdata\local\programs\python\python38\python38.dll
7019 INFO: Found binding redirects:
[]
7025 INFO: Warnings written to C:\Users\张小胖\Desktop\build\demo\warn-demo.txt
7089 INFO: Graph cross-reference written to C:\Users\张小胖\Desktop\build\demo\xref-demo.html
7130 INFO: checking PYZ
7130 INFO: Building PYZ because PYZ-00.toc is non existent
7134 INFO: Building PYZ (ZlibArchive) C:\Users\张小胖\Desktop\build\demo\PYZ-00.pyz
7971 INFO: Building PYZ (ZlibArchive) C:\Users\张小胖\Desktop\build\demo\PYZ-00.pyz completed successfully.
7989 INFO: checking PKG
7989 INFO: Building PKG because PKG-00.toc is non existent
7989 INFO: Building PKG (CArchive) PKG-00.pkg
10434 INFO: Building PKG (CArchive) PKG-00.pkg completed successfully.
10460 INFO: Bootloader c:\users\张小胖\appdata\local\programs\python\python38\lib\site-packages\PyInstaller\bootloader\Windows-64bit\runw.exe
10460 INFO: checking EXE
10460 INFO: Building EXE because EXE-00.toc is non existent
10461 INFO: Building EXE from EXE-00.toc
10463 INFO: Appending archive to EXE C:\Users\张小胖\Desktop\dist\demo.exe
10474 INFO: Building EXE from EXE-00.toc completed successfully. 

写在最后:
Name:风骨散人,目前是一名双非在校大学生,预计考研,热爱编程,热爱技术,喜欢分享,知识无界,希望我的分享可以帮到你!名字的含义:我想有一天我能有能力随心所欲不逾矩,不总是向生活低头,有能力让家人拥有富足的生活而不是为了生计而到处奔波。“世人慌慌张张,不过是图碎银几两。偏偏这碎银几两,能解世间惆怅,可让父母安康,可护幼子成长 …”
文章主要内容:
Python,C++,C语言,JAVA,C#等语言的教程
ACM题解、模板、算法等,主要是数据结构,数学和图论
设计模式,数据库,计算机网络,操作系统,计算机组成原理
Python爬虫、深度学习、机器学习
计算机系408考研的所有专业课内容
目前还在更新中,先关注不迷路。微信公众号,cnblogs(博客园),CSDN同名“风骨散人”

如果有什么想看的,可以私信我,如果在能力范围内,我会发布相应的博文!
感谢大家的阅读!😘你的点赞、收藏、关注是对我最大的鼓励!

posted @ 2020-06-01 08:30  风骨散人  阅读(370)  评论(0编辑  收藏  举报