Kod dołączony do PyInstaller nie może zaimportować lokalnie zainstalowanego modułu vtk: ModuleNotFoundError
Próbowałem zastosować pyinstaller do prostego pliku vtest.py
import vtk
print('Hello World')
w oknach. Mogę uruchomić polecenie
py vtest.py
bez problemu. Ale kiedy próbuję wygenerować exe za pomocą polecenia
pyinstaller vtest.py --onefile
Otrzymuję błąd, gdy próbuję uruchomić plik wykonywalny
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
Próbowałem zmienić plik haka, jak opisano tutaj, ale bez powodzenia.
Odpowiedzi
Pyinstaller nie może wykryć tego importu, więc nie dołącza go do pakietu. Dzieje się tak z powodu mniej prostego importu w bibliotekach.
Istnieje więcej niż jedno rozwiązanie:
W dowolnym miejscu kodu dodaj
import
instrukcję dla każdego brakującego modułu. Ponieważ dodanie nowego modułu może prowadzić do nowych brakujących modułów, które importuje, możesz potrzebować kilku iteracji.Dodaj tę samą listę modułów do
hiddenimports
argumentu w pliku spec lub poleceniu konsoli. Ten proces może być również iteracyjny.
Innym powodem brakujących modułów jest to, że PyInstaller traktuje je jako systemowe, ponieważ są przechowywane w katalogach /usr/lib
. Możesz sprawdzić, czy tak jest w Twoim przypadku, importując moduł i drukując jego plik .__file__
.