Python requirements.txtの作成と使い方完全ガイド【初心者向け】

フリーランスボード

20万件以上の案件から、副業に最適なリモート・週3〜の案件を一括検索できるプラットフォーム。プロフィール登録でAIスカウトが自動的にマッチング案件を提案。市場統計や単価相場、エージェントの口コミも無料で閲覧可能なため、本業を続けながら効率的に高単価の副業案件を探せます。フリーランスボード

ITプロパートナーズ

週2〜3日から働ける柔軟な案件が業界トップクラスの豊富さを誇るフリーランスエージェント。エンド直契約のため高単価で、週3日稼働でも十分な報酬を得られます。リモートや時間フレキシブルな案件も多数。スタートアップ・ベンチャー中心で、トレンド技術を使った魅力的な案件が揃っています。専属エージェントが案件紹介から契約交渉までサポート。利用企業2,000社以上の実績。ITプロパートナーズ

Midworks 10,000件以上の案件を保有し、週3日〜・フルリモートなど柔軟な働き方に対応。高単価案件が豊富で、報酬保障制度(60%)や保険料負担(50%)など正社員並みの手厚い福利厚生が特徴。通勤交通費(月3万円)、スキルアップ費用(月1万円)の支給に加え、リロクラブ・freeeが無料利用可能。非公開案件80%以上、支払いサイト20日で安心して稼働できます。Midworks

Pythonプロジェクトを他の人と共有したり、本番環境にデプロイしたりする際に必須となるのがrequirements.txtファイルです。「requirements.txtって何?」「どうやって作るの?」と疑問に思う方も多いでしょう。本記事では、requirements.txtの基本的な作成方法から応用的な活用法まで、実例とともに詳しく解説します。

目次

requirements.txtとは

requirements.txtは、Pythonプロジェクトで使用する外部パッケージとそのバージョン情報を記録するテキストファイルです。このファイルがあることで、誰でも同じ環境を簡単に再現できます。

requirements.txtの役割

  • 環境の再現性: 同じパッケージ構成を他の環境で再現
  • 依存関係の管理: プロジェクトに必要なパッケージを明確化
  • チーム開発の効率化: メンバー間で統一された開発環境
  • デプロイメントの簡素化: 本番環境への一括インストール

いつrequirements.txtを使うのか

  • 新しいプロジェクトを開始するとき
  • チームメンバーとプロジェクトを共有するとき
  • 本番環境にアプリケーションをデプロイするとき
  • CI/CDパイプラインでテスト環境を構築するとき
  • プロジェクトをGitHubなどで公開するとき

requirements.txtの作成方法

1. pip freezeコマンドを使用した自動生成

最も一般的で簡単な方法です。

# 現在の環境にインストールされているパッケージを全て出力
pip freeze > requirements.txt

# 生成されたファイルの確認
cat requirements.txt

生成例:

certifi==2023.7.22
charset-normalizer==3.3.2
idna==3.4
numpy==1.24.3
pandas==2.0.3
python-dateutil==2.8.2
pytz==2023.3
requests==2.31.0
six==1.16.0
tzdata==2023.3
urllib3==2.0.7

2. 手動での作成

プロジェクトに本当に必要なパッケージのみを記載する方法です。

# 空のrequirements.txtファイルを作成
touch requirements.txt

# エディタでファイルを開いて編集
nano requirements.txt

手動作成の例:

# Webフレームワーク
django==4.2.7
djangorestframework==3.14.0

# データベース
psycopg2-binary==2.9.9

# 環境変数管理
python-dotenv==1.0.0

# API関連
requests==2.31.0

3. pipreqsを使った自動生成

プロジェクトのPythonファイルを解析して、実際に使用されているパッケージのみを抽出します。

# pipreqsのインストール
pip install pipreqs

# プロジェクトディレクトリでrequirements.txtを生成
pipreqs /path/to/project

# 既存のrequirements.txtを上書きする場合
pipreqs /path/to/project --force

# エンコーディングを指定する場合
pipreqs /path/to/project --encoding=utf-8

requirements.txtの書き方・記法

基本的な記法

# 最新版をインストール
requests

# 特定のバージョンを指定
requests==2.31.0

# 最小バージョンを指定
requests>=2.30.0

# 最大バージョンを指定
requests<=2.31.0

# バージョン範囲を指定
requests>=2.30.0,<=2.31.0
requests>=2.30.0,<3.0.0

# 特定のバージョンを除外
requests!=2.30.5

# コメントの追加
requests==2.31.0  # HTTP library for Python

よく使用されるバージョン指定演算子

演算子意味説明
==完全一致requests==2.31.0指定したバージョンのみ
>=以上requests>=2.30.0指定バージョン以上
<=以下requests<=2.31.0指定バージョン以下
>より大きいrequests>2.30.0指定バージョンより大きい
<より小さいrequests<3.0.0指定バージョンより小さい
!=不等号requests!=2.30.5指定バージョン以外
~=互換リリースrequests~=2.30.02.30.0以上、2.31.0未満

実用的なrequirements.txtの例

Webアプリケーション用

# ====================
# Django Webアプリケーション
# ====================

# フレームワーク
Django==4.2.7
djangorestframework==3.14.0
django-cors-headers==4.3.1

# データベース
psycopg2-binary==2.9.9
redis==5.0.1

# 認証・セキュリティ
django-allauth==0.57.0
djangorestframework-simplejwt==5.3.0
cryptography==41.0.7

# API・HTTP
requests==2.31.0
httpx==0.25.2

# 画像処理
Pillow==10.1.0

# 設定管理
python-dotenv==1.0.0
django-environ==0.11.2

# ファイル操作
openpyxl==3.1.2
python-dateutil==2.8.2

# ログ・デバッグ
django-debug-toolbar==4.2.0

データ分析用

# ====================
# データ分析・機械学習
# ====================

# 数値計算・データ処理
numpy==1.24.3
pandas==2.0.3
scipy==1.11.4

# 可視化
matplotlib==3.7.2
seaborn==0.13.0
plotly==5.17.0

# 機械学習
scikit-learn==1.3.2
xgboost==2.0.1
lightgbm==4.1.0

# 深層学習
tensorflow==2.15.0
torch==2.1.1
torchvision==0.16.1

# Jupyter環境
jupyter==1.0.0
ipykernel==6.26.0
jupyterlab==4.0.8

# 統計・分析
statsmodels==0.14.0

API開発用

# ====================
# FastAPI + REST API
# ====================

# フレームワーク
fastapi==0.104.1
uvicorn[standard]==0.24.0

# データベースORM
sqlalchemy==2.0.23
alembic==1.12.1

# バリデーション
pydantic==2.5.0
email-validator==2.1.0

# 非同期処理
httpx==0.25.2
aiofiles==23.2.1

# セキュリティ
python-jose[cryptography]==3.3.0
passlib[bcrypt]==1.7.4
python-multipart==0.0.6

# テスト
pytest==7.4.3
pytest-asyncio==0.21.1

requirements.txtからのパッケージインストール

基本的なインストール方法

# requirements.txtからすべてのパッケージをインストール
pip install -r requirements.txt

# アップグレードを含めてインストール
pip install -r requirements.txt --upgrade

# ユーザーディレクトリにインストール
pip install -r requirements.txt --user

# 詳細出力でインストール
pip install -r requirements.txt --verbose

# キャッシュを使わずにインストール
pip install -r requirements.txt --no-cache-dir

仮想環境でのインストール

# 仮想環境を作成
python -m venv project_env

# 仮想環境を有効化(Windows)
project_env\Scripts\activate

# 仮想環境を有効化(macOS/Linux)
source project_env/bin/activate

# requirements.txtからインストール
pip install -r requirements.txt

# インストール確認
pip list

Docker環境でのインストール

# Dockerfile例
FROM python:3.11-slim

WORKDIR /app

# requirements.txtをコピー
COPY requirements.txt .

# パッケージをインストール
RUN pip install --no-cache-dir -r requirements.txt

# アプリケーションファイルをコピー
COPY . .

CMD ["python", "app.py"]

バージョン指定の方法

セマンティックバージョニングの理解

バージョンは通常「MAJOR.MINOR.PATCH」の形式で表現されます。

# 例:requests==2.31.0
# 2 = メジャーバージョン(破壊的変更)
# 31 = マイナーバージョン(機能追加)
# 0 = パッチバージョン(バグ修正)

推奨されるバージョン指定方法

# 1. 本番環境:完全固定(推奨)
Django==4.2.7
requests==2.31.0

# 2. 開発環境:パッチバージョンは自動更新
Django~=4.2.0  # 4.2.0以上、4.3.0未満
requests~=2.31.0  # 2.31.0以上、2.32.0未満

# 3. 実験的プロジェクト:最新版を追跡
Django>=4.2.0,<5.0.0
requests>=2.30.0

バージョン固定の理由

# 悪い例:バージョン未指定
requests
pandas
numpy

# 問題点:
# - 時期によって異なるバージョンがインストールされる
# - 新しいバージョンで破壊的変更が発生する可能性
# - チームメンバー間で環境の差異が生じる

# 良い例:バージョン固定
requests==2.31.0
pandas==2.0.3
numpy==1.24.3

複数の要件ファイルの管理

プロジェクト構成例

project/
├── requirements/
│   ├── base.txt          # 共通パッケージ
│   ├── development.txt   # 開発環境用
│   ├── production.txt    # 本番環境用
│   └── testing.txt       # テスト環境用
├── requirements.txt      # base.txtへのシンボリックリンク
└── README.md

base.txt(共通パッケージ)

# ====================
# 共通パッケージ
# ====================

# フレームワーク
Django==4.2.7
djangorestframework==3.14.0

# データベース
psycopg2-binary==2.9.9

# 設定管理
python-dotenv==1.0.0

# 日時処理
python-dateutil==2.8.2

# HTTP クライアント
requests==2.31.0

development.txt(開発環境用)

# 共通パッケージを読み込み
-r base.txt

# ====================
# 開発環境専用パッケージ
# ====================

# デバッグツール
django-debug-toolbar==4.2.0
django-extensions==3.2.3

# コード品質
black==23.11.0
flake8==6.1.0
isort==5.12.0
mypy==1.7.1

# テストツール
pytest==7.4.3
pytest-django==4.7.0
pytest-cov==4.0.0
factory-boy==3.3.0

# ドキュメント
sphinx==7.2.6

production.txt(本番環境用)

# 共通パッケージを読み込み
-r base.txt

# ====================
# 本番環境専用パッケージ
# ====================

# Webサーバー
gunicorn==21.2.0
whitenoise==6.6.0

# 監視・ログ
sentry-sdk==1.38.0

# パフォーマンス
redis==5.0.1
celery==5.3.4

# セキュリティ
cryptography==41.0.7

testing.txt(テスト環境用)

# 開発環境のパッケージを読み込み
-r development.txt

# ====================
# テスト環境専用パッケージ
# ====================

# CI/CD用ツール
coverage==7.3.2
pytest-xdist==3.4.0
tox==4.11.4

# セキュリティチェック
safety==2.3.4
bandit==1.7.5

環境別インストール方法

# 開発環境
pip install -r requirements/development.txt

# 本番環境
pip install -r requirements/production.txt

# テスト環境
pip install -r requirements/testing.txt

# 特定の環境での確認
pip list --format=freeze > current_env.txt
diff requirements/development.txt current_env.txt

仮想環境との連携

venvを使った環境管理

# プロジェクトディレクトリに移動
cd my_project

# 仮想環境を作成
python -m venv venv

# 仮想環境を有効化
source venv/bin/activate  # macOS/Linux
# または
venv\Scripts\activate  # Windows

# requirements.txtからインストール
pip install -r requirements.txt

# 新しいパッケージを追加した場合
pip install new_package
pip freeze > requirements.txt

# 仮想環境を無効化
deactivate

conda環境での管理

# conda環境を作成
conda create -n myproject python=3.11

# 環境を有効化
conda activate myproject

# requirements.txtからpipでインストール
pip install -r requirements.txt

# condaとpipの情報をエクスポート
conda env export > environment.yml
pip freeze > requirements.txt

# 環境の再現
conda env create -f environment.yml
pip install -r requirements.txt

pipenvを使った管理

# Pipfileとrequirements.txtの併用
pipenv install -r requirements.txt

# Pipfileからrequirements.txtを生成
pipenv requirements > requirements.txt

# 開発用パッケージを含める場合
pipenv requirements --dev > requirements-dev.txt

よくあるエラーと対処法

1. パッケージが見つからないエラー

# エラー例
ERROR: Could not find a version that satisfies the requirement package_name

# 対処法1: パッケージ名の確認
pip search package_name

# 対処法2: PyPIで検索
# https://pypi.org/で正確な名前を確認

# 対処法3: 利用可能なバージョンを確認
pip install package_name==

2. バージョン競合エラー

# エラー例
ERROR: pip's dependency resolver does not currently take into account all packages

# 対処法1: 依存関係をチェック
pip check

# 対処法2: requirements.txtを段階的にインストール
pip install package1==1.0.0
pip install package2==2.0.0

# 対処法3: バージョン範囲を調整
# requirements.txt
package1>=1.0.0,<2.0.0
package2>=2.0.0,<3.0.0

3. SSL証明書エラー

# エラー例
SSL: CERTIFICATE_VERIFY_FAILED

# 対処法1: 信頼できるホストを指定
pip install -r requirements.txt --trusted-host pypi.org --trusted-host pypi.python.org

# 対処法2: requirements.txtに記述
--trusted-host pypi.org
--trusted-host pypi.python.org
requests==2.31.0
pandas==2.0.3

4. 権限エラー

# エラー例
ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied

# 対処法1: ユーザーディレクトリにインストール
pip install -r requirements.txt --user

# 対処法2: 仮想環境を使用
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

5. メモリ不足エラー

# エラー例
MemoryError: Unable to allocate array

# 対処法1: 一つずつインストール
pip install package1==1.0.0
pip install package2==2.0.0

# 対処法2: キャッシュを無効にする
pip install -r requirements.txt --no-cache-dir

# 対処法3: パッケージを分割してインストール
# requirements-1.txt, requirements-2.txt に分割

応用的な使い方

Git URLからのインストール

# GitHubリポジトリから直接インストール
git+https://github.com/user/repo.git#egg=package_name

# 特定のブランチを指定
git+https://github.com/user/repo.git@develop#egg=package_name

# 特定のタグを指定
git+https://github.com/user/repo.git@v1.0.0#egg=package_name

# サブディレクトリのパッケージ
git+https://github.com/user/repo.git#subdirectory=packages/mypackage

# SSH経由でのインストール
git+ssh://git@github.com/user/repo.git#egg=package_name

ローカルパッケージのインストール

# 相対パスでのローカルパッケージ
-e ./local_package

# 絶対パスでのローカルパッケージ
-e /home/user/projects/my_package

# 開発モードでインストール(編集可能)
-e git+https://github.com/user/repo.git#egg=package_name

アーカイブファイルからのインストール

# ZIP アーカイブから
https://github.com/user/repo/archive/main.zip

# tar.gz アーカイブから
https://github.com/user/repo/archive/v1.0.0.tar.gz

# ローカルアーカイブから
file:///path/to/package.tar.gz

条件付きインストール

# Python バージョンに基づく条件
requests==2.31.0; python_version >= "3.8"
typing_extensions==4.8.0; python_version < "3.8"

# オペレーティングシステムに基づく条件
pywin32==306; sys_platform == "win32"
pygame==2.5.2; sys_platform != "win32"

# プラットフォームに基づく条件
torch==2.1.1+cpu; platform_machine == "x86_64"

オプショナル依存関係

# 基本パッケージ
requests==2.31.0

# オプショナル機能(コメントで説明)
# セキュリティ機能を使用する場合は以下を有効化
# requests[security]==2.31.0

# データベース接続を使用する場合
# sqlalchemy==2.0.23
# psycopg2-binary==2.9.9

ベストプラクティス

1. コメントの活用

# ====================
# Webフレームワーク
# ====================
Django==4.2.7                # Webフレームワーク
djangorestframework==3.14.0   # REST API フレームワーク

# ====================
# データベース関連
# ====================
psycopg2-binary==2.9.9        # PostgreSQL アダプター
redis==5.0.1                  # インメモリデータベース

# ====================
# 開発ツール(本番では不要)
# ====================
# django-debug-toolbar==4.2.0   # デバッグツール
# pytest==7.4.3                 # テストフレームワーク

2. セキュリティを考慮したバージョン管理

# セキュリティ修正を受け取るため、パッチバージョンは自動更新
Django~=4.2.0    # 4.2.x の最新を自動取得
requests~=2.31.0  # 2.31.x の最新を自動取得

# 重要:メジャーバージョンは固定
Django>=4.2.0,<5.0.0
requests>=2.31.0,<3.0.0

3. 依存関係の最小化

# 実際に使用されているパッケージのみを含める
pip install pipreqs
pipreqs /path/to/project --force

# 未使用パッケージの検出
pip install pip-check
pip-check

# パッケージの依存関係を確認
pip install pipdeptree
pipdeptree

4. 定期的なメンテナンス

# 古いパッケージの確認
pip list --outdated

# セキュリティ脆弱性のチェック
pip install safety
safety check -r requirements.txt

# requirements.txtの更新
pip freeze > requirements_new.txt
diff requirements.txt requirements_new.txt

5. CI/CDでの活用

# GitHub Actions例
name: Test
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [3.8, 3.9, 3.10, 3.11]
    
    steps:
    - uses: actions/checkout@v2
    
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: ${{ matrix.python-version }}
    
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements/testing.txt
    
    - name: Run tests
      run: |
        pytest

6. requirements.txtのバリデーション

# requirements.txtの構文チェック
pip-compile --dry-run requirements.in

# インストール可能かテスト
pip install -r requirements.txt --dry-run

# ハッシュ値による整合性チェック
pip install --require-hashes -r requirements.txt

まとめ

requirements.txtは、Pythonプロジェクトの依存関係を管理する上で欠かせないファイルです。適切に作成・管理することで、チーム開発の効率化や本番環境への安全なデプロイが可能になります。

重要なポイント:

  • 環境の再現性: 同じパッケージ構成をどこでも再現可能
  • バージョン管理: セマンティックバージョニングを理解した適切な指定
  • 環境の分離: 開発・テスト・本番環境の適切な管理
  • セキュリティ: 定期的な更新と脆弱性チェック
  • メンテナンス: 未使用パッケージの削除と依存関係の最適化

requirements.txtを適切に活用することで、より安全で効率的なPython開発が可能になります。まずは基本的な作成方法から始めて、プロジェクトの規模に応じて高度な機能を取り入れていくことをお勧めします。

「らくらくPython塾」が切り開く「呪文コーディング」とは?

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座

フリーランスボード

20万件以上の案件から、副業に最適なリモート・週3〜の案件を一括検索できるプラットフォーム。プロフィール登録でAIスカウトが自動的にマッチング案件を提案。市場統計や単価相場、エージェントの口コミも無料で閲覧可能なため、本業を続けながら効率的に高単価の副業案件を探せます。フリーランスボード

ITプロパートナーズ

週2〜3日から働ける柔軟な案件が業界トップクラスの豊富さを誇るフリーランスエージェント。エンド直契約のため高単価で、週3日稼働でも十分な報酬を得られます。リモートや時間フレキシブルな案件も多数。スタートアップ・ベンチャー中心で、トレンド技術を使った魅力的な案件が揃っています。専属エージェントが案件紹介から契約交渉までサポート。利用企業2,000社以上の実績。ITプロパートナーズ

Midworks 10,000件以上の案件を保有し、週3日〜・フルリモートなど柔軟な働き方に対応。高単価案件が豊富で、報酬保障制度(60%)や保険料負担(50%)など正社員並みの手厚い福利厚生が特徴。通勤交通費(月3万円)、スキルアップ費用(月1万円)の支給に加え、リロクラブ・freeeが無料利用可能。非公開案件80%以上、支払いサイト20日で安心して稼働できます。Midworks