MacビルドをPyInstallerへ移行し、Windowsとビルドジョブを統合する#446
Conversation
…and mac build process
|
GitHub Actionsでビルドした結果をダウンロードして実行した結果 |
Hiroshiba
left a comment
There was a problem hiding this comment.
LGTM!!
かなり丁寧に見てみました。良さそう!
もしよかったら @PickledChair さんや @aoirint さんにも見てもらえると頼もしそうです!
| - name: Install CCache | ||
| shell: bash | ||
| run: brew install ccache |
|
私も実行権限や dylib のロードの仕組みなどについて決して詳しいわけではないので、いつも手探りで動く状態に持っていったりしています……それでも考えられることを以下に書きます。
これは画像の
nuitka を使用していた時とは異なり、pyinstaller は今回は基本的に依存関係を適切に解決していそうです。なので nuitka の時に行っていたビルド後のスクリプト実行は不要になった可能性が高いです。 ただし、libonnxruntime.dylib をロードしようとしている時に libonnxruntime.dylib を見つけられていないようですね。画像では これに関して、nuitka ビルドとの差異を確認したところ、libcore.dylib の他の dylib への依存関係の情報が若干違っていることがわかりました。 nuitka ビルド内の libcore.dylib および voicevox_core で配布されている元の libcore.dylib: pyinstaller ビルド内の libcore.dylib: このことから、pyinstaller が 以上の考察から、次の3つのどれかで解決しそうな気がします(手元ではまだ確認していないので、ダメだったらすみません……!):
|
であれば大丈夫そうです...!
スクリプトの削除もこのPRでしてしまったほうが良いのかな...?:thinking:
なるほど...! 実際に試した感じ、 余談ですが、調べた感じ ところで、specファイルの件なんですが、OSごとにファイルが生えそうというのと、CIの設定をspecに書き込んじゃうと手元でビルドするのにファイル名書き換えが必要で嫌かなーと思っていたんですが、今バージョン値を書き換えるのに使ってる感じで、CI内で依存のファイル名を |
無くしてしまっても大丈夫かもしれません……!
なるほど、universal2 対応できるかもしれないですね。ただ、actions/setup-python#271 の Issue を見つけたのですが、オプションの指定だけでは不足のようで、Python インタプリタ自体も universal2 ビルドである必要がありそうです(あまり分かりやすくは書いていないのですが、PyInstaller 公式のドキュメントもそのような感じのことが読み取れました https://pyinstaller.org/en/stable/usage.html?highlight=--target-architecture#cmdoption-target-architecture )。あとはサードパーティライブラリが共有ライブラリを含んでいた場合も、その共有ライブラリが universal バイナリである必要がありそうな気がします。実験してみないとうまく行くかどうかはなんとも言えない感じですね……。 また、コアの universal バイナリを作るとしたら、Rust 自体は universal ビルドに対応していないので、x64 版と aarch64 版の各 artifact から lipo コマンドにより universal バイナリを作る、という感じになりそうな気がします(参考記事: https://qiita.com/asfdrwe/items/40370f181fea93cfc855 )
どのようなやり方が最もやりやすいか、なかなか難しいですね……。個人的に考えていたのは、CI ビルドでも手元のビルドでも、リソースや共有ライブラリの配置を特定のディレクトリに限定してしまって、spec ファイルはそれを前提に作る、というようなことです。ただ「:や;しか使えない問題」等が解決すれば、直接オプション指定が楽というのも感じるので、バランスが難しいところですね……。 |
了解です!みた感じ成果物は正しく動いているみたいなので削除してしまいますね...!
ここら辺はNuitkaの時にUniversalビルド試そうとした時もそうだったので、なんとなく把握しています... (ここにトライアンドエラーの結果が散らかっており...w)
なるほど、確かにそうしてしまうのもありかも。修正範囲はREADMEだけで済みそうですし、LGTMです。 |
|
たしかに |
7059173 to
deeea6a
Compare
deeea6a to
a563396
Compare
|
コメントいただいた件を変更してみました! |
|
すごく良いと思います!! |
|
Linuxのジョブ一本化試したいのでマージしてしまいます! |



内容
題の通り
まだMacでしか試していないので、とりあえずLinuxは無視してWindowsとMacのみビルドジョブ統合しました。
関連 Issue
ref #439
ref #443