You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PyInstaller添加hiddenimports后仍无法找到casadi._casadi模块的问题求助

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文件打包时也是同样的情况,打包过程顺利,运行就报错。

有没有遇到过类似问题的大佬能给点思路?万分感谢!

火山引擎 最新活动