Python Tech

Pyinstaller EXEの実行時にNo module named ...のエラーとなる場合の対処まとめ

PyInstaller はPythonで制作したプログラムをパッケージ化し、WindwosやMac OS上で実行可能なアプリを生成するモジュールです。PyInstallerを使えば、ユーザーがPythonをインストールしなくても、Pythonで書いたアプリを実行できるようになります。

バージョン4.5になって使い勝手がよくなりましたが、importしたモジュールの扱いに関してはまだまだ不可解な挙動をすることがあります。

今回はPyInstallerで "No module named…" エラーが発生したときの対処法についてまとめています。

 

結論

PyInstallerでアプリをビルドするとき、またはアプリの実行中に "No module named…"エラーが発生したときの対処一覧。

  1. 仮想環境は適切に選択されているか? pyinstallerと使用しているモジュールがインストールされた適切な環境で実行しているか?確認する。
  2. specファイルのhidden_importに追加してみる。
  3. 上記でも解消しなければ、pyinstaller、および問題となっているモジュールを再インストールする。

以下のドキュメントを一通りチェックすれば大体解決できるはずです。今回の記事でもこれを参照しています。

When Things Go Wrong — PyInstaller 4.5.1 documentation

 

Pythonのスキルを使って毎月の収入源を増やすのが最適なんじゃないかという件

実際、今のスキルに合わせて仕事を獲得し、スキマ時間で毎月+5、+20、+70万円くらいの人が多いです。

必要なスキル、仕事の獲得までの流れは以下の記事で徹底解説しています。
もちろん全部無料です
空いた時間にぜひ参考にしてみてください。

 

実行環境

Windows 10 Pro (x64) 20H2
Python 3.9.4
pyinstaller 4.5

 

1. 仮想環境が適切に選択されているのを確認

venv, condaなどの仮想環境を使用しているときは、PyInstallerと適切なモジュールがインストールされている環境がアクティブになっているか確認する。

アクティブな仮想環境でインストールされているパッケージを一覧表示するには次のようにします。

$ pip freeze
# ~~~
# pyinstaller==4.5
# ~~~

 

環境を入れ替えてから、ビルドに成功すれば問題ありません。

 

2. specファイルのhidden_importに追加する

PyInstallerのビルドでは、原則的にコードでimportしているモジュールを自動で解析します。

しかし自動でモジュールが認識されずにNo module named…エラーが発生することも。

そんなときはHidden Importsを追加して解消します。

Hidden Imports を追加するには主に

  • オプションを指定する方法
  • specファイルに追記する方法

があります。

 

--hidden-importオプションを指定する

$ pyinstaller xxxx.py –hidden-import=[モジュールへのパス]

 

エラーが出なくなるまで、必要なモジュールだけを追加していきます。

 

specファイルに追記する

以下はspecファイルのサンプル例です。

block_cipher = None
a = Analysis(['minimal.py'],
     pathex=['/Developer/PItests/minimal'],
     binaries=None,
     datas=None,
     hiddenimports=[モジュールへのパス],
     hookspath=None,
     runtime_hooks=None,
     excludes=None,
     cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
     cipher=block_cipher)
exe = EXE(pyz,... )
coll = COLLECT(...)

 

specファイルを利用してビルドするには、次のようなコマンドを実行します。

$ pyinstaller app.spec 

 

3. (それでもダメなら)モジュール自体を再インストール

上記の対応をしても、なおエラーが出てしまう場合は、PyInstallerと対象のモジュールを再インストールします。

設定は一通り正しそうだけどうまく動かない…そんなときはコレで解消できる場合が多いです。

pip なら以下のように、pip uninstall 、pip install でOKです。

$ pip uninstall sqlalchemy
$ pip install sqlalchemy

 

今回参考にしたページ・資料

When Things Go Wrong — PyInstaller 4.5.1 documentation

Using Spec Files — PyInstaller 4.5.1 documentation

  • この記事を書いた人

次世代ペンギン

長いのでペンギンとお呼びください。システム開発・プログラミングのお仕事をしています。甘味とコーヒーは生命線。多くの人に役立つ情報のシェアが目標です。

人気の記事

1

会社員でプログラマーとして働いている人、インフラやネットワークのエンジニアとして働いている人の中には、フリーランスのプログラマーとして独立、もしくは転向したい人もいるので ...

2

キャリアアップのため、または高収入を目指して、しっかりプログラミングを学びたいという人が増えてきましたね。 この記事では現役のエンジニアである私が、実際に仕事で稼げるよう ...

3

フリーランスのプログラマーにとって収入の向上に最も直結するのはスキルです。 必要なスキル、スキルの獲得方法が気になる人も多いでしょう。 また、これからフリーランスを目指す ...

4

Vuetifyの v-progress-circular コンポーネントは、数値データや処理状況を環状(円状)のデザインで教えてくれるUIデザインです。 ローディングのス ...

5

Vuexのstore(ストア)を使うと、各コンポーネント間で個別にデータのやり取りすることなく、データを一元的に管理できます。Vueでは欠かせない機能といえるでしょう。 ...

-Python, Tech
-, ,