使用PyInstaller spec打包PyPylon Python项目为exe报错
解决PyInstaller打包pypylon程序时找不到
_pylon和_genicam模块的问题 我之前遇到过完全一样的问题,这是因为PyInstaller的自动依赖分析机制没检测到pypylon底层的C扩展模块——_pylon和_genicam是通过SWIG动态加载的,PyInstaller默认不会把这类隐式依赖包含进去。下面是两种可靠的解决办法:
方法1:修改PyInstaller Spec文件(推荐)
如果你已经在用spec文件打包,直接打开你的.spec文件,找到Analysis部分,把这两个模块添加到hiddenimports列表中:
a = Analysis( ['MainGuiLogic.py'], # 替换成你的主脚本文件名 pathex=[], binaries=[], datas=[], # 手动添加PyInstaller没检测到的隐式依赖 hiddenimports=['pypylon._pylon', 'pypylon._genicam'], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False, )
保存后,用修改后的spec文件重新打包:
pyinstaller your_script_name.spec
方法2:直接用命令行参数指定隐式依赖
如果还没生成spec文件,打包时直接通过--hidden-import参数手动指定依赖:
pyinstaller --hidden-import=pypylon._pylon --hidden-import=pypylon._genicam MainGuiLogic.py
额外排查点
如果按上面的方法操作后仍报错,可能需要手动打包pypylon的核心DLL文件。找到你的pypylon安装目录(比如Anaconda环境下的Lib/site-packages/pypylon),把里面的PylonC.dll、GenApi_MD_VCxxx_vx_x.dll这类文件添加到spec文件的binaries字段中:
binaries=[ ('C:/ProgramData/Anaconda3/Lib/site-packages/pypylon/PylonC.dll', '.'), ('C:/ProgramData/Anaconda3/Lib/site-packages/pypylon/GenApi_MD_VC142_v3_10.dll', '.') ]
记得替换成你自己的实际安装路径。
这样打包出来的exe就能正常加载pypylon的模块,顺利运行你的相机操作代码了。
内容的提问来源于stack exchange,提问作者Ahad aghapour
相关产品推荐
相关产品推荐

