-
Notifications
You must be signed in to change notification settings - Fork 209
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ビルドに必要な依存パッケージがインストールされていない macOS 環境でエンジンが起動しない #177
Comments
issueありがとうございます! |
そうですね。より正確には、必要な共有ライブラリはちゃんとコピーして引っ張って来れているものの、共有ライブラリに付与されたリンク情報が適切でない、ということなのだと思います。Nuitka が自動で修正しきれていない印象です。 https://github.com/Hiroshiba/voicevox/issues/399#issuecomment-960425475 で説明されている、VOICEVOX.app をとりあえず起動するための手順では、まず初めに hashlib.py のインポートの失敗を解決していました。hashlib.py は libssl に依存しています。ただし、hashlib.py がコンパイルされた生成物と思われる _hashlib.so の libssl.1.1.dylib へのリンク情報は、エンジンに含まれる libssl.1.1.dylib を正しく指していました。そこで、その libssl.1.1.dylib 自体を調べてみました。
このように、 libcrypto.1.1.dylib に対するリンクが 一方で、 libcrypto.1.1.dylib はビルド生成物の中にもちゃんとコピーされて含まれているので、配布物を完全にポータブルにするには、こちらへのリンクとするように修正する必要があります。 他のエラーに関しても、上記とほぼ同様の問題が原因となっていると考えています。 この問題の解決方法については、私も @HyodaKazuaki さんにご意見を伺いたいです。 |
なるほど!配布パッケージに含まれているのにリンクされていないということなんですね!! 一個一個Issue探しつつ、適切な解決策がわからなければリンク書き換え、とかが妥当かもと思いました。 |
@PickledChair がフロントエンドのIssueで報告してくれた情報 https://github.com/Hiroshiba/voicevox/issues/399#issuecomment-959268514 などを参考に色々と調査してみましたが、NuitkaがMacOSでは共有オブジェクトを探しに行く機構が十分でないことが原因のようです。 Nuitka側も対応に苦慮しているようなので、どこまで対応できるかは不明ですが @Hiroshiba のおっしゃる通り適宜rpathを書き換える方法がいいかもしれません。 |
報告ありがとうございます! mac側の問題なのか、Nuitka側が完璧に対応できていないのかがまだ判断できなさそうだと感じました。 とはいえ、どうやらパッケージ内にファイルとしては存在しているけどリンクされていない、という状態っぽいという報告なので(認識合ってますか・・・?)、Nuitka側の課題なのかもとはちょっと思いました。 |
確かに具体的にどこに問題があるのかは調査しきれていないですね。時間がかかるかもですが、もう少し調査してみます。
地道に rpath 修正をやるのが一番確かな解決法かもしれませんね。解決法についても並行して思案してみます。 |
おーー、ありがとうございます・・・!!! |
まずは Nuitka だけでどうにかできないか考えました。 Nuitka の問題の扱い(結論:調べないことにした)以下の2つの視点で考えました。 Nuitka で NumPy や SciPy の問題が起こるのはよくあることらしい純粋な Python コードだけではないライブラリをコンパイルすることが簡単ではないのはなんとなく分かりますが、それでも NumPy, SciPy, Tkinter といったいくつかのライブラリに関しては、Nuitka は特別扱いして、standalone なバイナリに固められるようにしているようです。しかし、それぞれのライブラリのバージョンアップに伴って、うまくいかなくなるケースもあるらしく、その場合は対象ライブラリのダウングレードを勧めています(参考:Nuitka User Manual - Missing DLLs in standalone)。 今回 voicevox engine において問題が発生したプラットフォームは macOS だけですが、上記を考慮すると、NumPy や SciPy をめぐって問題が生じることはよくある、自然なことだと割り切って、Nuitka に頼らずにこちらで問題を修正するのが、一番速く、かつ適切なように思われます。 (正直に言うと、調べ始めると際限がなかったので諦めました😅) すでに動作する自動ビルドがあるのでそれを活かしたい@HyodaKazuaki さんが作成した自動ビルドは、共有ライブラリ周りで少し問題が出た以外は特に問題がないと考えられます。(少なくとも自分の場合) @HyodaKazuaki さん以上に工夫できる余地が見当たらなかったので、これをそのまま使うのが、今の所いちばん筋が良いのではと考えました。 ということで解決策としては、自動ビルド時に追加で dylib の rpath 修正を行うのが良いと思います。後ほど、具体的にどの dylib で rpath の問題が発生しているのか、そこからどんな解決手段が考えられるのかについてコメントしたいと思います。 |
なるほど、良い方針だと思います!! numpyやscipyのバージョンをnuitkaサポートされているものに合わせる、という手もありそうですが、ぱっと調べた感じ対応バージョンがどれかわかりませんでした。 |
もう少し実態を詳しく調査し、それに対してどんな解決手段があるのか考察してみました。 自動ビルドに含まれる一部の dylib が持つ問題自動ビルドは https://github.com/Hiroshiba/voicevox_engine/releases/tag/0.8.0 の 整理すると2種類の問題があります。 1. 不足している dylib があるhttps://github.com/Hiroshiba/voicevox_engine/issues/177#issuecomment-960952083 で
と言ったのですが、よくよく調べると引っ張って来れていない dylib がありました。 開発環境に依存している rpath が指す dylib のうち、ビルド産物の中に含まれていないものを検出するスクリプト (check_lack_of_dylibs.py) を書いて実行してみると、以下のように2つの dylib が検出されました:
(開発環境に依存していない rpath は OS の標準ライブラリかビルド産物の dylib のどちらかを指すようになっており、かつ自動ビルドが実際に実行可能なので、問題ないとして調べていません。) 2. 開発環境のみに存在しているパスが指定された rpath がある開発環境に依存している rpath をもつ dylib を列挙するスクリプトも書きました (check_rpaths.py) 。これを実行すると、以下の通り6つの dylib が開発環境に依存する rpath を持っていることがわかります:
(スクリプトではついでに Nuitka が生成した so についても調べていますが、出力でわかる通り so については問題ありませんでした。) 解決策について上記を踏まえ「解決に必要な作業」と「具体的な手段」について考えました。 1. 解決に必要な作業以下の2点を、以下の順序で行うのが良いと思います。
2. 具体的な手段上記の作業を実現する手段はいくつかあると思います:
個人的には修正用の Python スクリプトをビルド時に走らせて解決するのが手っ取り早い気がしています(この場合は自分もお手伝いできるかもしれません)。 |
ちなみに、 https://github.com/Hiroshiba/voicevox/issues/399#issuecomment-954785504 のインストーラーでインストールした VOICEVOX.app に含まれるバイナリについて同様に check_rpaths.py で調査すると、以下のように出力が結構違うので、この app bundle に含まれるエンジンは voicevox engine リポジトリの自動ビルドを用いていないと考えられます。Apple-Yuki さんの手元の環境でビルドされたものなのではと推測しています:
|
詳細をありがとうございます!! おそらく将来に足りないdylibは増えそうなこと、もうすでにコードをある程度実装されていることから、Pythonでチェック&修正を行うのが良いのかなと感じました! buildディレクトリを作ってそちらに追加いただけると! |
分かりました! 取り組んでみます。 |
不具合の内容
https://github.com/Hiroshiba/voicevox/issues/399#issuecomment-954785504 で提供されたインストーラーで、まっさらな状態の macOS に VOICEVOX エディターをインストールして起動したときに、エンジンが起動しない例が報告されました(以下の「現象・ログ」を参照。とりあえず起動できるようにする手順についても触れられています)。
現象・ログ
https://github.com/Hiroshiba/voicevox/issues/399 における以下のコメントを参照:
再現手順
エンジンのビルドに必要な Python などの依存パッケージがインストールされていない(理想的には Homebrew や Xcode Command Line Tools を導入していない)クリーンな macOS 環境で、 https://github.com/Hiroshiba/voicevox/issues/399#issuecomment-954785504 で提供されたインストーラーでインストールされた VOICEVOX を以下のコマンドで起動する。
$ cd /Applications/VOICEVOX.app/Contents/MacOS $ ./VOICEVOX
期待動作
ユーザーが依存パッケージを追加でインストールしなくても VOICEVOX のエンジンを正常に使える。
VOICEVOXのバージョン
0.7.5
(autobuild check 20211029)
OSの種類/ディストリ/バージョン
macOS Monterey
(M1 Mac で現象が確認されました。おそらく Intel Mac でも同様に起こると考えています。)
その他
調査した結果、autobuild check 20211029 で提供されている macOS 向けのテストビルドにおいて、一部の共有ライブラリのリンク先にハードコードされた絶対パスが使われていることがわかりました。そこに原因の一端があると考えられます。詳細は続きのコメントで書きます。
The text was updated successfully, but these errors were encountered: