PyInstaller와 함께 번들로 제공되는 코드는 로컬에 설치된 vtk 모듈을 가져올 수 없습니다 : ModuleNotFoundError

Nov 20 2020

간단한 파일 vtest.py에 pyinstaller를 적용하려고했습니다.

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

여기에 설명 된대로 후크 파일을 변경하려고 시도 했지만 운이 없습니다.

답변

1 KroshkaKartoshka Nov 20 2020 at 05:09

Pyinstaller는이 가져 오기를 감지 할 수 없으므로 번들에 첨부하지 않습니다. 이것은 libs에서 덜 간단하게 가져 오기 때문에 발생합니다.

둘 이상의 솔루션이 있습니다.

  • 코드의 어느 곳에서나 import누락 된 모든 모듈에 대한 문을 추가 합니다. 새 모듈을 추가하면 가져 오는 새 모듈이 누락 될 수 있으므로 여러 번 반복해야 할 수 있습니다.

  • 사양 파일 또는 콘솔 명령의 hiddenimports인수에 동일한 모듈 목록을 추가합니다 . 이 프로세스는 반복적 일 수도 있습니다.

누락 된 모듈의 또 다른 이유는 PyInstaller가 /usr/lib. 모듈을 가져 와서 .__file__.