備忘録

備忘録

import_moduleを利用したプログラムをPyInstallerを利用して実行ファイルを出力する方法

Ⅰ. はじめに

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