【问题标题】:Code bundled with PyInstaller cannot import a locally installed vtk module: ModuleNotFoundError与 PyInstaller 捆绑的代码无法导入本地安装的 vtk 模块:ModuleNotFoundError
【发布时间】:2020-11-20 06:38:35
【问题描述】:

我尝试将 pyinstaller 应用到简单文件 vtest.py

import vtk

print('Hello World')

在窗户上。我可以运行命令

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时可以导入vtkmodules吗?如果可以,请在此处发布vtkmodules.__file__。如果 python3 -c "import vtkmodules as v; print(v.__file__)" 失败:您可以编辑 vtk.py 第 30 行以打印 vitmoudles.__file__
  • 另外,您能否在主代码中的任何位置添加import vtkmodules 并重试构建和运行?有帮助吗?
  • 我可以导入 vtkmodules。当我打印 vtkmodules.__file__ 我得到C:\Users\djame\AppData\Local\Programs\Python\Python38\lib\site-packages\vtkmodules\__init__.py
  • 我尝试在我的代码中添加import vtkmodules,它会产生类似的错误:ModuleNotFoundError: No module named 'vtkmodules.all'。然后当我导入 vtkmodules.all 时,它似乎工作了!!
  • 好的,我把答案贴出来了,我现在编辑一下标题,有同样问题的人可以用google找到它

标签: python pyinstaller vtk


【解决方案1】:

Pyinstaller 无法检测到此导入,因此它不会将其附加到包中。发生这种情况是因为库中的导入不太直接。

解决方案不止一种:

  • 在您的代码中的任何地方为每个缺失的模块添加import 语句。由于添加新模块可能会导致它导入的新模块丢失,因此您可能需要多次迭代。

  • 将相同的模块列表添加到spec file 或控制台命令中的hiddenimports 参数。这个过程也可能是迭代的。

缺少模块的另一个原因是 PyInstaller 将它们视为系统模块,因为它们存储在像 /usr/lib 这样的目录中。您可以通过导入模块并打印其.__file__ 来检查是否是您的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多