📚
librosa を pyinstaller でパッケージするメモ
最近の librosa だと lazy_loader 使っていてめんどいです.
lazy_loader 使うほどのライブラリではないと思うのに...
init.py
pyinstaller でパッケージすると, (内部での)拡張子は pyc になります.
したがって __init__.pyc
を読もうとしてエラーになります.
(エラーにならない場合もあるが, その場合 module 関数がうまく import されてないため, たとえば librosa.filters.mel
など呼び出そうとすると実行時エラーになる)
現状はこのように librosa/__init__.py
を書き換えることになるでしょう
(pyinstaller でなにか頑張ってこねくり回すのもできるかとは思うが調べるのがめんどい)
hiddenimports
librosa
, librosa.filters
など, app で利用する module(の階層)は hiddenimports に追記しておきます.
init.pyi とか
.spec で collect_data_files("librosa")
or 引数 --collect_data=librosa
して, __init__.pyi
などのファイルを含めるようにします
(lazy_loader が利用しているっぽい)
参考例
の .spec あたりを参照ください.
Discussion