簡単に言うと:
pip freeze
は「インストールされたすべてのパッケージ(依存含む)」を出力するからです。
✅ 詳しく解説
🎯 requirements.txt
に書いた内容
pandas
streamlit
azure-cosmos
...
これは 直接使いたいライブラリ(トップレベルの依存) です。
💡 一方で pip freeze
が出力するのは…
aiohttp==3.9.3
altair==5.5.0
attrs==23.1.0
blinker==1.6.2
cachetools==5.3.1
...
これは:
- 直接指定したパッケージ +
- 内部的に依存している サブパッケージ(依存関係)すべて
を出力しているんです。
✅ 例:streamlit
の依存
たとえば、あなたが streamlit
を入れただけでも、以下のようなパッケージが自動でインストールされます:
altair
blinker
cachetools
click
protobuf
pyarrow
pympler
...
これは streamlit
自体が setup.py
に「これが必要です」と書いてあるから、pipが勝手に入れてくれるわけです。
pip freeze > requirements.txt
はロックファイルとして扱う(本番向け)
このやり方は本来、本番環境でまったく同じバージョンを再現したいとき用です。
- ❌ 開発用に使うとパッケージが膨れ上がる
- ✅ 再現性はバツグン
✅ まとめ
行動 | 結果 | よくある用途 |
---|---|---|
pip freeze > requirements.txt |
すべてのパッケージとそのバージョンが出力される | デプロイ/本番環境の再現 |
手書きで管理 | トップレベルの依存だけ記載 | 管理は楽だが漏れに注意 |
なので、pip freeze
で余計なものまで出力されてるのは全く正常な挙動なのです