参考
https://zhuanlan.zhihu.com/p/130328237
https://zhuanlan.zhihu.com/p/406790850
https://blog.youkuaiyun.com/moxiao1995071310/article/details/116932406
https://www.jianshu.com/p/38abe3b198af
打包代码
生成spec
pyinstall **.py //直接打包
pyinstall -F **.py //打包成单文件
pyinstall -W **.py //去掉控制台窗口,黑窗口
pyinstall -i ***.ico **.py //添加图标 ***
pyinstaller app.spec
- 问题1
onnx 版本要和自己cuda和cudnn匹配,否则会找不到相应的dll
Library not found: could not resolve ‘cublas64_12.dll’, dependency of
‘C:\ProgramData\anaconda3\envs\x-anylabeling\lib\site-packages\onnxruntime\capi\onnxruntime_providers_cuda.dll’.
pip install onnxruntime-gpu==1.16.0
2. 问题2
dll load failed while importing onnx_cpp2py_export 动态链接库(DLL)初始化历程失败
解决方法: 将System32中的这些dll拷贝到exe目录下:
导出处spec路径:
pyi-makespec -D main.py (使用:生成多个文件,文件太大,生成一个报错)
pyinstaller –name=your_app_name –onefile –windowed your_script.py
# -*- mode: python ; coding: utf-8 -*-
import sys
from PyInstaller.utils.hooks import copy_metadata
sys.setrecursionlimit(5000) # required on Windows
a = Analysis(
['app.py'],
pathex=['../code'],
binaries=[],
datas=copy_metadata('torchvision'),
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='app',
debug=True,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
coll = COLLECT(
exe,
a.binaries,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='app',
)
pyinstaller app.spec
3. 问题3
serialized_entry = struct.pack( ^^^^^^^^^^^^
struct.error: ‘I’ format requires 0 <= number <= 4294967295
原因是打包成一个exe文件太大了,超出范围,需要拆分成多个文件
https://blog.youkuaiyun.com/qq_52785898/article/details/127494245
4.问题4
pyinstaller no package metadata was found for torchvision
https://blog.youkuaiyun.com/qq_31679735/article/details/143972630
方法1(实测):
from PyInstaller.utils.hooks import copy_metadata
a = Analysis(
['app.py'],
pathex=['../code'],
binaries=[],
datas=copy_metadata('torchvision'),
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
方法2:
datas = [
('D:/Python/Lib/site-packages/tortoise-orm-0.18.0.dist-info', 'tortoise-orm-0.18.0.dist-info'),
]
5. 问题5
运行程序时,一直循环启动app.exe
暂时未解决
2025-08-01 更新
- 生成默认 spec 文件
pyinstaller --name="AI标注工具" --windowed main.py
执行后会生成 AI标注工具.spec 文件。
- 编辑 spec 文件
用文本编辑器打开 AI标注工具.spec,修改以下关键部分:
# -*- mode: python ; coding: utf-8 -*-
# -*- mode: python ; coding: utf-8 -*-
import sys
from pathlib import Path
# 获取项目根目录
root_path = Path(__file__).parent
ultralytics_path = r'D:\yolos\ultralytics\ultralytics'
a = Analysis(
['annotation_tool.py'],
pathex=[str(root_path)],
binaries=[],
datas=[],
hiddenimports=[
'preimport',
'ultralytics',
'ultralytics.*', # 通配符匹配所有子模块
'ultralytics.nn.*',
'ultralytics.yolo.*',
'ultralytics.data.*',
'ultralytics.engine.*',
'ultralytics.utils.*',
'PyQt5.QtXml', # 可能缺失的PyQt5子模块
],
datas=[(ultralytics_path, 'ultralytics')], # 格式:(源路径, 打包后路径)
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=None,
noarchive=False,
)
icon_files = [(str(f), str(f.parent.relative_to(root_path)))
for f in root_path.glob("App/Packages/icons/*") if f.is_file()]
pyz = PYZ(a.pure, a.zipped_data, cipher=None)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas + icon_files, # 添加资源文件
name='AI标注工具',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True, # 压缩EXE体积
upx_exclude=[],
runtime_tmpdir=None,
console=True, # 隐藏控制台
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon=str(root_path / "App/Packages/icons/airbnb.png"), # 图标路径
)
coll = COLLECT(
exe,
a.binaries,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='SharetekAI',
)
)
pyinstaller AI标注工具.spec --clean # 清除缓存,确保新配置生效
2025-08-04
问题1:DLL load failed while importing onnx_cpp2py_export
动态链接库(DLL)初始化例程失败
# 卸载现有库
pip uninstall onnx onnxruntime
# 重新安装(指定较稳定的版本)
pip install onnx==1.16.1 onnxruntime-gpu==1.16.1 onnxruntime==1.6.1(这三个都要安装相同的版本)
如果安装后matplotlib debug出现问题,重新安装一下
pip install matplotlib
bash 问题2:DLL load failed while importing tensorrt : 找不到指定的模块
pip install tensorrt-8.6.1-cp311-none-win_amd64.whl
将tensorrt的libs中的库拷贝过去(后面重新编译后,不加也能够正常启动)
.spec 1
# -*- mode: python ; coding: utf-8 -*-
import sys
from pathlib import Path
import os
import onnx
import onnxruntime
import tensorrt
# 获取项目根目录
root_path = os.getcwd()
import ultralytics
ultralytics_path = os.path.dirname(os.path.dirname(ultralytics.__file__))
# 获取onnx和onnxruntime的安装路径
onnx_path = os.path.dirname(onnx.__file__)
#onnxruntime_path = os.path.dirname(onnxruntime.__file__)
tensorrt_path = os.path.dirname(tensorrt.__file__)
a = Analysis(
['annotation_tool.py'],
pathex=[os.path.join(str(root_path), "App")],
binaries=[],
hiddenimports=[
'preimport',
'ultralytics',
'ultralytics.yolo',
'ultralytics.nn',
'onnx',
'onnxruntime',
'onnxruntime.capi',
'onnxruntime.capi._pybind_state',
'onnxruntime.quantization',
'onnxruntime.tools',
],
datas=[
(ultralytics_path, 'ultralytics'),
(onnx_path, 'onnx'),
#(onnxruntime_path, 'onnxruntime'),
(tensorrt_path, 'tensorrt'),
# 如果你有其他需要打包的数据文件,可以在这里添加
],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=None,
noarchive=False, # 确保所有模块都被归档,不生成单独的.pyz文件
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='AI 2.0.0',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
icon='resources/images/icon.icns'
)
coll = COLLECT(
exe,
a.binaries,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='AI 2.0.0',
)