注目の投稿
- リンクを取得
- ×
- メール
- 他のアプリ
私は自分用に使うデータ処理などはCかC++などを使用して行うことが多いのですが、最近やってきた上長がそれを配布する(開発環境のない人でも使えるように)ことをご所望。
まあ、それはいいのですが(よくねえよめんどくせえな)、本人の知人にpythonを主に使う人がいるらしく、手元のソフトに合わせてpythonで書いたものがいいなとのこと。
言語とかどれでも同じやろと若干切れながらC++で書いたものをpythonに移し替え、配布用のexeを作成したところで躓きました。
.pyファイルをpyinstallerでexe化し、実行したところで遭遇したエラーの対処法を備忘録として残します。
Python 3.9.6
matplotlib 3.3.2
PIL 8.0.1
pyinstaller 3.6
MatplotlibDeprecationWarning: Matplotlib installs where the data is not in the mpl-data subdirectory of the package are deprecated since 3.2 and support for them will be removed two minor releases later.
(中略)
RuntimeError: Could not find the matplotlib data files
このエラーについて検索をかけると、いくつか解決策を提示しているページが見つかりました。
これらの内容をまあざっくりまとめると
・matplotlibのパスが通ってないからパスを通せ
・matplotlibのバージョンを3.2.2以前に戻せ
という内容です。
それらの具体的な方法については各ページを参照していただくとして、私がこの記事をわざわざ書いているのはなぜかと言えば、これらで問題を解決できなかったからですね。
前者に関しては基本的なことなので省略します。
後者についてはおそらく問題を解決してくれるのですが、開発に用いている他のパッケージの兼ね合いで私の場合はmatplotlibをダウングレードすることができませんでした。
さらに時間をかけて調べた結果解決に至る記事が以下のページに見つかりました。
「ネットに解決策落ちてるなら記事書く必要ないじゃん」という気もしますが、記事が埋もれていて発見に時間がかかり、日本語の解説も存在しなかったため、今回の記事執筆に至っています。
結局のところ何が問題だったかというと、pyinstallerがmatplotlibを呼び出すときの構文に誤りがあったようです。
(正確にはmatplotlibの仕様変更でこれまでの構文では動かなくなっていた。)
なので、これを正しく書き換えてやれば問題なく動くようになります。
具体的には、 .../PyInstaller/hooks/hook-matplotlib.pyを編集することになります。
PyInstallerフォルダの所在は環境に依存するので、パッケージのインストールフォルダ内を検索すると良いかと思います。
hook-matplotlib.pyを開いて、
datas = [(mpl_data_dir, "matplotlib/mpl-data"),]
となっている場所を
datas = [(mpl_data_dir, "mpl-data"),]
のように編集してください。
この状態で再度pyinstallerでexeを作成すれば問題なくexeを実行することができるようになりました。
(それ以外の問題がなければ)
ただ、作成したexeの容量が予想をはるかに上回って大きかったので、そちらへの対処にまた時間がかかってしまいました。
それについては日本語の解説ページがたくさんあるようなので、そちらを参照いただくことにして、今回の記事は終わりたいと思います。
コメント
コメントを投稿