目录
-
打包单文件
-
打包多文件
1、打包单文件
pyinstaller在打包过程中会自动将脚本文件里的import库自动打包到软件中,所以不需要在打包时再添加到.spec文件中。
打包过程如下:
a、在conda虚拟环境中创建新的环境来安装需要的包以及pip install pyinstaller,也可以在原程序的虚拟环境下安装pyinstaller直接打包,区别在于新建环境安装需要的包会使打包文件更小。
b、使用anaconda prompt命令行激活环境,转到需要打包的程序文件夹下,使用如下命令转换文件夹位置:如果是D:\detect\project。先输入D:转到D盘,然后输入cd D:\detect\project转到对应文件
c、输入pyinstaller --onefile your_script.py进行打包
这将使用pyinstaller
工具将Python文件打包成一个独立的可执行文件。
--onefile
选项表示将所有依赖项合并为单个可执行文件,而不是生成多个文件。
2、打包多文件
a、b步骤相同
c、推荐使用pyinstaller -D xxxxx.py命令进行打包,会在脚本的文件夹下生成一个*.spec文件。
*.spec文件包含了打包需要使用的所有配置信息。直接在命令行中将*.spec文件路径传给pyinstaller,也可以进行打包。比如:
pyinstaller my_app_name.spec
(其中my_app_name.spec是根据my_app_name.py生成的Spec文件)
这样,当你多次打包同一个项目时,就无需每次都传入那么多参数,只需要传入*.spec文件的路径即可。
*.spec文件也比较好处理,直接使用python编辑器或记事本就能编辑。
d、更改生成的.spec文件
# -*- mode: python ; coding: utf-8 -*-
import sys ; sys.setrecursionlimit(sys.getrecursionlimit() * 5)
block_cipher = None
a = Analysis(
['threadwhile.py'],
pathex=['D:\Detectproject'],//打包程序路径
binaries=[],
datas=[('ui/Detect.ui','ui'),('onnx/best.onnx','onnx')],//ui/Detect.ui相对打包程序路径
下的文件,ui为要放入打包好的
程序里的文件夹。这行代表要加
入的外部数据
hiddenimports=[], //这段添加要包含的库如.dll
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='threadwhile',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True, //是否使用控制台对应-w
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
coll = COLLECT(
exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='threadwhile',
)
一般情况下('ui/Detect.ui','ui'),('onnx/best.onnx','onnx')这两个数据不需要特别添加。
注意在代码中使用了相对路径的得按照标准的相对路径拼接成绝对路径,或者直接写死成绝对路径,有相对路径的情况下使用-D打包不会出错,使用-F打包会出现问题
e、根据报错情况从anaconda3\envs\yolov5\Lib\site-packages虚拟环境路径下的包路径把相应的包拷贝到Detectproject\dist\threadwhile下。例如onnxruntime报错显示找不到cuda就将anaconda3\envs\yolov5\Lib\site-packages\onnxruntime文件夹里的文件拷贝到Detectproject\dist\threadwhile\onnxruntime中缺少的补全下。
还有一种情况会缺少在torch/lib/caffe2_nvrtc.dll文件,这时候需要在虚拟环境envs\yolov5\bin下面的文件拷贝到torch/lib下,复制完之后出现无法加载cudart32_110.dll的情况是因为系统是64位的,只需要将其删除就可
一些走过的弯路,
1、环境最后是按照能跑通的程序环境一致,可以使用conda list -e > requirements.txt导出需要的包及版本,在新环境中使用conda install --yes --file requirements.txt安装需要的环境
2、pyinstaller的版本更换后导出来的程序报错都不一样,但是推荐使用新版本的pyinstaller可以避免一些问题(pyinstaller==5.13.2)
3、建议关闭电脑的防火墙和实时保护,别问为什么,踩过文章来源:https://www.toymoban.com/news/detail-799257.html
4、将打包后的exe文件拖到cmd命令提示符中可以查看报错文章来源地址https://www.toymoban.com/news/detail-799257.html
到了这里,关于pyinstaller打包pytorch、opencv、onnxruntime-gup、pyqt5成exe可移植的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!