pyinstallerを利用したときのエラー対応に関する備忘録です。
目次
環境
エラーが起きた際の私の環境は以下。
- M1 Mac(MacBook Air)
- Pythonのversionは3.10.1 (pyenv経由でインストールしている)
事象
pyinstallerを用いて下記のようなコマンドで実行ファイルを生成しようとしたら、
pyinstaller --onefile --noconsole --icon=icon.png main.py
下記のようなエラーが出て失敗した
OSError: Python library not found: libpython3.10m.dylib, libpython3.10.dylib, Python3, .Python, Python
対応方法
pyenvを用いてPython環境の構築は行っていたが、PYTHON_CONFIGURE_OPTS="--enable-shared"
というオプションを付けて、再度上書きでインストールする。
PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.10.1
その後、一度pyinstallerをuninstallして、再度install。
pip uninstall pyinstaller pip install pyinstaller
これでpyinstallerを利用したときに発生していたエラーは解消し、実行ファイルの生成が行えた。
以上備忘録でした。
余談: pyinstallerのライセンスはGPLなので商用利用などには注意
ちなみにこれらの備忘録を書きながらpyinstallerを色々と試していたのですが、ドキュメントを読んでいたときにpyinstallerのライセンスはGPLだということに気づいた。
そのため商用利用などするときには注意が必要。
一応下記のような形で回避する方法もあるようだが、ポスト内にも書かれているように自己責任で、ということみたい。
pyinstallerはぐぐると日本語の情報もたくさん出てくるし、メジャーなやり方のようだが、ここについては気をつけたいところ。
pyinstallerがGPLで使えないなら、cx_Freezeという選択肢?
pyinstallerのだいたいツールとしてはcx_Freezeというツールもあるようだ。
こちらはまだ触っていないが、ライセンスはPython Software Foundation Licenseとなっている。
追記: ちょっと触ってみたが自身の環境だとcx_FreezeはM1 Macだと動かずにInter Macだと動いた。
調べながらのメモはtwitterに投稿しているので、そちらをこちらにもはる。
cx_Freezeをインストールしようとするとエラーになってしまうな...(Python 3.10.1) ドキュメント見る限り、サポートはしていそうだけど。https://t.co/aulpydfDG0
— Yuki Shindo (@shinshin86) January 7, 2022
さらに追記。
その後、色々とあり、M1 Mac環境でもcx_Freezeを使えるようになった。
そちらについては下記のポストにまとめているので参照してみてください。