python打包exe文件步骤及遇到的问题
Pyinstaller使用及问题记录
安装Pyinstaller
在python环境下安装pyinstaller,直接安装
pip install pyinstaller
如果网不好或者下载安装时间太慢,可以使用下面阿里镜像加速
pip3 install pyinstaller -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
安装成功
pyinstaller使用
Pyinstaller常用参数
-h,–help | 查看该模块的帮助信息 |
-F,-onefile | 产生单个的可执行文件 |
-D,–onedir | 产生一个目录(包含多个文件)作为可执行程序 |
-a,–ascii | 不包含 Unicode 字符集支持 |
-i, --icon | 使用ico图标作为打包后txt的图标 |
-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 的名字 |
实例
-F
选项可以打出一个exe文件,默认是 -D
,意思是打成一个文件夹。
pyinstaller -F test.py
-w
选项可以打桌面程序,去掉命令行黑框
pyinstaller -F -w test.py
不加-w
-i
给打包的exe文件添加图标
pyinstaller -F -w -i tt.ico test_tk.py
pyinstaller使用错误缺少pywin32
安装pywin32
pip
安装,即可
pip install pywin32
conda环境注意事项
在使用pyinstaller打包时,如果项目环境是部署在conda环境中的,一定要进入conda环境进行打包,这样一些必要的依赖包才会被打包进去,否者打包的项目文件也会因为没有环境无法运行
conda环境迁移
在线迁移
1、在迁出环境中操作,导出conda环境
conda env export > environment.yml
2、导出pip环境
pip freeze > requirements.txt
3、在新机器上重现环境
#恢复conda环境
conda env create -f environment.yml
#恢复pip包
pip install -r requirements.txt
#遇到错误中断,使用如下命令
while read requirement; do pip install $requirement; done < requirements.txt
注:因为是直接安装名称和版本号,所以到了新环境需要重新下载,时间长短根据网络好坏判定
值得注意的一点
如果你想迁移的环境就是base环境,那么会遇到命名错误的问题,最省事的办法就是换个名字再迁移
conda create -n other_name #将环境克隆,取名为other_name
离线迁移(Conda Pack)
Conda-pack
是一个命令行工具,用于打包 conda 环境,其中包括该环境中安装的软件包的所有二进制文件。 当您想在有限或没有网络访问的系统中重现环境时,此功能很有用。上面的方法均从其各自的存储库下载软件包以创建环境。而此方法不需要。注意,conda-pack 指定平台和操作系统,目标计算机必须具有与源计算机相同的平台和操作系统。
安装
要安装 conda-pack,请确保您位于 root 或 base 环境中,以便 conda-pack 在子环境中可用。Conda-pack 可通过 conda-forge 或者 PyPI 安装。
conda安装
conda install -c conda-forge conda-pack
pip安装
pip install conda-pack
打包环境
# 打包环境,不指定压缩包名字,默认会和环境名字相同my_env.tar.gz
conda pack -n my_env
# 打包时指定压缩包名字 other_name
conda pack -n my_env -o other_name.tar.gz
还原环境
#在新环境的conda安装路径下env文件下新建文件new_env
mkdir -p my_env
tar -xzf my_env.tar.gz -C annaconda/env/new_env
#解压后通过终端可以查看到新增了一个环境
conda info -e
#激活环境/进入环境
activate new_env
conda中python虚拟环境作为系统python环境
确保环境conda环境可用情况下,将conda python环境下的三个文件分别加入系统路径
D:\annaconda\envs\py37
D:\annaconda\envs\py37\Scripts
#这个路径对打包或者调用一些dll文件很重要,没有会导致打包的exe为文件找不到系统某个模块
D:\annaconda\envs\py37\Library\bin
打包运行错误
Error loading “C:\Anaconda3\lib\site-packages\torch\lib\caffe2_detectron_ops_gpu.dll”
检查系统环境是否完整,尤其是迁移的环境,可以通过下面方式测试
分别在conda环境和系统环境下运行程序,如果出现相同的错误,这不是环境问题,请使用其他方法解决,否者就同步两边的环境,或者是将虚拟环境按照上面的说法变成系统环境
另外请注意torch的版本,使用torch1.6.0会出现这种恶心人的问题,亲身经历啊,如果没有版本要求,升级你的torch版本,再重新打包就可以了。
还要确认pyinstaller 是否下载正确,可以考虑更换版本试一下。