pip は、Python パッケージをインストールするための標準ツールです。
pip install <パッケージ名> で、PyPI(Python Package Index)から取得して環境へ入れます。
役割は「入れる」だけ
初心者がいちばん混乱するのがここです。pip はパッケージを入れる係であって、環境を分ける係でも、依存関係を固定する係でもありません。
| やりたいこと | 担当 |
|---|---|
| パッケージを入れる | pip |
| プロジェクトごとに環境を分ける | venv |
| 依存のバージョンを固定して再現する | ロックファイル(Poetry / uv など) |
「pip で入れたのに import できない」の原因はほぼ入れた環境と動かしている環境が違うことです。pip --version の出力パスと、python -c "import sys; print(sys.executable)" の結果が同じディレクトリを指しているかを確認してください。
requirements.txt は再現性を保証しない
pip freeze > requirements.txt は現在入っているパッケージを一覧化しますが、環境を完全に再現できるとは限りません。取得元の状態やビルド環境によって、同じファイルから別の結果になることがあります。
この弱点を埋めるためにツールごとに独自のロックファイルが作られてきましたが、形式がばらばらでした。2025年3月に PEP 751 が Final となり、pylock.toml という共通のロックファイル形式が標準化されています。今後はツールをまたいで同じロックファイルを使える方向へ進みます。
(出典:PEP 751 – A file format to record Python dependencies for installation reproducibility)
押さえておきたい注意点
システムの Python へ直接 pip install すると、OS が管理しているパッケージと衝突します。近年の Linux ディストリビューションはこれを防ぐためにグローバルへのインストールを拒否する設定になっており、エラーを回避するために強制フラグを付けるのは危険です。仮想環境を作るのが正しい対処です。