Ⅰ. はじめに
import_moduleを利用したプログラムをPyInstallerで実行ファイルを生成し、実行すると以下のエラーが出力されます。
結論からすると「--hidden-import」オプションを指定する必要があります。
> main.exe Traceback (most recent call last): File "main.py", line 4, in <module> File "importlib\__init__.py", line 127, in import_module File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 972, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked ModuleNotFoundError: No module named 'modules' [17304] Failed to execute script main
Ⅱ. やり方
1. サンプルプログラムを書く
main.py
import importlib moduleName = "modules.001" module = importlib.import_module(moduleName) module.helloworld()
modules/001.py
def helloworld(): print('helloworld')
2. 実行ファイルを生成する
pyinstaller main.py --onefile --hidden-import="modules.001"
実行結果
> cd dist > main.exe helloworld