2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

requirements.txtのバージョン固定について

Last updated at Posted at 2024-12-16

システムリリース前のrequirements.txtのバージョン指定について

開発において必ず直面するであろう「requirements.txt」の扱い。特に、システムをリリースする前にパッケージのバージョンをどのように指定するかについて、以下に備忘録として整理します。

開発初期:バージョン指定なしで進める

開発初期段階では、最新バージョンを使用するのが一般的?です。そのため、requirements.txtにはバージョン指定をしない形で記載します。私が今回経験した小規模な開発(開発メンバー二人のRAGシステム)の場合だと、以下のように記述して進めました。(大規模な開発な場合はどうするか知らないので教えて下さい)

fastapi
uvicorn

この段階では、開発環境で以下のコマンドを使って必要なパッケージをインストールします。

pip install -r requirements.txt

その後、一連の動作確認を行います。開発が進むにつれてここにはどんどん追記していきます。バージョンしてはしない。

リリース準備段階:バージョン固定

リリース段階に入ると、バージョンの自動更新によるバグ発生を避けるために、パッケージのバージョン固定が必要になります。

  1. まず、既存のrequirements.txtにバージョン指定が含まれている場合は、一度バージョン指定を取り除きます。他の開発メンバーが以下のように追加したと仮定しましょう。

変更前

langchain-core==0.3.11 ←これと
langchain-openai==0.1.12 ←これが最新版ではないとする

変更後

langchain-core
langchain-openai
  1. その上で、再度以下のコマンドを実行し、動作確認を行います。バージョン指定をしないでpip install -r requirements.txtをすると最新バージョンがインストールされるため。
pip install -r requirements.txt
  1. 動作確認で問題がなければ、以下のコマンドを使用して、バージョンを固定したrequirements.txtを生成します。(pip freezeは現在使用しているバージョンを出力するコマンド。ここではrequirements.txtに書き加える処理を加えている。)
pip freeze > requirements.txt

※確認だけしたい場合は、pip freezeコマンドのみを実行して出力結果を確認するのが良いです。

この手順により、最新版での動作確認とバージョン固定を完了させることができます。
例:上記手順に従うと0.3.11→0.3.22の最新版に切り替わります

langchain-core==0.3.22 ←両方とも
langchain-openai==0.2.12 ←最新に変わる!

先輩談:バージョン固定は必須か?

以下は、先輩エンジニアとのやり取りを基にした知見です。

私の質問

  • お客さんに提供するシステムでは、パッケージのバージョンを指定するのが一般的でしょうか?
  • バージョン指定がない場合、最新バージョンがインストールされて急にバグが発生する可能性があるでしょうか?
  • 開発初期はバージョンを指定せず、運用に向けて途中から固定するケースもあるのでしょうか?

約10年目の先輩の回答

  • 基本的にはバージョンを固定化するのが一般的。
    →クラウド環境では勝手にバージョンが上がることがあるため、依存関係によるエラー発生の可能性がある。固定できるところは固定しよう。
  • 日本企業では、バージョン固定を運用方針に含めている事もある。
    (運用方針で定期的に見直すとか記載しますけど、あんまり弄らない。弄りたくない)

以下、先輩の経験談

携わった案件だとAzureのkubetainesが固定運用でスタートと半年一回のリリース(1年程度でそのバージョンは廃止。画面から消える。その中の変更もできなくなる。アップデートもサポート対象外)なので運用チームが更新に頻度に耐えれないとなったケースもあるので固定が正解ではないと考えてます。

以下、年次の近い別の先輩の経験談

バージョン固定せずにリリースをしてしまい、リリース後に大変なことになりました。。。

結論

・開発初期: 最新バージョンで進め、柔軟性を重視。
・リリース前: pip freezeでバージョンを固定し、安定性を確保。
・運用: 脆弱性チェックを定期的に実施しつつ、必要最低限の変更で対応。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?