赞
踩
前言
PyInstaller 可以将 Python 程序打包为独立的可执行文件,不需要用户手动安装 Python 和相关依赖。这使得分发和部署变得更加简单,方便将 Python 程序交付给其他用户或客户。
目录
pip install pyinstaller
-F
或--onefile
:生成单个独立的可执行文件而不是一个文件夹,这对于分发和部署来说更方便。
-w
或--windowed
:在 Windows 上生成一个没有控制台窗口的可执行文件,适用于 GUI 应用程序。
-c
或--console
:在 Windows 上生成一个带有控制台窗口的可执行文件,适用于命令行应用程序。
-n NAME
或--name=NAME
:指定生成的可执行文件的名称。
-i ICON
或--icon=ICON
:指定可执行文件的图标文件。
--add-data "SRC;DEST"
:将额外的非 Python 文件(例如配置文件、数据文件等)复制到可执行文件的目录下。
--add-binary "SRC;DEST"
:将二进制文件(例如 DLL 文件)复制到可执行文件的目录下。
--hidden-import MODULE
:手动添加导入的模块,以确保它们被正确地包含在可执行文件中。
--exclude MODULE
:排除特定的模块以减小可执行文件的大小。
--upx
:使用 UPX 压缩可执行文件,这可以减小文件的大小。
pyinstaller xxx.py
pyinstaller -Fw D:\my_Script.py -i D:\my.ico --distpath D:\dist_tool --name my_Tool --upx-dir D:\dist_tool\upx-4.0.2-win64
修改spec文件,使用spec进行打包.
pyinstaller -Fw D:\my_Script.spec
- 打包后的程序无法运行
- 打包后的程序体积较大
- 打包后的程序出现兼容性问题
- 打包后的程序出现运行效率等问题
- 打包后的程序出现安全问题
文件路径和相对路径:由于 PyInstaller 将所有文件打包成单个可执行文件,因此文件路径和相对路径可能会发生变化。确保你的程序中使用了相对路径或动态获取文件路径的方法,以避免在打包后无法找到文件的问题。
依赖管理:PyInstaller 会尝试自动检测和打包程序所依赖的库和资源文件,但有些情况下可能会出现依赖管理的问题。确保你在打包前已经安装了所有程序所需的依赖,并且这些依赖对于 PyInstaller 是可访问的。如果遇到依赖未被正确打包或加载的问题,可以考虑手动添加依赖项。
- 针对该项目用到的依赖库,单独配置一套打包用的极简环境.
- 使用--upx参数,在引进压缩工具的帮助下,减少打包程序的体积;
问题出在pyinstaller包不能正常找到pywin32模块的位置
需要在目录 Lib\site-packages\PyInstaller\hooks手动创建添加一个文件
hook-win32api.py
hook-win32api.py内容如下
- from PyInstaller.utils.hooks import collect_submodules
-
- hiddenimports = collect_submodules('win32com')
如果 Python 解释器被打包成可执行文件(例如使用 PyInstaller、py2exe 等工具),子进程的启动方式会与普通的 Python 脚本运行方式稍有不同。
freeze_support()
函数的作用是检查当前脚本是否正在被打包成可执行文件,如果是,则执行一些必要的初始化操作,使子进程能够正常工作。如果没有调用 freeze_support()
函数,可能会导致子进程无法正确启动或运行。(避免子进程重复启动)
- import multiprocessing
-
- def worker():
- print('This is a worker process')
-
- if __name__ == '__main__':
- multiprocessing.freeze_support() # 调用 freeze_support() 函数
-
- p = multiprocessing.Process(target=worker)
- p.start()
- p.join()
内容
需要将pyecharts应用于独立GUI软件/CS架构开发
spec文件
- a = Analysis(['main.py'],
- pathex=['.\\'],
- binaries=[],
- datas=[('.\\resource\\datasets', 'pyecharts\\datasets\\.'),
- ('.\\resource\\templates', 'pyecharts\\render\\templates\\.')],
- hiddenimports=[],
- hookspath=[],
- runtime_hooks=[],
- excludes=[],
- win_no_prefer_redirects=False,
- win_private_assemblies=False,
- cipher=block_cipher,
- noarchive=False)
处理流程
- 创建
resources
文件夹 pyecharts资源文件datasets
及templates
整合至特定目录下(如打包目录下./resources
文件夹)- 修改Spec文件 已有pyinstaller生成的
.spec
文件(每次执行pyinstaller都会生成一个spec文件)修改datas
字段(元组中左侧元素为资源文件路径,右侧是打包后相对于临时文件夹路径拷贝位置)- 执行打包 指令pyinstaller main.spec -Fw
注意:spec文件最好和
resources文件夹在同一层级,方便找到.
参考链接 pyecharts官方地址https://pyecharts.org/#/zh-cn/pyinstaller_pack
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。