こんにちは、すのくろです。
今回はPyInstallerを使って、Pythonのプログラムをアプリ化した処理についてエラーでつまづいたのでその解決方法を備忘録として残しておきます。
Pyinstallerの使い方に関する記事はこちらです。
[エラー内容]
pandasをインポートするプログラムがPyinstallerを使ってexe化した際に、
Intel MKL FATAL ERROR: Cannot load libmkl_intel_thread.1.dylib.
のエラーによって、起動しても処理が止まる
[解決策]
anaconda3の方のフォルダに入っていたlibmkl_intel_thread.1.dylibをPyInstallerで使うフォルダにコピーして以下を実行
pyinstaller --onefile --add-binary libmkl_intel_thread.1.dylib:. my_app/tkinter_app.py
以下、詳細です。
エラー内容
仮想環境でPyInstallerを実行して、Exeファイルを作成して、ファイルを起動させても下記のエラーで止まってうまく動きませんでした。
Intel MKL FATAL ERROR: Cannot load libmkl_intel_thread.1.dylib.
これは少し調べてみると、今回作成したpythonファイルでpandasを使用していることが原因みたいです。
PyInstallerがNumPyやPandasなどのサードパーティライブラリを正しく検出できない理由はいくつかあり、その一つは、これらのライブラリが他の依存モジュールやDLLファイルに依存しているため、PyInstallerがそれらを自動的に検出できないことです。
今回は仮想環境を用意してpnadasを再インストールして実行していました。
この時、コード内でPandasをImportした時にPandasがNumpyを読みに行きます。
そのNumpyが今回用意した仮想環境内ではなく、どうやら自分が普段使っているAnaconda環境のdylibを読みに行っています。
そこで今回の仮想環境からではそのdylibが見つからずエラーとなっているようでした。
イメージにすると↓のような感じだと思います。
解決策
任意の場所に読み込めなかったファイルをコピー
今回読み込めなかった、「libmkl_intel_thread.1.dylib.」を探して、pyinstaller実行時のフォルダにコピーします。
参考までに自分の場合は、下記にありました。(Usernameは自分の無名)
/Users/Username/opt/anaconda3/lib/libmkl_intel_thread.1.dylib
PyInstallerの実行時に「–add-binary」をつけて実行
次にをPyInstallerで使うフォルダにコピーして以下を実行します。
pyinstaller --onefile --add-binary libmkl_intel_thread.1.dylib:. my_app/tkinter_app.py
今回の自分の例でいくと、「MyProject」フォルダにコピーしました。
pythonファイルは「MyProject」内の「My_app」に入れてあります。
「–add-binary」オプションを使って前回エラー時に見つからないと言っていた「libmkl_intel_thread.1.dylib」を追加してあげています。
これにより、作成されたExeファイルで無事にPandas (Numpy)を使うことができて、プログラムを実行することができました!
まとめ
PyInstallerを使用してPythonスクリプトをexeファイルに変換する際にNumPyやPandas関連のエラーが発生することはよくありますが、今回は「–add 」オプションを使用することで解決できました。
また、こういうときはたくさんググって類似の事例を見つけ出すこともプログラミング技術の一つかなと思います。
エラー解決のヒントやトラブルシューティングの方法も活用していただければ幸いです。
参考文献:
- PyInstaller公式ドキュメント: https://pyinstaller.readthedocs.io
- PyInstallerのGitHubリポジトリ: https://github.com/pyinstaller/pyinstaller
また、今回のようにエラーが出てきた時に一人だとお手上げ状態になることもあり、時間が勿体無いということがプログラミングではよくあります。
そういう時は先行投資として先にお金を払って集中してスキルアップをプロの方から受ける方が人生トータルで見て有意義だと思っています。
短期間でPythonのスキルを高めて、効率的に業務を行いたい、高度なPythonを中心としたプログラミングをより体系的に学びたいと言う方向けに、おすすめのオンラインスクールを2つ厳選して紹介していますので、こちらもよければご覧ください!
自分も一度体系的にPythonを学んだことで、一気に日々の業務や人生が変わったと感じています!
以上、ここまでお読みいただき、ありがとうございました!
コメント