基礎

Python pipパッケージ管理入門|インストール・requirements.txtの使い方

Python pip パッケージ管理

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 と pip3 の違い
Python 2系と3系が共存する環境では、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の内容例

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/
    └── ...
requirements-dev.txt
# 本番用パッケージも含める
-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最新版利用可能な最新版

互換リリース指定(~=)の詳細

~=(互換リリース)はセマンティックバージョニングに基づいた便利な指定方法です。

requirements.txt
# ~=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 freezepip 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環境に直接パッケージをインストールすると、プロジェクト間で依存関係が衝突する可能性があります。必ず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.pyrequirements.txtに代わる新しい仕組みが登場しています。

pyproject.toml

pyproject.tomlはPEP 518/PEP 621で標準化されたプロジェクト設定ファイルです。パッケージのメタデータ、依存関係、ビルド設定を1つのファイルにまとめられます。

pyproject.toml
[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 vs requirements.txt
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ライブラリのインストールプロジェクトの依存パッケージ
pipxCLIツールのインストールblack, flake8, poetryなどのコマンドラインツール
pip + venv仮想環境でのパッケージ管理プロジェクトごとに環境を分離
pipxとpipの混同に注意
プロジェクトのライブラリ(Django, requestsなど)を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の採用を検討する