PyInstallerでハマった話

やあ、お久しぶりです。

なんだかんだで色々やってたら月日が流れてました。
ブログってそんなもんですよね。

JTX
JTX
自分に甘いからな

最近はpythonでプログラミングをやってるのですが
環境を入れるのはめんどくさい、けど別のPCでpythonを実行したいって時に
pythonをexeにして実行したりしてます。

pythonのexe化はPyInstallerでexe化してるのですが、ハマったのでメモ代わりに。

ちなみにPyInstallerの使い方などは以下のページを参考に

[PyInstallerでexeファイル化]

PyInstallerの導入は気が向いたら解説します。

・発生した問題と試した事

今回、PyInstallerでexe化したのですが、pythonの作成環境は

・anaconda(python3.8)
・eclipse2020

で作成していました。

JTX
JTX
そもそもPyinstallerってpython3.8では動かないだろ

今の所動いてますよ、どこでバグ出るか分からないから怖いけど。。
自分が使う用だからそこは勘弁。。
多分偉い人がpyinstallerをpython3.8でも動く様にしてくれてると思ってる。。

そしてハマった内容が以下のページ

[Python PyInstaller で急に No module named pyinstaller]

[Pyinstallerを使ってPythonコードから生成した実行ファイルについて、実行時エラーModuleNotFoundErrorを回避]

コンパイルして実行するとNo module namedで実行されず
これには苦戦しました。。

JTX
JTX
何回コンパイルやり直したんだろうな

exe化しているpythonファイルは主にseleniumや独自モジュールを読み込ませてたのですが
独自モジュールの方がNo module namedとなり起動しても実行されない状態でした。

上記リンクの内容のspecファイルを編集してコンパイルし直しも試しましたが上手くいきませんでした。

・結論と解決方法

デバッグログを見たりしてやっていましたが
以下ページの

[No module named when using PyInstaller]

Wow, this helped, tnx. Though I had to make my main script folder a python package by creating __init__.py in the same folder. Otherwise strange things would happen depending on from where the executable was run. Anything from failing relative import to not succeeding importing serial

この一文で解決しました。
つまり僕のケースでは「__init__.py」がプロジェクト内から削除された状態でexe化したので
no moduleになっていたみたいです。

JTX
JTX
そういやmain.pyとか作って__init__.pyイラネって消したんだっけ

これはよく調べずに消したのが悪かった。。
完全に勉強不足ですね。。

ちなみに__init__.pyとは

[Python の __init__.py とは何なのか]

めちゃめちゃ大事やん。__init__.py

その後無事、空の「__init__.py」を追加したプロジェクトをexe化すれば実行可能になりました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です