与 PyInstaller 捆绑在一起的代码无法导入本地安装的 vtk 模块:ModuleNotFoundError
Code bundled with PyInstaller cannot import a locally installed vtk module: ModuleNotFoundError
我尝试将 pyinstaller 应用于简单文件 vtest.py
import vtk
print('Hello World')
于 windows。我可以运行命令
py vtest.py
没有问题。但是当我尝试使用命令
生成一个 exe 时
pyinstaller vtest.py --onefile
当我尝试 运行 可执行文件
时出现错误
Traceback (most recent call last):
File "vtest.py", line 1, in <module>
File "c:\users\djame\appdata\local\programs\python\python38\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module
exec(bytecode, module.__dict__)
File "vtk.py", line 30, in <module>
File "importlib\__init__.py", line 127, in import_module
ModuleNotFoundError: No module named 'vtkmodules'
[11448] Failed to execute script vtest
我尝试按照概述更改挂钩文件 here 但没有成功。
Pyinstaller 无法检测到此导入,因此不会将其附加到包中。发生这种情况是因为库中的导入不太直接。
解决方案不止一种:
在代码中的任何地方为每个缺失的模块添加 import
语句。由于添加新模块可能会导致它导入新的缺失模块,因此您可能需要多次迭代。
将相同的模块列表添加到 spec file 或控制台命令中的 hiddenimports
参数。这个过程也可能是迭代的。
缺少模块的另一个原因是 PyInstaller 将它们视为系统模块,因为它们存储在像 /usr/lib
这样的目录中。您可以通过导入模块并打印其 .__file__
.
来检查是否属于您的情况
我尝试将 pyinstaller 应用于简单文件 vtest.py
import vtk
print('Hello World')
于 windows。我可以运行命令
py vtest.py
没有问题。但是当我尝试使用命令
生成一个 exe 时pyinstaller vtest.py --onefile
当我尝试 运行 可执行文件
时出现错误Traceback (most recent call last):
File "vtest.py", line 1, in <module>
File "c:\users\djame\appdata\local\programs\python\python38\lib\site-packages\PyInstaller\loader\pyimod03_importers.py", line 493, in exec_module
exec(bytecode, module.__dict__)
File "vtk.py", line 30, in <module>
File "importlib\__init__.py", line 127, in import_module
ModuleNotFoundError: No module named 'vtkmodules'
[11448] Failed to execute script vtest
我尝试按照概述更改挂钩文件 here 但没有成功。
Pyinstaller 无法检测到此导入,因此不会将其附加到包中。发生这种情况是因为库中的导入不太直接。
解决方案不止一种:
在代码中的任何地方为每个缺失的模块添加
import
语句。由于添加新模块可能会导致它导入新的缺失模块,因此您可能需要多次迭代。将相同的模块列表添加到 spec file 或控制台命令中的
hiddenimports
参数。这个过程也可能是迭代的。
缺少模块的另一个原因是 PyInstaller 将它们视为系统模块,因为它们存储在像 /usr/lib
这样的目录中。您可以通过导入模块并打印其 .__file__
.