Skip to content
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

PyPIで公開する? #653

Open
Hiroshiba opened this issue Oct 21, 2023 · 56 comments
Open

PyPIで公開する? #653

Hiroshiba opened this issue Oct 21, 2023 · 56 comments

Comments

@Hiroshiba
Copy link
Member

内容

Python版VOICEVOX CoreをPyPIで公開するかどうかを考えるissueです。
個人的には公開しちゃうのが面白いかなと思ってます。

Github Actions上からビルドしてプッシュできると楽しそう。

Pros 良くなる点

pip install voicevoxなどで使えるように

実現方法

実はちょっと実現方法がちゃんと分かっていません。
今はWheelをビルドする形ですが、これをアップロードすればできる・・・?

その他

もし取り組んでみたい方がいらっしゃったらご連絡ください!!

@Hiroshiba Hiroshiba added 機能向上 要議論 実行する前に議論が必要そうなもの labels Oct 21, 2023
@sevenc-nanashi
Copy link
Member

今はWheelをビルドする形ですが、これをアップロードすればできる・・・?

maturin publishコマンドでできそうです。認証周りを良い感じにすればGitHub Actions上で上げれると思います

@tuna2134
Copy link

manylinuxらへんが少々めんどくさいとは思いますが、、、

@tuna2134
Copy link

まず、manylinuxの問題を片付けるために、maturin-actionを使うのがいいかと思われます。
次にonnxruntimeはsetup.py使って同包する方法が無難だと思います。
openjtalkに関してなのですが、__init__.pyを読み込んだ際に、ダウンロードをユーザーディレクトリに入れる方がいいと思います。ただユーザーディレクトリのパスは、appdirで取得でいいと思います。

gpuは別でvoicevox-gpuという名前で別でアップロードするのがいいかと思います。

@tuna2134
Copy link

自分の方で取り組んでみようかなと思います。

@Hiroshiba
Copy link
Member Author

Hiroshiba commented Oct 22, 2023

@tuna2134 おお、ぜひよろしくお願いします!!
僕がPyPIのこと全然わかってないことがわかったのでちょっといろいろ聞かせてください 🙇

(1) manylinuxの問題

これはつまり、どのバージョンのpipに対応すればよいか問題ということでしょうか・・・?(ここを見ていました)
numpyはmanylinux2014ぽかったので、なんとなくmanylinux2014が良いのかなぁとか思いました。
(今のVOICEVOX COREでビルドできるのかわかりませんが)

(2) onnxruntimeはsetup.py使って同包する方法が無難

これはsetup.pyを使って、pip install voicevoxしたときにonnxruntime.dllをsitepackage/voicevox内に落とすようにする、という理解で合ってそうでしょうか?
これに関して、今wheelを作る形なのでそれとsetup.pyを一緒にできるのかが気になっています。
またそもそもwheel(ただのzipファイル)はdllを埋め込めるのかもとちょっと思ってるのですが、ご存知だったりしますか 👀
soundfileというPyPIパッケージのwheelに入ってたので、たぶんできるのかなと。。)

(3) openjtalkに関してなのですが、init.pyを読み込んだ際に、ダウンロードをユーザーディレクトリに入れる方がいいと思います

良さそうです!!
と、気持ちはめちゃめちゃわかるのですが、コアはRust言語以外のラッパーのみで追加機能を作らない方針だったりします。
ので、辞書がなかったらダウンロードできる機能をRust側に作るとか、そういうところから始める感じになっちゃうかもです。それでも良ければ提案issue作って頂けると・・・!!

(まあそもそもダウンローダー自体はあるので、あとはこれをコアのメイン機能にくっつけるかどうかという話なのですが、そこどうしようかが決まっていない感じです。提案を聞いて、やっぱあったほうが良いかな〜〜〜という気持ちになりました。)

(4) gpuは別でvoicevox-gpuという名前で別でアップロード

gpu版は分けるの良さそうに思います! pytorchもonnxruntimeもそんな感じなので。
名称をどうしようかは相談したいかもです。例えばgpuと言えどdirectmlやcuda、他にもrocmがあり得るので。
あるいは各osの代表格なgpuデバイスをvoicevox-gpuにする・・・?とすると、linuxではcudaが、winではdirectmlが降ってくる感じでだいぶややこしいかもです。
やっぱり相談したいかもです!


結構コアの現状周りでややこしい点がいっぱいあると思うので、考えなどあればなんでも提案&聞いていただければ!!

@tuna2134
Copy link

tuna2134 commented Oct 22, 2023

これはつまり、どのバージョンのpipに対応すればよいか問題ということでしょうか・・・?(ここを見ていました)
numpyはmanylinux2014ぽかったので、なんとなくmanylinux2014が良いかなぁとか思いました。
(今のVOICEVOX COREでビルドできるのかわかりませんが)

そうですね、2014だけでいいと思いますね、、、ただ3.11からはmanylinux2なので、両方対応させてもいいかと思います

@tuna2134
Copy link

これはsetup.pyを使って、pip install voicevoxしたときにonnxruntime.dllをsitepackage/voicevox内に落とすようにする、という理解で合ってそうでしょうか?
これに関して、今wheelを作る形なのでそれとsetup.pyを一緒にできるのかが気になっています。
またそもそもwheel(ただのzipファイル)はdllを埋め込めるのかもとちょっと思ってるのですが、ご存知だったりしますか 👀
soundfileというPyPIパッケージのwheelに入ってたので、たぶんできるのかなと。。)

setup.pyでsetuptools.Extension使えばいいかと思います。

@tuna2134
Copy link

gpu版は分けるの良さそうに思います! pytorchもonnxruntimeもそんな感じなので。
名称をどうしようかは相談したいかもです。例えばgpuと言えどdirectmlやcuda、他にもrocmがあり得るので。
あるいは各osの代表格なgpuデバイスをvoicevox-gpuにする・・・?とすると、linuxではcudaが、winではdirectmlが降ってくる感じでだいぶややこしいかもです。
やっぱり相談したいかもです!

pytorchみたいに、インストールするURLを分けるのもありかもしれません、、、!

@tuna2134
Copy link

tuna2134 commented Oct 22, 2023

良さそうです!!
と、気持ちはめちゃめちゃわかるのですが、コアはRust言語以外のラッパーのみで追加機能を作らない方針だったりします。
ので、辞書がなかったらダウンロードできる機能をRust側に作るとか、そういうところから始める感じになっちゃうかもです。それでも良ければ提案issue作って頂けると・・・!!

(まあそもそもダウンローダー自体はあるので、あとはこれをコアのメイン機能にくっつけるかどうかという話なのですが、そこどうしようかが決まっていない感じです。提案を聞いて、やっぱあったほうが良いかな〜〜〜という気持ちになりました。)

一応もう一つの案としては、元からライブラリに同包しておいて、実行時にライブラリが格納されているパスを取得した後、渡す方法もありかと思います!

@Hiroshiba
Copy link
Member Author

Hiroshiba commented Oct 22, 2023

ちょっと話が混線しそうだったので、話題に番号を振らせていただきました!
整理していくと

(1) manylinuxの問題
そうですね、2014だけでいいと思いますね、、、ただ3.11からはmanylinux2なので、両方対応させてもいいかと思います

なるほどです。特に問題がなければ両対応もありなのかなと思いました。
まあコアのpythonが3.8くらいだったと思うので、manylinux2は現状ビルドできないかもですが。

(2) onnxruntimeはsetup.py使って同包する方法が無難
setup.pyでsetuptools.Extension使えばいいかと思います。

ググりまくって調べてたのですが、maturinはsetup.pyが使えないっぽい気がしてきました。(勘違いかもです)
代わりでファイル追加できそうか調べてたのですが、maturin-optionsのincludeが使えるか、dataが置けるかも・・・・・・・?

(2023/10/22 23:31追記)あ、それともmaturinを使わない感じを想定されていたりしますか? 👀

(4) gpuは別でvoicevox-gpuという名前で別でアップロード
pytorchみたいに、インストールするURLを分けるのもありかもしれません、、、!

なるほどです、ありだと思います!
とりあえず一旦保留で、まずはvoicevoxパッケージ作成という感じが良さそうですかねー

(3) openjtalkに関してなのですが、init.pyを読み込んだ際に、ダウンロードをユーザーディレクトリに入れる方がいいと思います
一応もう一つの案としては、元からライブラリに同包しておいて、実行時にライブラリが格納されているパスを取得した後、渡す方法もありかと思います!

なるほどです、全然ありな気がしました!
これは機能追加というより、ファイルを同梱するかどうかという話なので、Rustに追加するかどうかという話とは分けれるかもですね。
この認識があってるかちょっと他のメンバーと確認したいかもです、いったん保留で!! 🙇

@Hiroshiba
Copy link
Member Author

Hiroshiba commented Oct 22, 2023

いろいろわかりました、ありがとうございます!!!

とりあえずmaturinでonnxruntime.dllなり辞書なりを足せるのかどうか確認してみて、無理なら別の方法とか探すのはどうでしょう?
別の方法があるのか知らないですが・・・・・・。

あるいはだんだんアップデートしていく形にし、もうonnxruntimeも辞書も何も付属しないvoicevoxパッケージをとりあえずpypiにアップロードするGithub Actionsを作る、という手もあるかもです。
なんか進めやすい形で進めていただければ!!

(出来上がったけどコアの方針と違ってマージできない、というのは悲しいので、方針だけは相談できるとお互い損しないのかなと思ってます 🙏 )

@tuna2134
Copy link

ググりまくって調べてたのですが、maturinはsetup.pyが使えないっぽい気がしてきました。(勘違いかもです)
代わりでファイル追加できそうか調べてたのですが、maturin-optionsのincludeが使えるか、dataが置けるかも・・・・・・・?

(2023/10/22 23:31追記)あ、それともmaturinを使わない感じを想定されていたりしますか? 👀

pyproject.tomlのビルドシステムに新しくsetuptoolsを追加しようと思っているんですよね、、、
一応あくまで、できるとは確信はできませんけど、できなかった場合はsetuptools-rustかな?とは思っています

@Hiroshiba
Copy link
Member Author

(2) onnxruntimeはsetup.py使って同包する方法が無難
pyproject.tomlのビルドシステムに新しくsetuptoolsを追加しようと思っているんですよね、、、
一応あくまで、できるとは確信はできませんけど、できなかった場合はsetuptools-rustかな?とは思っています

なるほどです!setuptools追加というのがどうできるのか気になります 👀
仮にsetuptools-rustmaturinどっちで行くべきかとなったら、どっちで行くべきなのか難しいですね・・・。
なんとなくmaturinが後発で人気がありそうなので、どちらでもいけるならこちらに依存しておきたい気持ちがメンテナ的にはあります。
ちょっとこの辺り @qryxip さんの意見もお聞きできると心強いかもです 🙇

@tuna2134
Copy link

[build-system]
requires = ["maturin>=0.13.2,<0.14"]
build-backend = "maturin"

ここをいじれば、、、

@qryxip
Copy link
Member

qryxip commented Oct 23, 2023

まず一つ情報を共有すると、onnxruntime.dllの読み込みをdlopen/LoadLibraryベースにすれば、onnxruntime.dllの扱いを辞書とVVMと同等にできます(import voicevox_coreの時点で存在しなくてもよくなります)。その難易度はおそらく高くはなく、なんなら今すぐ取り組めるくらいだと思います。現行のVOICEVOX/onnxruntime-rsでも十行ちょっとくらい書き換えるだけでいけるかと。dlopen/LoadLibrary化を前提にしたらonnxruntime.dllを無理して「先」に確保する必要は無くなるので、選択肢が少しだけ増えると思います。

その上で私の意見を書いておくと:

(2)

  • Maturinだとファイルの「同梱」は厳しそうに思えます。
    手元のlibonnxruntime_providers_cuda.soを見たら400MBありました。
  • setuptools-rustは先発ということもあり手間も確実に増大するでしょう。避けられるならではありますが避けた方がよいように思えます。実行時のダウンロード機能で賄うことができるか検討してからでも遅くないと思っています。
    (ちなみにMaturinでGHAからPyPIにアップロードするのは普通にできると思います。やっている人がいる)

(4)

  • 全言語にダウンロード機能を生やすというのはあり寄りに思っています。
    ただし自動でというよりはダウンロード関数を用意するというのがいいのかなと(上記のdlopen/LoadLibrary化が前提です)。

@Hiroshiba
Copy link
Member Author

Hiroshiba commented Oct 23, 2023

@qryxip ありがとうございます!!
dllの同梱がファイル容量的な問題に直面する可能性を完全に失念していました。
たしかPyPIは50MBだったか200MBだったかくらいを超えるとアウトだった記憶があります。
CUDA版のonnxruntime.dllの同梱は無理ですね!!!!

とはいえsetup.py内でdllをダウンロードする方法は残っていると思います。
DLLのダウンロードをインストール時に行うか、インストール後の実行時に行うかのメリットデメリットを整理してみました。

インストール時ダウンロード 実行時ダウンロード
ライブラリ 🤔 先発のsetuptools-rust 👍 後発のmaturin
コード変更 🤔 setuptools-rust用に書き換え 🤔 onnxruntime-rsと言語ラッパー書き換えとダウンローダー埋め込み
pypiでの配布 👍 setup.py内でdllをダウンロード 👍 どれもPyPIでOK
他言語で同様のことが可能か 🤔 Rustやgoではできないっぽい? 🤔 スマホやブラウザ環境だとたぶんできない?

まだ先がしっかり見えていないこともあって、なかなかきっぱりと甲乙つけるのが難しそうでした。
今の個人的な意見としては、インストール時ダウンロードの方が分かりやすそう、でも実行時ダウンロードのほうが汎用性は高そう、あとそもそもRust言語以外のラッパーのみで追加機能を作らないという方針もあり・・・・・・どう決めればいいのか決めかねています 😇

同梱ができないということがわかった形ですが、一旦 @tuna2134 さん的にどうでしょう・・・?
とりあえず追加機能は作らずに、今のwheelをPyPIに投げる部分を作ってみるという手もあると思います!

@sevenc-nanashi
Copy link
Member

@tuna2134
Copy link

@qryxip ありがとうございます!! dllの同梱がファイル容量的な問題に直面する可能性を完全に失念していました。 たしかPyPIは50MBだったか200MBだったかくらいを超えるとアウトだった記憶があります。 CUDA版のonnxruntime.dllの同梱は無理ですね!!!!

とはいえsetup.py内でdllをダウンロードする方法は残っていると思います。 DLLのダウンロードをインストール時に行うか、インストール後の実行時に行うかのメリットデメリットを整理してみました。

インストール時ダウンロード 実行時ダウンロード
ライブラリ 🤔 先発のsetuptools-rust 👍 後発のmaturin
コード変更 🤔 setuptools-rust用に書き換え 🤔 onnxruntime-rsと言語ラッパー書き換えとダウンローダー埋め込み
pypiでの配布 👍 setup.py内でdllをダウンロード 👍 どれもPyPIでOK
他言語で同様のことが可能か 🤔 Rustやgoではできないっぽい? 🤔 スマホやブラウザ環境だとたぶんできない?
まだ先がしっかり見えていないこともあって、なかなかきっぱりと甲乙つけるのが難しそうでした。 今の個人的な意見としては、インストール時ダウンロードの方が分かりやすそう、でも実行時ダウンロードのほうが汎用性は高そう、あとそもそもRust言語以外のラッパーのみで追加機能を作らないという方針もあり・・・・・・どう決めればいいのか決めかねています 😇

同梱ができないということがわかった形ですが、一旦 @tuna2134 さん的にどうでしょう・・・? とりあえず追加機能は作らずに、今のwheelをPyPIに投げる部分を作ってみるという手もあると思います!

となると既存のwheelを上げて、後にできるようにするなどがいいかもですね
一応同包するのであれば、インストール時にonnxruntimeをビルドすればいけるのではと思いましたが、別の機会にした方が良さそうですね

@Hiroshiba
Copy link
Member Author

となると既存のwheelを上げて、後にできるようにするなどがいいかもですね 一応同包するのであれば、インストール時にonnxruntimeをビルドすればいけるのではと思いましたが、別の機会にした方が良さそうですね

なるほどです、とりあえず既存のwheelを上げる方針良いと思います!!
続く形でいろいろ模索したいですね。
こちらの事情も加味してくださってありがとうございます!

@tuna2134 さん的には他に決まってたほうが良いこととかありそうでしょうか 👀

@tuna2134
Copy link

となると既存のwheelを上げて、後にできるようにするなどがいいかもですね 一応同包するのであれば、インストール時にonnxruntimeをビルドすればいけるのではと思いましたが、別の機会にした方が良さそうですね

なるほどです、とりあえず既存のwheelを上げる方針良いと思います!! 続く形でいろいろ模索したいですね。 こちらの事情も加味してくださってありがとうございます!

@tuna2134 さん的には他に決まってたほうが良いこととかありそうでしょうか 👀

一応今回の変更でpypiにアップロード用のGitHub actionsでmaturinのテンプレを使った方がいいと思うのですけど、どうなんでしょうか?

@Hiroshiba
Copy link
Member Author

Hiroshiba commented Oct 24, 2023

一応今回の変更でpypiにアップロード用のGitHub actionsでmaturinのテンプレを使った方がいいと思うのですけど、どうなんでしょうか?

こちらですよね、見た感じ良さそうに思いました!! https://github.com/PyO3/maturin-action
(使ってみないとわからないこともあると思うのでなんともですが)

あとはtestpypiというのがあるらしいので、まずそこにアップロードできるようにするのが良いのかなと思いました!
maturin-actionで可能なのかちょっとわかりませんが。。

あと一旦方針がたったので要議論ラベルを外したいと思います。
ぜひよろしくお願いします!!

@Hiroshiba Hiroshiba removed the 要議論 実行する前に議論が必要そうなもの label Oct 24, 2023
@tuna2134
Copy link

一応今回の変更でpypiにアップロード用のGitHub actionsでmaturinのテンプレを使った方がいいと思うのですけど、どうなんでしょうか?

こちらですよね、見た感じ良さそうに思いました!! https://github.com/PyO3/maturin-action (使ってみないとわからないこともあると思うのでなんともですが)

あとはtestpypiというのがあるらしいので、まずそこにアップロードできるようにするのが良いのかなと思いました! maturin-actionで可能なのかちょっとわかりませんが。。

あと一旦方針がたったので要議論ラベルを外したいと思います。 ぜひよろしくお願いします!!

testpypiは問題ないですね

@tuna2134
Copy link

tuna2134 commented Oct 24, 2023

もしも無理なのであれば、多分maturin単体でもアップロードはできないと思うので
テンプレをベースにすればいいかと?

@Hiroshiba
Copy link
Member Author

Hiroshiba commented Oct 24, 2023

このあたりは試行錯誤にもなってくると思うので、おまかせします!!
コードで試していて不明な点など出てきたら、draft pull requestを作ってくださればスムーズにやり取りできると思うので、ぜひ 🙏

@tuna2134
Copy link

このあたりは試行錯誤にもなってくると思うので、おまかせします!! コードで試していて不明な点など出てきたら、draft pull requestを作ってくださればスムーズにやり取りできると思うので、ぜひ 🙏

少々問題がありまして、manylinuxでビルドする際、openssl周りが、、、()

@tuna2134
Copy link

解決方法としては、openssl用のdockerイメージをつくるか、opensslのfeaturesにvendordを追加することかと思いますけど、、、

@tuna2134
Copy link

dockerイメージ作る場合、これをベースですかね?

@qryxip
Copy link
Member

qryxip commented Oct 26, 2023

今外にいるため検証していない(PCがあればcargo treeから確認できるはず)のですが、opensslクレートが混入するとしたら記憶から思いつく範囲では

  1. ダウンローダー (downloader)が使っているreqwest
  2. Python API (voicevox_core_python_api)のdev-delendencyである、crates/test_utilが使っているsurfクレート

あたりかと思います。

CORE本体にダウンロード機能を実装するという話になるならともかく、現時点ではopensslクレートに依存する必要は多分無いため、Maturinのオプションでどうにかして外せる可能性はあるかと思います。

@tuna2134
Copy link

今外にいるため検証していない(PCがあればcargo treeから確認できるはず)のですが、opensslクレートが混入するとしたら記憶から思いつく範囲では

  1. ダウンローダー (downloader)が使っているreqwest
  2. Python API (voicevox_core_python_api)のdev-delendencyである、crates/test_utilが使っているsurfクレート

あたりかと思います。

CORE本体にダウンロード機能を実装するという話になるならともかく、現時点ではopensslクレートに依存する必要は多分無いため、Maturinのオプションでどうにかして外せる可能性はあるかと思います。

reqwestの方が一番あり得そうですね、、、

@tuna2134
Copy link

surfでしたね、、、

@tuna2134
Copy link

自分で見た限りmaturinの説明の方にはないので、、、できるかどうかわかりませんがやってみます。

@Hiroshiba
Copy link
Member Author

Hiroshiba commented Oct 26, 2023

報告感謝です!!
Rustは素人なのもあってわからないだけなのかもですが、結局どういうエラーが発生してるのか気になりました。

少々問題がありまして、manylinuxでビルドする際、openssl周りが、、、()

たぶん何が起きたか何故起きたか(想像でも)どうすれば良さそうか(想像でも)辺りをまとめて書くとわかりやすいと思います!

@qryxip
Copy link
Member

qryxip commented Oct 26, 2023

今家に帰ってわかったのですが、Maturinはそもそもdev-dependenciesを避けてcargo buildしてくれます。

では何故test_utilがコンパイル対象になってしまっているかというと... Python APIではtest_utilはdev-dependencyではなくnormalな方のdependencyになってしまっています。なのでdev-depenciesに移せば解決するはず。

@tuna2134
Copy link

報告感謝です!! Rustは素人なのもあってわからないだけなのかもですが、結局どういうエラーが発生してるのか気になりました。

少々問題がありまして、manylinuxでビルドする際、openssl周りが、、、()

たぶん何が起きたか何故起きたか(想像でも)どうすれば良さそうか(想像でも)辺りをまとめて書くとわかりやすいと思います!

あー、opensslのffiに関するエラーですね。libopensslが存在しないと言っているので、そこの問題ですね。

@tuna2134
Copy link

今家に帰ってわかったのですが、Maturinはそもそもdev-dependenciesを避けてcargo buildしてくれます。

では何故test_utilがコンパイル対象になってしまっているかというと... Python APIではtest_utilはdev-dependencyではなくnormalな方のdependencyになってしまっています。なのでdev-depenciesに移せば解決するはず。

そうですね、devの方に写しておきます。

@qryxip
Copy link
Member

qryxip commented Oct 26, 2023

#659 を作りました (こういうのは分けておくに越したことはないので)

@tuna2134
Copy link

#659 を作りました (こういうのは分けておくに越したことはないので)

ありがとうございます!

@tuna2134

This comment was marked as resolved.

@tuna2134
Copy link

なんでですかねー?

@qryxip
Copy link
Member

qryxip commented Oct 26, 2023

多分ここから漏れてopen_jtalk_sysが空っぽになっているんじゃないかと思いますが、どんな状態になってるんでしょうね...??

https://github.com/VOICEVOX/open_jtalk-rs/blob/a16714ce16dec76fd0e3041a7acfa484921db3b5/crates/open_jtalk-sys/src/generated/bindings.rs#L1-L11

@tuna2134
Copy link

tuna2134 commented Oct 26, 2023

多分ここから漏れてopen_jtalk_sysが空っぽになっているんじゃないかと思いますが、どんな状態になってるんでしょうね...??

https://github.com/VOICEVOX/open_jtalk-rs/blob/a16714ce16dec76fd0e3041a7acfa484921db3b5/crates/open_jtalk-sys/src/generated/bindings.rs#L1-L11

あー、x86だからですかね?(完全に見落としてました)

@tuna2134
Copy link

たぶんこれが通るのであれば、次はsdistに関する問題ですかねー?

@tuna2134
Copy link

/home/runner/work/voicevox_core/voicevox_core/crates/voicevox_core/Cargo.toml to the source distribution
  Caused by: In /home/runner/work/voicevox_core/voicevox_core/crates/voicevox_core/Cargo.toml, dev-dependencies rstest is marked as `workspace = true`, but it is found neither in the workspace manifest nor in the known path dependencies

自分の手元環境だとmaturin sdist実行しても出ないのですが、actionsでやると何故か出るんですよね、、、

@qryxip
Copy link
Member

qryxip commented Oct 26, 2023

手元で再現しました。pyproject.tomlに書かれているmaturin==0.13.7でエラー、maturin==1.3.1で何事もなく成功します。 どうやらmaturin-actionはpyproject.tomlを見るみたいですね。

@qryxip
Copy link
Member

qryxip commented Oct 26, 2023

これですね。つい3日前...
PyO3/maturin#1811

@tuna2134
Copy link

tuna2134 commented Oct 26, 2023

手元で再現しました。pyproject.tomlに書かれているmaturin==0.13.7でエラー、maturin==1.3.1で何事もなく成功します。 どうやらmaturin-actionはpyproject.tomlを見るみたいですね。

maturin-actionって0.13.7で実行されているのですかね?
多分ビルドの部分だけかな?と思いますが、、、

@tuna2134
Copy link

  CMake Error at /usr/local/Cellar/cmake/3.27.6/share/cmake/Modules/CMakeTestCXXCompiler.cmake:60 (message):
    The C++ compiler

      "/usr/bin/c++"

    is not able to compile a simple test program.

    It fails with the following output:

      Change Dir: '/Users/runner/work/voicevox_core/voicevox_core/target/x86_64-apple-darwin/release/build/open_jtalk-sys-94fc7d978b443c80/out/build/CMakeFiles/CMakeScratch/TryCompile-9YycjX'
      
      Run Build Command(s): /usr/local/Cellar/cmake/3.27.6/bin/cmake -E env VERBOSE=1 /usr/bin/make -f Makefile cmTC_2f26c/fast
      /Applications/Xcode_14.2.app/Contents/Developer/usr/bin/make  -f CMakeFiles/cmTC_2f26c.dir/build.make CMakeFiles/cmTC_2f26c.dir/build
      Building CXX object CMakeFiles/cmTC_2f26c.dir/testCXXCompiler.cxx.o
      /usr/bin/c++   -ffunction-sections -fdata-sections -fPIC -m64 -arch x86_64  -isysroot /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.1.sdk -mmacosx-version-min=10.7 -MD -MT CMakeFiles/cmTC_2f26c.dir/testCXXCompiler.cxx.o -MF CMakeFiles/cmTC_2f26c.dir/testCXXCompiler.cxx.o.d -o CMakeFiles/cmTC_2f26c.dir/testCXXCompiler.cxx.o -c /Users/runner/work/voicevox_core/voicevox_core/target/x86_64-apple-darwin/release/build/open_jtalk-sys-94fc7d978b443c80/out/build/CMakeFiles/CMakeScratch/TryCompile-9YycjX/testCXXCompiler.cxx
      clang: warning: include path for libstdc++ headers not found; pass '-stdlib=libc++' on the command line to use the libc++ standard library instead [-Wstdlibcxx-not-found]
      Linking CXX executable cmTC_2f26c
      /usr/local/Cellar/cmake/3.27.6/bin/cmake -E cmake_link_script CMakeFiles/cmTC_2f26c.dir/link.txt --verbose=1
      /usr/bin/c++  -ffunction-sections -fdata-sections -fPIC -m64 -arch x86_64  -isysroot /Applications/Xcode_14.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.1.sdk -mmacosx-version-min=10.7 -Wl,-search_paths_first -Wl,-headerpad_max_install_names CMakeFiles/cmTC_2f26c.dir/testCXXCompiler.cxx.o -o cmTC_2f26c 
      clang: warning: libstdc++ is deprecated; move to libc++ with a minimum deployment target of OS X 10.9 [-Wdeprecated]
      ld: library not found for -lstdc++
      clang: error: linker command failed with exit code 1 (use -v to see invocation)
      make[1]: *** [cmTC_2f26c] Error 1
      make: *** [cmTC_2f26c/fast] Error 2

maturinのバージョン跳ね上げたら、macOSの部分でopenjtalkに関するコンパイルエラー出ましたね、、、
前のバージョンだと成功しますが、、、

@qryxip
Copy link
Member

qryxip commented Oct 27, 2023

maturin-actionの前にcargo build -p voicevox_core_python_apiしたらなんとかなったりしませんかね...?

手元でやってみた結果。open_jtalk-sysはmaturin buildの対象になっていない
cargo cleancargo build -p voicevox_core_python_api
   Compiling libc v0.2.142
   Compiling autocfg v1.1.0
   Compiling proc-macro2 v1.0.69
   Compiling unicode-ident v1.0.4
   Compiling cfg-if v1.0.0
   Compiling pkg-config v0.3.25
   Compiling version_check v0.9.4
   Compiling once_cell v1.18.0
   Compiling syn v1.0.102
   Compiling memchr v2.6.4
   Compiling typenum v1.15.0
   Compiling log v0.4.17
   Compiling target-lexicon v0.12.4
   Compiling crc32fast v1.3.2
   Compiling subtle v2.4.1
   Compiling pin-project-lite v0.2.9
   Compiling adler v1.0.2
   Compiling spin v0.5.2
   Compiling untrusted v0.7.1
   Compiling miniz_oxide v0.6.2
   Compiling futures-core v0.3.28
   Compiling glob v0.3.0
   Compiling tinyvec_macros v0.1.0
   Compiling cpufeatures v0.2.5
   Compiling generic-array v0.14.6
   Compiling tinyvec v1.6.0
   Compiling matches v0.1.9
   Compiling indexmap v1.9.1
   Compiling num-traits v0.2.15
   Compiling zstd-safe v5.0.2+zstd.1.5.2
   Compiling hashbrown v0.12.3
   Compiling bitflags v1.3.2
   Compiling regex-syntax v0.8.1
   Compiling aho-corasick v1.1.2
   Compiling clang-sys v1.4.0
   Compiling os_str_bytes v6.3.0
   Compiling rand_core v0.6.4
   Compiling flate2 v1.0.25
   Compiling termcolor v1.1.3
   Compiling quote v1.0.33
   Compiling rustls v0.20.6
   Compiling pyo3-build-config v0.18.3
   Compiling base64ct v1.0.1
   Compiling jobserver v0.1.25
   Compiling syn v2.0.38
   Compiling unicode-normalization v0.1.22
   Compiling atty v0.2.14
   Compiling minimal-lexical v0.2.1
   Compiling itoa v1.0.4
   Compiling unicode-bidi v0.3.8
   Compiling percent-encoding v2.1.0
   Compiling password-hash v0.4.2
   Compiling cc v1.0.73
   Compiling nom v7.1.1
   Compiling form_urlencoded v1.0.1
   Compiling clap_lex v0.2.4
   Compiling slab v0.4.7
   Compiling tokio v1.28.0
   Compiling idna v0.2.3
   Compiling libloading v0.7.3
   Compiling strsim v0.10.0
   Compiling opaque-debug v0.3.0
   Compiling futures-channel v0.3.28
   Compiling humantime v2.1.0
   Compiling bindgen v0.60.1
   Compiling either v1.8.0
   Compiling lazy_static v1.4.0
   Compiling block-buffer v0.10.3
   Compiling crypto-common v0.1.6
   Compiling cipher v0.3.0
   Compiling textwrap v0.15.1
   Compiling futures-task v0.3.28
   Compiling digest v0.10.5
   Compiling time-macros v0.2.4
   Compiling num_threads v0.1.6
   Compiling aes v0.7.5
   Compiling url v2.3.0
   Compiling which v4.3.0
   Compiling clap v3.2.22
   Compiling sha2 v0.10.6
   Compiling hmac v0.12.1
   Compiling sha1 v0.10.5
   Compiling ring v0.16.20
   Compiling bzip2-sys v0.1.11+1.0.8
   Compiling zstd-sys v2.0.5+zstd.1.5.2
   Compiling regex-automata v0.4.1
   Compiling pbkdf2 v0.11.0
   Compiling bzip2 v0.4.4
   Compiling lzma-sys v0.1.20
   Compiling link-cplusplus v1.0.7
   Compiling pyo3-ffi v0.18.3
   Compiling getrandom v0.2.7
   Compiling num_cpus v1.15.0
   Compiling xattr v0.2.3
   Compiling filetime v0.2.17
   Compiling lock_api v0.4.9
   Compiling cexpr v0.6.0
   Compiling serde v1.0.164
   Compiling chunked_transfer v1.4.0
   Compiling bytes v1.1.0
   Compiling rustc-hash v1.1.0
   Compiling parking_lot_core v0.9.3
   Compiling lazycell v1.3.0
   Compiling byteorder v1.4.3
   Compiling futures-sink v0.3.28
   Compiling thiserror v1.0.37
   Compiling constant_time_eq v0.1.5
   Compiling peeking_take_while v0.1.2
   Compiling shlex v1.1.0
   Compiling base64 v0.13.0
   Compiling futures-util v0.3.28
   Compiling time v0.3.15
   Compiling tar v0.4.38
   Compiling cmake v0.1.48
   Compiling memoffset v0.8.0
   Compiling num-integer v0.1.45
   Compiling proc-macro-error-attr v1.0.4
   Compiling scopeguard v1.1.0
   Compiling futures-io v0.3.28
   Compiling io-lifetimes v1.0.11
   Compiling pin-utils v0.1.0
   Compiling smallvec v1.10.0
   Compiling pyo3 v0.18.3
   Compiling proc-macro-error v1.0.4
   Compiling ppv-lite86 v0.2.16
   Compiling rustix v0.37.19
   Compiling rawpointer v0.2.1
   Compiling parking_lot v0.12.1
   Compiling matrixmultiply v0.3.2
   Compiling xz2 v0.1.7
   Compiling rand_chacha v0.3.1
   Compiling num-complex v0.4.2
   Compiling tempfile v3.6.0
   Compiling tracing-core v0.1.30
   Compiling indoc v1.0.7
   Compiling unindent v0.1.10
   Compiling pyo3-macros-backend v0.18.3
   Compiling iana-time-zone v0.1.53
   Compiling anyhow v1.0.65
   Compiling onnxruntime v0.1.0 (https://github.com/VOICEVOX/onnxruntime-rs.git?rev=ebb9dcb9b26ee681889b52b6db3b4f642b04a250#ebb9dcb9)
   Compiling linux-raw-sys v0.3.8
   Compiling serde_json v1.0.85
   Compiling regex v1.10.0
   Compiling ndarray v0.15.6
   Compiling chrono v0.4.26
   Compiling rand v0.8.5
   Compiling heck v0.4.0
   Compiling env_logger v0.9.1
   Compiling ryu v1.0.11
   Compiling hashbrown v0.14.0
   Compiling fastrand v1.8.0
   Compiling tokio-macros v2.1.0
   Compiling webpki v0.22.0
   Compiling sct v0.7.0
   Compiling serde_derive v1.0.164
   Compiling futures-macro v0.3.28
   Compiling webpki-roots v0.22.5
   Compiling equivalent v1.0.1
   Compiling convert_case v0.4.0
   Compiling itertools v0.10.5
   Compiling nanoid v0.4.0
   Compiling arc-swap v1.5.1
   Compiling easy-ext v1.0.1
   Compiling thiserror-impl v1.0.37
   Compiling pin-project-internal v1.0.12
   Compiling tracing-attributes v0.1.23
   Compiling derive_more v0.99.17
   Compiling duplicate v1.0.0
   Compiling pyo3-macros v0.18.3
   Compiling ureq v2.5.0
   Compiling derive-getters v0.2.0
   Compiling derive-new v0.5.9
   Compiling pin-project v1.0.12
   Compiling tracing v0.1.37
   Compiling futures-executor v0.3.28
   Compiling fs-err v2.9.0
   Compiling futures v0.3.28
   Compiling open_jtalk-sys v0.16.111 (https://github.com/VOICEVOX/open_jtalk-rs.git?rev=a16714ce16dec76fd0e3041a7acfa484921db3b5#a16714ce)
   Compiling pyo3-log v0.8.1
   Compiling pyo3-asyncio v0.18.0
   Compiling indexmap v2.0.0
   Compiling uuid v1.4.0
   Compiling zstd v0.11.2+zstd.1.5.2
   Compiling zip v0.6.3
   Compiling async-compression v0.3.15
   Compiling onnxruntime-sys v0.0.25 (https://github.com/VOICEVOX/onnxruntime-rs.git?rev=ebb9dcb9b26ee681889b52b6db3b4f642b04a250#ebb9dcb9)
   Compiling async_zip v0.0.11
   Compiling open_jtalk v0.1.25 (https://github.com/VOICEVOX/open_jtalk-rs.git?rev=a16714ce16dec76fd0e3041a7acfa484921db3b5#a16714ce)
   Compiling voicevox_core v0.0.0 (/tmp/voicevox_core/crates/voicevox_core)
   Compiling voicevox_core_python_api v0.0.0 (/tmp/voicevox_core/crates/voicevox_core_python_api)
    Finished dev [unoptimized + debuginfo] target(s) in 5m 19smaturin build --locked --manifest-path crates/voicevox_core_python_api/Cargo.toml
🍹 Building a mixed python/rust project
🔗 Found pyo3 bindings with abi3 support for Python ≥ 3.8
🐍 Not using a specific python interpreter
📡 Using build options bindings from pyproject.toml
   Compiling onnxruntime-sys v0.0.25 (https://github.com/VOICEVOX/onnxruntime-rs.git?rev=ebb9dcb9b26ee681889b52b6db3b4f642b04a250#ebb9dcb9)
   Compiling onnxruntime v0.1.0 (https://github.com/VOICEVOX/onnxruntime-rs.git?rev=ebb9dcb9b26ee681889b52b6db3b4f642b04a250#ebb9dcb9)
   Compiling voicevox_core v0.0.0 (/tmp/voicevox_core/crates/voicevox_core)
   Compiling voicevox_core_python_api v0.0.0 (/tmp/voicevox_core/crates/voicevox_core_python_api)
    Finished dev [unoptimized + debuginfo] target(s) in 2.61s
📦 Built wheel for abi3 Python ≥ 3.8 to /tmp/voicevox_core/target/wheels/voicevox_core-0.0.0-cp38-abi3-linux_x86_64.whl

@qryxip
Copy link
Member

qryxip commented Oct 27, 2023

↑ あ。正しいのは

poetry run -C crates/voicevox_core_python_api -- cargo build --release -p voicevox_core_python_api

ですね。pyo3クレートにPythonが必要。

@qryxip
Copy link
Member

qryxip commented Oct 27, 2023

⚠️  Warning: Couldn't find the symbol `PyInit_voicevox_core` in the native library. Python will fail to import this module. If you're using pyo3, check that `#[pymodule]` uses `voicevox_core` as module name
⚠️ Warning: Failed to set rpath for /home/ryo/src/github.com/VOICEVOX/voicevox_core/target/debug/libvoicevox_core_python_api.so: Failed to execute 'patchelf', did you install it? Hint: Try `pip install maturin[patchelf]` (or just `pip install patchelf`)
📦 Built wheel for abi3 Python ≥ 3.8 to /tmp/.tmprr9iKw/voicevox_core-0.0.0-cp38-abi3-linux_x86_64.whl
🛠 Installed voicevox_core-0.0.0

これpyo3(およびpyo3-asyncio)も上げないといけないやつですね...

@qryxip
Copy link
Member

qryxip commented Oct 27, 2023

あ、違う。Maturin自体のPyO3/maturin#1493でこれが抜け落ちたからだ。多分。

[package.metadata.maturin]
name = "voicevox_core._rust"
python-source = "python"

@tuna2134
Copy link

tuna2134 commented Nov 23, 2023

このエラーわかる人いますか?
https://github.com/tuna2134/voicevox_core/actions/runs/6971203916/job/18970725945

@Taikono-Himazin
Copy link

これについて何か進展はありますか?
whlファイルまでできていればpypiで公開するのは難しくないのではないかと思っていたのですが、かなり難しいのでしょうか。
pypiで公開してもらえれば、かなり利便性が上がって、普及するように思います。

@sevenc-nanashi
Copy link
Member

To: @Taikono-Himazin

今はここで止まっているという理解です: #693 (comment)

onnxruntimeを別でロードすることが必要になりますが、一応非公式の実験としてこんなものを作りました: https://github.com/sevenc-nanashi/vv_core_registry/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants