PyInstaller添加hiddenimports后仍无法找到casadi._casadi模块的问题求助
各位大佬好,最近我在用PyInstaller打包依赖cadquery的Python应用时卡壳了,折腾好几天都没解决,来求助大家!
情况是这样的:当我的代码里导入cadquery.exporters模块时,打包后的程序运行就会抛出找不到casadi._casadi的错误——哪怕我已经在.spec文件的Analysis对象里明确加了hiddenimports=['casadi', 'casadi._casadi'],甚至直接用命令行参数指定隐藏导入也没用。
问题复现步骤
- 先创建一个极简测试文件
foo.py,内容只有一行:
from cadquery import exporters
- 执行打包命令:
pyinstaller --onefile --hidden-import casadi --hidden-import casadi._casadi foo.py
- 运行生成的可执行文件,就会触发下面的错误。
完整错误日志
Traceback (most recent call last): File "casadi\casadi.py", line 18, in swig_import_helper File "importlib\__init__.py", line 126, in import_module File "<frozen importlib._bootstrap>", line 1050, in _gcd_import File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 1004, in _find_and_load_unlocked ModuleNotFoundError: No module named 'casadi._casadi' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "main_screen.py", line 8, in <module> File "PyInstaller\loader\pyimod02_importers.py", line 457, in exec_module File "cadquery\__init__.py", line 40, in <module> File "PyInstaller\loader\pyimod02_importers.py", line 457, in exec_module File "cadquery\assembly.py", line 22, in <module> File "PyInstaller\loader\pyimod02_importers.py", line 457, in exec_module File "cadquery\occ_impl\solver.py", line 17, in <module> File "PyInstaller\loader\pyimod02_importers.py", line 457, in exec_module File "casadi\__init__.py", line 36, in <module> File "PyInstaller\loader\pyimod02_importers.py", line 457, in exec_module File "casadi\casadi.py", line 21, in <module> File "casadi\casadi.py", line 20, in swig_import_helper File "importlib\__init__.py", line 126, in import_module ImportError: DLL load failed while importing _casadi: The specified module could not be found. [PYI-21168:ERROR] Failed to execute script 'main_screen' due to unhandled exception!
我的疑惑
我了解到casadi._casadi是通过importlib.load_module()动态导入的,PyInstaller的静态分析抓不到这种导入,所以需要手动添加hiddenimports。但我明明已经加了,打包过程也没有任何报错,为什么运行时还是找不到这个模块呢?
另外补充一下:我用自己项目的.spec文件打包时也是同样的情况,打包过程顺利,运行就报错。
有没有遇到过类似问题的大佬能给点思路?万分感谢!




