相关阅读
标题 | 链接 |
---|---|
如何打包python程序为exe | bczl |
【auto-py-to-exe 可视化打包python到exe】 | 51CTO ZATA |
1. python源码
打包时需要特别注意的源码编写规范
除了基本的 Python 编码规范之外,在准备程序进行打包时,还需要特别注意以下几点:
1.1 依赖管理
- 确保
requirements.txt
文件中列出了程序所有的依赖库 - 检查依赖库的版本兼容性,避免打包后出现兼容性问题
- 尽可能使用
pip freeze > requirements.txt
自动生成依赖列表
1.2 动态导入处理
- 程序中如果使用了动态导入,需要确保 PyInstaller 能够正确识别并打包
- 可以使用
PyInstaller --hiddenimport
选项手动指定隐藏依赖
1.3 平台兼容性
- 如果程序需要跨平台运行,需要确保代码本身具有良好的跨平台兼容性
- 针对不同平台,可能需要使用条件编译或运行时检测来适配
1.4 文件路径处理
- 程序中涉及文件读写操作时,需要注意处理相对路径和绝对路径
- 打包后的程序文件结构可能与开发环境不同,需要适当调整路径
1.5 图形界面兼容性
- 如果程序有图形界面,需要确保界面组件在打包后能正常工作
- 可能需要额外打包一些 GUI 库的依赖项
1.6 第三方库限制
- 某些第三方库可能不支持 PyInstaller 打包,需要提前了解并做好替代方案
- 对于不支持的库,可以考虑使用纯 Python 实现或寻找替代方案
1.7 运行时环境
- 确保程序在打包后的运行环境下能正常工作,例如环境变量、系统依赖等
目录结构
典型的目录结构
project_name/
├── src/
│ ├── init .py
│ └── main.py
├── tests/
│ ├── init .py
│ └── test_main.py
├── resources/
│ ├── config.ini
│ └── images/
├── requirements.txt
├── setup.py
└── README.md
文件地址如何引用
如果项目中使用到了文件
相对导入
在同一个包内部,可以使用相对导入的方式引用其他模块。
pythonCopyfrom . import some_module
from .subpackage import another_module
绝对导入
跨包引用时,需要使用绝对导入的方式。
pythonCopyfrom project_name.modules import some_module
from project_name.subpackage import another_module
注意事项
避免循环导入问题,可以使用 main 进行条件导入。
保持导入语句的位置在文件顶部。
优先使用绝对导入,相对导入仅在同一包内部使用。
2. 源码打包成exe --- pyinstaller库
打包成一个文件
bash
pyinstaller -F main.py
打包成多个文件(软件启动速度会快点)
bash
pyinstaller -D main.py
使用配置文件.spec打包
your_project.spec a = Analysis(['main.py'], ...
bash
pyinstaller your_project.spec
3. exe打包成安装程序 --- 以Inno为例
所需文件-安装inno
首先下载以下两个文件
- 下载地址:https://jrsoftware.org/isdl.php
- 中文包地址:https://jrsoftware.org/files/istrans/ (找到中文之后点击download会跳转到一个网页,点击另存为就可以,把后缀名修改一下)
- 安装inno 安装好了这样
使用inno界面打包exe为安装包
- 新建
- 安装介绍去安装就好了,但是要非常主要这一步
如果你想把相关文件放到根目录,即使你选的是文件夹,也要再次进行如下的设置