Pipenv

Pythonパッケージ管理仮想環境依存関係管理セキュリティスキャンPipfile

GitHub概要

pypa/pipenv

Python Development Workflow for Humans.

ホームページ:https://pipenv.pypa.io
スター25,080
ウォッチ360
フォーク1,876
作成日:2017年1月20日
言語:Python
ライセンス:MIT License

トピックス

packagingpippipfilepythonvirtualenv

スター履歴

pypa/pipenv Star History
データ取得日時: 2025/7/20 02:54

言語バージョン管理ツール

Pipenv

概要

Pipenvは、Pythonプロジェクトの依存関係管理と仮想環境を統合したツールです。NPM/Yarnライクなワークフローを提供し、PipfileとPipfile.lockによる決定論的な依存関係管理、組み込みセキュリティスキャン、自動仮想環境管理を特徴とします。pip、virtualenv、pipfile、requirements.txtの機能を統一したモダンなPython開発体験を実現します。

詳細

主な特徴

  • 統合ワークフロー: 依存関係管理と仮想環境の一元化
  • Pipfile/Pipfile.lock: 直感的な設定ファイルと決定論的なロック
  • セキュリティスキャン: PyUp.io統合によるビルトイン脆弱性チェック
  • 自動仮想環境: プロジェクトディレクトリでの自動環境作成
  • カスタムカテゴリ: 開発、テスト、ドキュメント用の依存関係分離
  • VCS統合: GitHubなどからの直接パッケージインストール
  • 暗号化ハッシュ: サプライチェーン攻撃防止

アーキテクチャ

PipenvはPipfileを設定の中心とし、インストール時にPipfile.lockを生成します。各プロジェクトで仮想環境を自動作成し、依存関係を分離します。safety パッケージとの統合により、脆弱性データベースをチェックします。

他ツールとの比較

  • vs pip/virtualenv: より高レベルな抽象化と統合体験
  • vs Poetry: よりシンプルで軽量、npmライクなワークフロー
  • vs conda: Python特化でより軽量、一般的な開発に最適

メリット・デメリット

メリット

  • NPMライクな体験: JavaScriptエコシステムに慣れた開発者に親しみやすい
  • セキュリティファースト: ビルトインの脆弱性スキャン機能
  • 決定論的ビルド: Pipfile.lockによる再現可能な環境
  • シンプルなワークフロー: 直感的なコマンド体系
  • ハッシュ検証: パッケージの整合性保証
  • 自動環境管理: 仮想環境の透明な作成・管理
  • プロダクション対応: --deployフラグによる本番環境デプロイ

デメリット

  • パフォーマンス: 大規模プロジェクトでの依存関係解決が遅い場合がある
  • 複雑な依存関係: 複雑な依存関係での解決困難
  • メモリ使用: 依存関係解決時の高いメモリ消費
  • エラーメッセージ: 分かりにくいエラーメッセージの場合がある
  • 成熟度: Poetryほど活発でない開発コミュニティ

参考ページ

書き方の例

インストール

# pipでのインストール
pip install pipenv

# macOSではHomebrewも使用可能
brew install pipenv

# pipxでのインストール(推奨)
pipx install pipenv

# インストール確認
pipenv --version

プロジェクトの初期化と仮想環境作成

# 新しいプロジェクトディレクトリ
mkdir myproject && cd myproject

# Pipfileの初期化(対話的)
pipenv --python 3.11

# 仮想環境の作成(Pipfileがない場合)
pipenv install

# 特定のPythonバージョンを指定
pipenv --python 3.11.7
pipenv --python /usr/bin/python3.11

# 既存のrequirements.txtからの移行
pipenv install -r requirements.txt

パッケージの管理

# パッケージのインストール
pipenv install requests
pipenv install django==4.2.0
pipenv install "requests>=2.20"

# 開発依存関係のインストール
pipenv install pytest --dev
pipenv install black --dev
pipenv install mypy --dev

# カスタムカテゴリでのインストール
pipenv install sphinx --categories docs
pipenv install coverage --categories test

# 複数パッケージの同時インストール
pipenv install requests django flask

# VCS(Git)からのインストール
pipenv install git+https://github.com/user/repo.git
pipenv install git+https://github.com/user/[email protected]
pipenv install git+https://github.com/user/repo.git#egg=package&subdirectory=path

仮想環境の操作

# 仮想環境のシェルを開始
pipenv shell

# 仮想環境内でコマンド実行
pipenv run python app.py
pipenv run pytest
pipenv run python -m pip list

# 仮想環境の情報表示
pipenv --venv
pipenv --py

# グラフ形式での依存関係表示
pipenv graph

# 仮想環境の削除
pipenv --rm

依存関係の更新と管理

# すべての依存関係を更新
pipenv update

# 特定のパッケージのみ更新(2025年新機能)
pipenv upgrade requests
pipenv upgrade requests django

# 開発依存関係のみ更新
pipenv update --dev

# ロックファイルの再生成
pipenv lock

# 本番環境での依存関係のみインストール
pipenv install --deploy

# 開発依存関係を除いてインストール
pipenv install --ignore-pipfile

# Pipfile.lockとの同期チェック
pipenv verify

セキュリティスキャン(2025年更新)

# 新しいscanコマンド(推奨)
pipenv scan

# PyUp.io APIキーを使用したスキャン
pipenv scan --key YOUR_PYUP_API_KEY

# 旧checkコマンド(2025年6月以降非対応)
pipenv check

# 詳細なセキュリティレポート
pipenv scan --full-report

# JSONフォーマットでの出力
pipenv scan --json

設定管理

# pipenv設定の表示
pipenv --support

# 環境変数の設定(.envファイル)
echo "DEBUG=True" > .env
echo "SECRET_KEY=your-secret-key" >> .env
echo "DATABASE_URL=sqlite:///db.sqlite3" >> .env

# .envファイルの自動読み込み
pipenv shell  # .envファイルが自動で読み込まれる

# プロジェクト内仮想環境の設定
export PIPENV_VENV_IN_PROJECT=1
pipenv install

# プライベートインデックスの設定
pipenv install --index https://private.pypi.org/simple/ private_package

Pipfileの例

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[[source]]
url = "https://private.pypi.org/simple"
verify_ssl = true
name = "private"

[packages]
requests = "*"
django = ">=4.0,<5.0"
psycopg2-binary = "~=2.9.0"
private-package = {version = "*", index = "private"}
git-package = {git = "https://github.com/user/repo.git", ref = "v1.0.0"}

[dev-packages]
pytest = "*"
black = "*"
flake8 = "*"
mypy = "*"

[docs]
sphinx = "*"
sphinx-rtd-theme = "*"

[test]
coverage = "*"
pytest-cov = "*"

[requires]
python_version = "3.11"

[scripts]
start = "python manage.py runserver"
test = "pytest tests/"
format = "black ."
lint = "flake8 ."

CI/CDでの活用

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

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [3.9, 3.10, 3.11, 3.12]
    
    steps:
    - uses: actions/checkout@v4
    
    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: ${{ matrix.python-version }}
    
    - name: Install pipenv
      run: |
        python -m pip install --upgrade pip
        pip install pipenv
    
    - name: Install dependencies
      run: |
        pipenv install --dev --deploy
    
    - name: Security scan
      run: pipenv scan
    
    - name: Run tests
      run: |
        pipenv run pytest
        pipenv run black --check .
        pipenv run flake8 .
    
    - name: Generate requirements.txt for deployment
      run: pipenv requirements > requirements.txt

Docker統合

# Dockerfile例
FROM python:3.11-slim

# pipenvのインストール
RUN pip install pipenv

# 作業ディレクトリの設定
WORKDIR /app

# Pipfileとロックファイルのコピー
COPY Pipfile Pipfile.lock ./

# プロダクション依存関係のインストール
RUN pipenv install --deploy --system

# アプリケーションのコピー
COPY . .

# 環境変数の設定
ENV PYTHONPATH=/app
ENV DJANGO_SETTINGS_MODULE=myproject.settings

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

環境別の管理

# 開発環境のセットアップ
pipenv install --dev

# ステージング環境のセットアップ
pipenv install

# 本番環境のセットアップ
pipenv install --deploy --ignore-pipfile

# requirements.txtの生成(デプロイ用)
pipenv requirements > requirements.txt
pipenv requirements --dev > dev-requirements.txt

# 環境固有のPipfile管理
cp Pipfile Pipfile.development
cp Pipfile Pipfile.production

トラブルシューティング

# 依存関係の問題を診断
pipenv graph
pipenv check --system

# キャッシュのクリア
pipenv --clear

# 仮想環境の完全な再作成
pipenv --rm
pipenv install

# デバッグモードでの実行
pipenv --verbose install package_name

# ロックファイルの問題解決
rm Pipfile.lock
pipenv lock

# システムパッケージとの競合解決
pipenv install --skip-lock package_name
pipenv lock

# 環境変数の確認
pipenv --support

パフォーマンス最適化

# より高速な依存関係解決
export PIPENV_RESOLVER="backtracking"

# 並列インストールの有効化
export PIPENV_MAX_DEPTH=1

# インデックスのミラー使用
pipenv install --index https://pypi.douban.com/simple/ package_name

# キャッシュの最適化
export PIPENV_CACHE_DIR=/fast/disk/cache

スクリプト機能の活用

# Pipfileのscriptsセクション
[scripts]
dev = "python manage.py runserver"
test = "pytest tests/ -v"
coverage = "pytest tests/ --cov=myproject"
format = "black . && isort ."
lint = "flake8 . && mypy ."
deploy = "python manage.py migrate && python manage.py collectstatic --noinput"
# スクリプトの実行
pipenv run dev
pipenv run test
pipenv run coverage
pipenv run format
pipenv run lint