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

異なるバージョンのPoetryによる操作を防ぎたい #750

Closed
aoirint opened this issue Oct 1, 2023 · 2 comments · Fixed by #1081
Closed

異なるバージョンのPoetryによる操作を防ぎたい #750

aoirint opened this issue Oct 1, 2023 · 2 comments · Fixed by #1081
Labels
優先度:低 (運用中止) 初心者歓迎タスク 初心者にも優しい簡単めなタスク 機能向上

Comments

@aoirint
Copy link
Member

aoirint commented Oct 1, 2023

内容

#710 に関連して、一応調べたのでメモとして残しておく、くらいのIssueです。

VOICEVOX ENGINEのライブラリ管理にはPoetryが使われており、
poetry.lockでPoetryのバージョンが固定されていますが、
開発者の環境やPoetryの使い方によって、異なるバージョンのPoetryが使われる場合があります。

この状況では、Poetryの更新でpoetry.lockのフォーマットが変わった場合に、項目の削除やバージョン文字列の更新に伴い、poetry.lockに不要な差分が生じる問題が起きます。

不要な差分が生じないように、poetry.lockに固定されたバージョンと異なるバージョンのPoetryによる操作を防ぎたいです。

Pros 良くなる点

  • 不要な差分が生じなくなる

Cons 悪くなる点

  • おそらく手間が増える

実現方法

  • 案1. ドキュメントにPoetryバージョンを追記する
  • 案2. ドキュメントに最新のPoetryを使うように追記する
  • 案3. ドキュメントでpoetryコマンド実行時にPython仮想環境で実行するように案内する
  • 案4. ドキュメントのpoetryコマンドをpoetry run poetryに置き換える
  • 案5. プルリクエストのテンプレートにPoetryバージョンの確認項目を追加する
  • 案6. poetry.lockについて、生成したPoetryバージョンを検証するCIを追加する
  • 案7. Poetryのバージョンを固定するバージョン管理ツールがあれば導入する

VOICEVOXのバージョン

0.15 開発版

その他

発生する状況

VOICEVOX ENGINEリポジトリにおいて、システムにPoetryをインストールした上でpoetry installを実行すると、
Poetryが作るPython仮想環境に、固定されたバージョンのPoetryがインストールされます。

ここで、Python仮想環境に入って(poetry env useまたは.venv/bin/activateまたはpoetry run poetry)Poetryを操作すると、Python仮想環境内のPoetryが使用されます。
しかし、Python仮想環境に入らずにPoetryを操作すると、システムにインストールしたPoetry(PATHが通ったPoetry)が使用されます。

このとき、システムにインストールしたPoetryのバージョンと、VOICEVOX ENGINEが固定している(Python仮想環境内の)Poetryのバージョンとが異なる場合、固定されたバージョンのPoetryが使用されない問題が起きます。

発生例

例えば、以下のPRは番号順にマージされていますが、poetry.lockの内容はいずれもPoetry 1.6.1に固定されている一方で、
それぞれ異なるバージョンのPoetryでpoetry.lockが更新され、不要な差分が生じています。

  1. Poetry 1.6.0で更新: poetry updateを実行しました。 #727
  2. Poetry 1.3またはそれ以前のPoetryで更新: MSVC 14.37の仕様変更への対応 #744
  3. Poetry 1.6.1で更新: ENH: リサンプリングのパッケージをscipyからsoxrに変更 #749

バージョンを指定してPoetryをインストールするコマンド

Windows(Powershell)の場合

(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python3 - --version 1.6.1
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python3 - --version 1.5.1
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python3 - --version 1.3.2

Linux/macOSの場合

curl -sSL https://install.python-poetry.org | python3 - --version 1.6.1
curl -sSL https://install.python-poetry.org | python3 - --version 1.5.1
curl -sSL https://install.python-poetry.org | python3 - --version 1.3.2

関連Issue

@aoirint aoirint added 機能向上 要議論 実行する前に議論が必要そうなもの 優先度:低 (運用中止) labels Oct 1, 2023
@github-actions github-actions bot added OS 依存:linux Linux に依存した現象 OS 依存:mac macOS に依存した現象 OS 依存:win Windows に依存した現象 labels Oct 1, 2023
@aoirint aoirint removed OS 依存:mac macOS に依存した現象 OS 依存:linux Linux に依存した現象 OS 依存:win Windows に依存した現象 labels Oct 1, 2023
@Hiroshiba
Copy link
Member

Hiroshiba commented Oct 1, 2023

詳細なissueありがとうございます!!
いつか致命的な問題が発生してしまうかもしれないので、可能であれば対策したいですね!

人はどうしてもミスをしてしまうので、機械がミスを検知するのが良さそうに感じました。
実装難度の面も考えると

案6. poetry.lockについて、生成したPoetryバージョンを検証するCIを追加する

が妥当な感じがします。
今poetry周りだとreiquirements.txtが変わらないかどうかをチェックするCIはあったりします。

- name: Run poetry and check
run: |
poetry export --without-hashes -o requirements.txt.check
poetry export --without-hashes --with dev -o requirements-dev.txt.check
poetry export --without-hashes --with test -o requirements-test.txt.check
poetry export --without-hashes --with license -o requirements-license.txt.check
diff -q requirements.txt requirements.txt.check || \
diff -q requirements-dev.txt requirements-dev.txt.check || \
diff -q requirements-test.txt requirements-test.txt.check || \
diff -q requirements-license.txt requirements-license.txt.check > /dev/null
if [ $? = 1 ]; then
echo "poetry export has some diff"
exit 1
fi

この辺りに追加で、poetry installを実行した後にロックファイルが変更してしまっているかどうか検証するとかがありなのかもと思いました!

@Hiroshiba
Copy link
Member

Hiroshiba commented Oct 23, 2023

の実装を真似て↓のようにすると良さそうかもです!

          poetry lock --no-update
          git diff --exit-code

結構タスク的に簡単で、Github Actionsの練習にもなる気がするので、要議論を外して初心者歓迎タスクラベルをつけようかなと思います!

@Hiroshiba Hiroshiba added 初心者歓迎タスク 初心者にも優しい簡単めなタスク and removed 要議論 実行する前に議論が必要そうなもの labels Oct 23, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
優先度:低 (運用中止) 初心者歓迎タスク 初心者にも優しい簡単めなタスク 機能向上
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants