【Python】pyinstaller 模块 _ 生成可执行程序
pyinstaller 命令行打包
安装模块
# 安装 > pip install pyinstaller # 升级模块版本 > pip install --upgrade pyinstaller
# 安装成功时打印 Successfully installed pyinstaller-4.5.1
参数
参数 用法 -F 生成结果是一个 exe 文件,所有的第三方依赖、资源和代码均被打包进该 exe 内 -D 生成结果是一个目录,各种第三方依赖、资源和 exe 同时存储在该目录(默认) -a 不包含unicode支持 -d 执行生成的 exe 时,会输出一些log,有助于查错 -w 不显示命令行窗口 -c 显示命令行窗口(默认) -p 指定额外的 import 路径,类似于使用 python path -i 指定图标 -v 显示版本号 -n 生成的 .exe 的文件名
--add-data [file:dir]:添加数据文件。如果有多个文件需要添加,本选项可以出现多次。参数的格式为文件名+输出目录名,用路径分隔符分割,在 Windows 下使用 ;,其它系统下则使用 :。 如果输出到和脚本相同的目录,则使用 . 作为输出目录。
--add-binary [file:dir]:添加二进制文件,即运行程序所需的.exe/.dll/.so 等。
语法
# -F 产生单个的可执行文件 # cmd 命令行路径为文件目录:Z:\package\files, 生成文件存放在Z:\package\files Z:\package\files> pyinstaller -F protion.py # -D 产生一个目录(包含多个文件)作为可执行程序 # cmd命令行路径非文件目录,生成文件存放在路径 Z:\ 下 Z:\> pyinstaller -D Z:\xxx\xxx\protion.py
执行命令后会在当前目录 生成文件
main.spec 文件:其前缀和脚本名相同,指定了打包时所需的各种参数;
build 目录:其中存放打包过程中生成的临时文件。
warnxxxx.txt文件记录了生成过程中的警告/错误信息。如果 PyInstaller 运行有问题,需要检查warnxxxx.txt文件来获取错误的详细内容。
xref-xxxx.html文件输出 PyInstaller 分析脚本得到的模块依赖关系图。
dist目录:存放生成的最终文件。如果使用单文件模式将只有单个执行文件;如果使用目录模式的话,会有一个和脚本同名的子目录,其内才是真正的可执行文件以及附属文件。
遇到的问题:
找不到依赖包
> pyinstaller -F protion.py
PyInstaller cannot check for assembly dependencies. Please install pywin32-ctypes. pip install pywin32-ctypes
根据提示安装pywin32-ctypes
> pip install pywin32-ctypes
Looking in indexes: http://pypi.douban.com/simple Requirement already satisfied: pywin32-ctypes in c:\users\thinkpad\appdata\local\programs\python\python38-32\lib\site-packages (0.2.0)
解决方法:
# 第一步: # 查看已安装需要升级的模块 > pip list -o # 如果存在新版本 升级模块成功后进行第二步 > pip install --upgrade pyinstaller # 已是最新版本则直接配置第二步 # 第二步 # python安装模块路径进入Lib/site-packages/Pyinstaller中找到compat.py文件 # 示例:C:\Users\ThinkPad\AppData\Local\Programs\Python\Python38-32\Lib\site-packages\PyInstaller compat.py # 打开文件搜索 win32ctypes if is_win: try: from win32ctypes.pywin32 import pywintypes # noqa: F401 from win32ctypes.pywin32 import win32api except ImportError: # This environment variable is set by setup.py # - It's not an error for pywin32 to not be installed at that point if not os.environ.get('PYINSTALLER_NO_PYWIN32_FAILURE'): raise SystemExit('PyInstaller cannot check for assembly dependencies.\n' 'Please install pywin32-ctypes.\n\n' 'pip install pywin32-ctypes\n') 将原有的: from win32ctypes.pywin32 import pywintypes # noqa: F401 from win32ctypes.pywin32 import win32api 修改为: #from win32ctypes.pywin32 import pywintypes # noqa: F401 #from win32ctypes.pywin32 import win32api import pywintypes import win32api
-------------------------------------------------------------------------------------
如果万事开头难 那请结局一定圆满 @ Phoenixy
-------------------------------------------------------------------------------------