MacOS下使用pyinstaller打包PyQt5程序
1、准备
(1)PyQt5开发的程序
(2)使用该项目单独的虚拟环境,必免将一些不必要的依赖打包到应用中
# 1、创建python虚拟环境
python -m venv venv
# 2、安装程序依赖,这个开发时都已安装
# 3、虚拟环境安装pyinstaller
pip install pyinstaller
2、pyinstaller介绍
pyinstaller是一个开源工具,用于将Python程序转换为独立的可执行文件。
这些可执行文件可以在没有Python环境的情况下在Windows、Linux和macOS上运行。
pyinstaller通过分析Python脚本中的导入语句来确定程序需要的所有依赖项,并将这些依赖项以及脚本本身打包成一个或多个文件。
3、pyinstaller常用参数
命令查看参数:pyinstaller --help
常用参数:
pyinstaller常用参数 | 说明 |
---|---|
-F(–onefile) | 将程序打包成一个单独的可执行文件 |
-D(–onedir) | 默认参数,与-F 相反,将打包的结果放到一个文件夹中,文件夹里可以看到很多依赖文件 |
-w(–windowed) | 隐藏命令行窗口 |
-c(–console) | 显示命令行窗口 |
-p(–paths) | 自己定义需要加载的路径,比如项目中有多个自建模块时需要加上这个参数, 多个文件可以使用 : 分割,也可以多次使用这个参数 |
-i(–icon) | 程序图标,macos下图标文件为 icns 格式, windows 为ico 格式 |
-n(–name) | 程序名称,不加该参数时,默认 .py 的文件名 |
–hidden-import | 需要导入的隐藏模块 |
–add-data | 将额外的数据文件添加到打包的应用程序中。 |
注:-F
与-D
参数不能同时使用,它们互斥。-w
与-c
参数不能同时使用,它们互斥。
4、打包
mac系统打包命令示例:
pyinstaller -w -p imgToWebp.py -p libwebpDesc.py -i 'app.icns' -n 'ImageC' --add-data 'resources:resources' main.py
- 注意事项
(1)macos下打包时不建议使用-F
参数,我是没打包成功,所以使用-D
参数打包,默认参数可以不用写。
(2)使用--add-data 'resources:resources'
表示将resources文件夹
下内容,添加到应用中的resources文件夹
下。
代码中获取资源路径需要修改,代码如下:
# 获取资源文件路径
def resources_path(relative_path):
if getattr(sys,'frozen',False):
base_path = sys._MEIPASS
else:
base_path = os.path.abspath(".")
return os.path.join(base_path,relative_path)
我的资源文件在resources
文件夹下,使用时resources_path("resources")
获取到了打包后资源文件夹的路径。
(3)mac下图标文件为icns格式
,windows为ico格式