requirements.txt は、インストールしたい Python パッケージの一覧を書くテキストファイルです。
pip install -r requirements.txt で、そこに書かれたものをまとめて入れられます。
書き方でまったく意味が変わる
同じファイル名でも、バージョンの書き方によって性質が変わります。
| 書き方 | 意味 | 使いどころ |
|---|---|---|
requests |
最新版が入る | 何が入るか毎回変わる。基本使わない |
requests>=2.31 |
それ以上なら何でも | ライブラリを配布する側 |
requests==2.31.0 |
この版だけ | アプリケーション側 |
アプリを動かすためのファイルなら == で固定するのが原則です。固定していないと、数か月後に同じコマンドを打っても別のものが入り、原因不明の不具合になります。
pip freeze の出力をそのまま使わない方がよい理由
pip freeze > requirements.txt は手軽ですが、自分が直接使うライブラリと、その依存として入ってきたライブラリが混ざります。数か月後に「このライブラリはもう使っていないのか、誰かの依存なのか」が判別できなくなります。
現実的な運用は、直接使うものだけを手で書いたファイルと、pip freeze の結果を分けて持つことです。ここを最初から仕組みで解決したのが Poetry や uv です。
完全な再現性は保証されない
== で固定しても、取得元の状態やビルド環境の差で結果が変わりうるため、ロックファイルほど厳密ではありません。ハッシュを併記して検証する方法もありますが、手作業では現実的ではありません。
なお 2025年3月に PEP 751 が Final となり、pylock.toml という共通のロックファイル形式が標準化されています。厳密な再現性が要るなら、そちらへ寄せるのが今後の流れです。
(出典:PEP 751)