python打包exe文件步骤及遇到的问题

Pyinstaller使用及问题记录

安装Pyinstaller

在python环境下安装pyinstaller,直接安装

pip install pyinstaller

启动python exe特别慢 python打包exe启动慢_linux

如果网不好或者下载安装时间太慢,可以使用下面阿里镜像加速

pip3 install pyinstaller -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

安装成功

启动python exe特别慢 python打包exe启动慢_linux_02

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

启动python exe特别慢 python打包exe启动慢_linux_03

-w 选项可以打桌面程序,去掉命令行黑框

pyinstaller -F -w test.py

不加-w

启动python exe特别慢 python打包exe启动慢_ico_04

-i给打包的exe文件添加图标

pyinstaller -F -w -i tt.ico test_tk.py

启动python exe特别慢 python打包exe启动慢_启动python exe特别慢_05

pyinstaller使用错误缺少pywin32

启动python exe特别慢 python打包exe启动慢_启动python exe特别慢_06

安装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”

启动python exe特别慢 python打包exe启动慢_开发语言_07

检查系统环境是否完整,尤其是迁移的环境,可以通过下面方式测试

分别在conda环境和系统环境下运行程序,如果出现相同的错误,这不是环境问题,请使用其他方法解决,否者就同步两边的环境,或者是将虚拟环境按照上面的说法变成系统环境

另外请注意torch的版本,使用torch1.6.0会出现这种恶心人的问题,亲身经历啊,如果没有版本要求,升级你的torch版本,再重新打包就可以了。
还要确认pyinstaller 是否下载正确,可以考虑更换版本试一下。