Python pipパッケージ管理入門
インストール・requirements.txtの使い方
Pythonのpipを使ったパッケージ管理を解説。インストール、requirements.txt、バージョン指定、pyproject.tomlまで学べます。
こんな人向けの記事です
- pipの使い方を基礎から学びたい
- requirements.txtで依存関係を管理したい
- バージョン指定のルールを理解したい
Step 1pipとは?Pythonのパッケージマネージャ
pip(pip installs packages)は、Pythonの公式パッケージマネージャです。PyPI(Python Package Index)に公開されている数十万のパッケージを、コマンド1つでインストールできます。
Python 3.4以降はpipが標準で同梱されているため、別途インストールする必要はありません。
# pipのバージョン確認
pip --version
# pip 24.0 from /usr/lib/python3.12/site-packages/pip (python 3.12)
# pip自体のアップグレード
pip install --upgrade pip
pipがPython 2を指す場合があります。確実にPython 3のpipを使いたい場合はpip3またはpython3 -m pipを使いましょう。Python 2は2020年にサポート終了しているため、Python 3のみの環境ではpipで問題ありません。
pipでできることを整理しておきましょう。
| 機能 | コマンド例 | 説明 |
|---|---|---|
| インストール | pip install requests | パッケージを取得して配置 |
| アンインストール | pip uninstall requests | パッケージを削除 |
| 一覧表示 | pip list | インストール済みを一覧 |
| 詳細確認 | pip show requests | 特定パッケージの情報表示 |
| 検索 | pip install で補完 | PyPIのWebサイトで検索推奨 |
| 依存出力 | pip freeze | バージョン付き一覧を出力 |
Step 2パッケージのインストール・アンインストール
最も基本的な操作であるインストールとアンインストールの方法を見ていきましょう。
基本的なインストール
# 最新版をインストール
pip install requests
# バージョンを指定してインストール
pip install requests==2.31.0
# 複数パッケージを一度にインストール
pip install requests flask django
アップグレード
# 特定のパッケージをアップグレード
pip install --upgrade requests
# pip自体のアップグレード
pip install --upgrade pip
アンインストール
# パッケージをアンインストール
pip uninstall requests
# 確認なしでアンインストール(-y オプション)
pip uninstall -y requests
pip uninstallは指定したパッケージのみを削除し、そのパッケージが依存していた他のパッケージは残ります。不要な依存パッケージも削除したい場合はpip-autoremoveなどのツールを検討してください。
パッケージの情報確認
# パッケージの詳細情報を表示
pip show requests
# 出力例:
# Name: requests
# Version: 2.31.0
# Summary: Python HTTP for Humans.
# Home-page: https://requests.readthedocs.io
# Author: Kenneth Reitz
# License: Apache 2.0
# Location: /usr/lib/python3.12/site-packages
# Requires: certifi, charset-normalizer, idna, urllib3
# Required-by:
Requiresはそのパッケージが依存しているパッケージ、Required-byはそのパッケージに依存している他のパッケージを表します。
Step 3requirements.txtの作成と活用
requirements.txtはプロジェクトで必要なパッケージとそのバージョンを記録するファイルです。チーム開発やデプロイ時に、同じ環境を再現するために使います。
requirements.txtの作成
# 現在の環境のパッケージ一覧をファイルに出力
pip freeze > requirements.txt
requirements.txtの内容例
certifi==2024.2.2
charset-normalizer==3.3.2
Django==5.0.3
idna==3.6
requests==2.31.0
sqlparse==0.5.0
urllib3==2.2.1
requirements.txtからインストール
# requirements.txtに記載された全パッケージをインストール
pip install -r requirements.txt
pip freezeの出力には依存パッケージも含まれるため、ファイルが肥大化しがちです。実務では、直接使うパッケージだけを手動でrequirements.txtに記載し、バージョンを==で固定するのがベストプラクティスです。
典型的なプロジェクト構成
my_project/
├── requirements.txt # 本番用パッケージ
├── requirements-dev.txt # 開発用パッケージ(テスト・リンター等)
├── manage.py
└── myapp/
└── ...
# 本番用パッケージも含める
-r requirements.txt
# 開発用追加パッケージ
pytest==8.1.1
flake8==7.0.0
black==24.3.0
-r requirements.txtと書くことで、本番用のパッケージを含めた上で開発用パッケージを追加できます。
Step 4バージョン指定の書き方(==, >=, ~=)
requirements.txtやpip installでは、さまざまなバージョン指定が可能です。プロジェクトの安定性と更新のバランスを考えて使い分けましょう。
| 記法 | 例 | 意味 | インストールされるバージョン |
|---|---|---|---|
== | requests==2.31.0 | 完全一致 | 2.31.0 のみ |
>= | requests>=2.28.0 | 以上 | 2.28.0 以上の最新版 |
<= | requests<=2.31.0 | 以下 | 2.31.0 以下の最新版 |
~= | requests~=2.31.0 | 互換リリース | >=2.31.0, <2.32.0 |
!= | requests!=2.30.0 | 除外 | 2.30.0 以外の最新版 |
| 範囲指定 | requests>=2.28,<3.0 | 範囲 | 2.28以上3.0未満の最新版 |
| 指定なし | requests | 最新版 | 利用可能な最新版 |
互換リリース指定(~=)の詳細
~=(互換リリース)はセマンティックバージョニングに基づいた便利な指定方法です。
# ~=2.31.0 は >=2.31.0, <2.32.0 と同じ
# → パッチバージョンの更新のみ許可(バグ修正)
requests~=2.31.0
# ~=2.31 は >=2.31, <3.0 と同じ
# → マイナーバージョンの更新まで許可(機能追加)
requests~=2.31
==でバージョンを完全に固定するのが最も安全です。>=や~=を使うと、インストールタイミングによって異なるバージョンが入る可能性があり、予期しない不具合の原因になります。開発中は~=を使い、デプロイ時にpip freezeで固定するという運用もあります。
Step 5pip freeze と pip list の使い分け
pip freezeとpip listはどちらもインストール済みパッケージを表示しますが、用途が異なります。
pip list
# インストール済みパッケージを表形式で表示
pip list
# 出力例:
# Package Version
# ------------------ --------
# certifi 2024.2.2
# Django 5.0.3
# pip 24.0
# requests 2.31.0
# setuptools 69.2.0
# 更新可能なパッケージを表示
pip list --outdated
# 出力例:
# Package Version Latest Type
# ---------- -------- -------- -----
# requests 2.31.0 2.32.0 wheel
# Django 5.0.3 5.0.4 wheel
pip freeze
# requirements.txt形式で出力
pip freeze
# 出力例:
# certifi==2024.2.2
# charset-normalizer==3.3.2
# Django==5.0.3
# requests==2.31.0
# そのままファイルに書き出せる
pip freeze > requirements.txt
| コマンド | 出力形式 | 主な用途 | pip・setuptools含む? |
|---|---|---|---|
pip list | 表形式 | 確認・概要把握 | 含む |
pip freeze | パッケージ==バージョン | requirements.txt作成 | 含まない |
pip list --outdated | 表形式 | 更新確認 | 含む |
python -m venv .venvで仮想環境を作成してからpip installしましょう。pip freezeも仮想環境内で実行すれば、そのプロジェクトに必要なパッケージだけが出力されます。
# 仮想環境の作成と有効化
python -m venv .venv
source .venv/bin/activate # macOS / Linux
# .venv\Scriptsctivate # Windows
# 仮想環境内でパッケージをインストール
pip install django requests
# 仮想環境を無効化
deactivate
Step 6pyproject.toml と pipx
Python のパッケージ管理は進化しており、従来のsetup.pyやrequirements.txtに代わる新しい仕組みが登場しています。
pyproject.toml
pyproject.tomlはPEP 518/PEP 621で標準化されたプロジェクト設定ファイルです。パッケージのメタデータ、依存関係、ビルド設定を1つのファイルにまとめられます。
[project]
name = "my-project"
version = "1.0.0"
description = "My awesome project"
requires-python = ">= 3.10"
dependencies = [
"django>=5.0,<6.0",
"requests~=2.31.0",
"gunicorn==21.2.0",
]
[project.optional-dependencies]
dev = [
"pytest>=8.0",
"black>=24.0",
"flake8>=7.0",
]
[build-system]
requires = ["setuptools>=69.0", "wheel"]
build-backend = "setuptools.backends._legacy:_Backend"
pyproject.tomlはパッケージとして配布するプロジェクトのメタデータ管理に適しています。一方、requirements.txtはデプロイ環境の再現(バージョン完全固定)に適しています。両方を併用するプロジェクトも多く、pyproject.tomlで依存を定義し、pip freeze > requirements.txtでロックファイルを生成する運用が一般的です。
pipx
pipxはCLIツールを隔離された環境にインストールするためのツールです。グローバルにインストールしたいコマンドラインツールに最適です。
# pipxのインストール
pip install pipx
pipx ensurepath
# CLIツールをpipxでインストール(隔離環境に入る)
pipx install black
pipx install flake8
pipx install poetry
# pipxでインストールしたツールの一覧
pipx list
# アップグレード
pipx upgrade black
# アンインストール
pipx uninstall black
| ツール | 用途 | 使い分け |
|---|---|---|
pip | ライブラリのインストール | プロジェクトの依存パッケージ |
pipx | CLIツールのインストール | black, flake8, poetryなどのコマンドラインツール |
pip + venv | 仮想環境でのパッケージ管理 | プロジェクトごとに環境を分離 |
pipxでインストールしてはいけません。pipxはCLIツール専用です。プロジェクトの依存パッケージは必ずpip install(仮想環境内)を使いましょう。
まとめpipパッケージ管理のチェックリスト
pip install パッケージ名でインストール、pip uninstallで削除pip showでパッケージの詳細情報・依存関係を確認requirements.txtで依存パッケージを管理し、pip install -rで再現- 本番環境ではバージョンを
==で完全固定する pip freezeはrequirements.txt作成用、pip listは確認用- 仮想環境(
venv)を必ず使い、プロジェクトごとに環境を分離する - CLIツールは
pipx、ライブラリはpipで使い分ける - 新規プロジェクトでは
pyproject.tomlの採用を検討する