Pythonで開発をしていると、こんな悩みに直面することってありませんか?
- プロジェクトごとに使うパッケージがバラバラで管理が大変…
- 他の人と同じ環境で開発したいけど、環境構築が面倒…
- 仮想環境(
venv
やvirtualenv
)とpip
の使い分けがよくわからない…
こうした悩みをまとめて解決してくれるツールがpipenv(ピップエンブ)です。
この記事では『pipenv』について、以下の内容をわかりやすく解説します。
- pipenvとは?
- pipenvの特徴
- pipenvのインストール方法
- pipenvの使い方
- pipenvでよく使うコマンド
- 仮想環境を新規作成する方法
- パッケージのインストール方法
Pipfile
やPipfile.lock
を元に環境を作成する方法- 仮想環境を有効化する方法(仮想環境に入る方法)
- 仮想環境を無効化する方法(仮想環境から出る方法)
- 仮想環境を削除する方法
- 仮想環境のパスを確認する方法
- 仮想環境のパスを指定する方法
Pipfile.lock
をもとにrequirements.txt
を出力する方法- 依存関係のグラフ(ツリー)を確認する方法
pipenvとは?
pipenvは、Pythonで開発するときにとても便利なパッケージ管理ツールです。
「pip(パッケージ管理ツール)」と「virtualenv(仮想環境を作るツール)」をひとつにまとめたようなツールであり、以下のような機能を提供しています。
- プロジェクトごとに必要なパッケージを整理して管理する
- コマンドひとつで自動的に仮想環境を作る
- パッケージの情報をファイルに記録して、あとから同じ環境を再現する
Node.jsを使ったことがある人なら、「pipenv」は「npm」や「yarn」のような存在と考えるとわかりやすいです。
pipenvの特徴
pipenvには、Python開発を便利にしてくれる特徴がたくさんあります。ここでは、以下に示す主な4つの特徴を順番に紹介します。
- PipfileとPipfile.lockによるパッケージ管理ができる
- 仮想環境を自動的に作成・管理できる
- pyenvとの連携がスムーズ
- スクリプトの登録と実行も可能
① PipfileとPipfile.lockによるパッケージ管理ができる
pipenvでは、従来のrequirements.txt
の代わりにPipfile
とPipfile.lock
という2つのファイルでインストールしたパッケージの情報を管理します。
インストールされるすべてのパッケージの情報(パッケージの依存関係やバージョン等の情報)はPipfile.lock
に記録されます。このファイルを元に環境構築をすることで環境を完全に再現することができます。
PipfileとPipfile.lock
Pipfile
- 自分が明示的にインストールしたパッケージだけが記録されます。
- バージョンは「範囲指定」が可能です。
- 例:
requests = ">=2.25"
のように、「2.25以上ならOK」という書き方も可能です。
- 例:
- 開発者が手動で
Pipfile
を編集してもOKです(実際、編集する場面もあります)。 - Node.jsの
package.json
のような役割です。
Pipfile.lock
- Pipfileに書かれたパッケージだけでなく、それに依存するすべてのパッケージも記録します。
- バージョンは完全に固定されます。
- 例:
requests 2.25.1
のようにピンポイントで指定されます
- 例:
- このファイルを使うことで、どの開発者が使ってもまったく同じ環境を再現できるようになります。
Pipfile.lock
は手動で編集してはいけません。これは「pipenvが自動で作るファイル」です。- Node.jsの
package-lock.json
やyarn.lock
のような役割です。
② 仮想環境を自動的に作成・管理できる
pipenv install
やpipenv sync
を実行して、Pipfile
やPipfile.lock
に記載されているパッケージをインストールした際、自動的にプロジェクト専用の仮想環境も作成されます。わざわざpython -m venv
やvirtualenv
を使う必要はありません。しかも、仮想環境のパスもPipenvが内部的に管理してくれるので、面倒な設定や切り替え作業も不要です。
③ pyenvとの連携がスムーズ
pyenvを使っていれば、pipenv --python <バージョン>
のコマンド実行時に指定されたバージョンが自動的にインストールされ、そのバージョンに対応する仮想環境が構築されます。これにより、Python本体のバージョン管理もpipenvと一緒にできるようになります。
あわせて読みたい
『pyenv』については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。 続きを見るpyenvとは?「インストール方法」や「使い方」を詳しく解説!
④ スクリプトの登録と実行も可能
Pipfile
に「スクリプト(scripts)」を登録すれば、よく使うコマンドをpipenv run <コマンド名>
で簡単に実行できます。これを使えば、開発やテストに使うコマンドをチームで共有したり、ミスなく実行できたりして便利です。Node.jsのnpm run <コマンド名>
のようなイメージです。
pipenvのインストール方法
まずは、pipenv本体をインストールします。とても簡単でpip
コマンドでインストールすることができます。
pip install pipenv
pip
はPythonに標準で付いてくるパッケージ管理ツールです。
上記のコマンドを実行すると、pipenv
というツールがシステムにインストールされます。
インストールされたかを以下のコマンドを実行して確認してみましょう。
pipenv --version
実行結果の例
$ pipenv --version
pipenv, version 2025.0.4
コマンドを実行して、バージョンが表示されれば、pipenvが正常にインストールできています。
エラーが発生した場合
pip install pipenv
を実行してPipenvをインストールしたのに、次のようなエラーが出ることがあります。
$ pipenv --version
Command 'pipenv' not found, but can be installed with:
sudo apt install pipenv
これは、pipでインストールしたpipenv
がシステムの「パス(PATH)」に通っていないことが原因です。pipでインストールしたツールは通常、~/.local/bin
に配置されますが、この場所がPATHに含まれていないと、ターミナルからpipenv
を実行できません。まずは、以下のコマンドでpipenvがどこにインストールされたかを確認してみましょう。
python3 -m site --user-base
たとえば、出力が/home/user01/.local
のようになっていれば、実行ファイルは/home/user01/.local/bin/
にあることになります。この場所をPATHに追加するには、使っているシェルの設定ファイル(たとえばbashなら.bashrc
)に以下の1行を追記します。
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
その後、設定を反映するために以下のコマンドを実行します。
source ~/.bashrc
これで、再びpipenv --version
を実行すれば、バージョン情報が表示されるはずです。PATHが通っていなかっただけなので、環境変数を正しく設定すれば問題は解消します。
pipenvでよく使うコマンド
以下にpipenvでよく使うコマンド一覧を表形式でまとめました(後ほど各コマンドについて詳しく説明します)。
コマンド | 説明 |
---|---|
pipenv --python <バージョン> | 指定したPythonバージョンで新しい仮想環境を作成する |
pipenv install | Pipfile に基づいてパッケージをインストール |
pipenv install <パッケージ名> | 指定したパッケージをインストールし、Pipfile に追加 |
pipenv install <パッケージ名>==<バージョン> | 指定バージョンのパッケージをインストール |
pipenv install <パッケージ名> --dev | 開発専用パッケージをインストール |
pipenv sync | Pipfile.lock に基づいて環境を完全に再現する |
pipenv sync --dev | Pipfile.lock に基づき、開発用パッケージも含めて環境を完全に再現する |
pipenv uninstall <パッケージ名> | 指定したパッケージをアンインストールし、Pipfile から削除 |
pipenv uninstall --all | 仮想環境から全パッケージを削除 |
pipenv shell | 仮想環境を有効化 |
exit または Ctrl + D | 仮想環境を無効化 |
pipenv --rm | 仮想環境を削除する |
pipenv --venv | 仮想環境のパスを表示する |
pipenv requirements | Pipfile.lock を基にrequirements.txt 形式で依存関係を出力 |
pipenv graph | パッケージの依存関係をツリー形式で表示 |
pipenv run <コマンド> | 仮想環境内で任意のコマンドを実行(例:pipenv run python app.py ) |
仮想環境を新規作成する方法
事前準備
新しくPythonプロジェクトを始める場合、まず作業用のディレクトリ(フォルダ)を作り、移動しましょう。
mkdir test-project && cd test-project
仮想環境を作成するには、以下のコマンドを実行します。
pipenv --python 3.12
このコマンドを実行すると、以下のことが自動的に行われます。
- Python 3.12を使った仮想環境が作られる
- 手元の環境で使える3.12系の中で、最も新しいバージョンが使われます(例:3.12.11など)。
- 「3.12.1 を使いたい!」という場合は
pipenv --python 3.12.1
のように指定してください。 pipenv --python 3
(Python 3系を使う)という指定も可能です。
Pipfile
が自動生成される
自動生成されたPipfile
の中身は以下のようになっています。
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
[dev-packages]
[requires]
python_version = "3.12"
python_full_version = "3.12.11"
pyenv(Pythonバージョン管理ツール)を使っている場合
pyenv(Pythonバージョン管理ツール)を使っている場合、指定したPythonのバージョンがインストールされていなくても、pipenvが自動的にインストールしてくれます。例えば、Python 3.6系がインストールされていない状態で以下のコマンドを実行したとします。
pipenv --python 3.6
環境にPython 3.6系が無いので、以下のようなメッセージが表示され、自動的にインストールしてくれます。
$ pipenv --python 3.6
Warning: Python 3.6 was not found on your system...
Would you like us to install CPython 3.6.15 with Pyenv? [y/n] (y): y
Installing CPython 3.6.15 with /home/user01/.pyenv/bin/pyenv
(this may take a few minutes)...
✔ Success!
⠧ Installing python...patching file configure
...(以下略)
このように、pyenvとpipenvは連携して動作するため、開発環境の構築が非常にスムーズです。
パッケージのインストール方法
新しく追加したいパッケージ(例: numpy
)は以下のコマンドでインストールします。
pipenv install numpy
このコマンドを実行すると、numpy
パッケージが仮想環境にインストールされ、Pipfile
の[packages]
に以下のように追記されます。
[packages]
numpy = "*"
同時にPipfile.lock
も生成または更新され、実際にインストールされた正確なバージョンや依存パッケージが記録されます(Pipfile.lock
はとても行数が長いのでこの記事に載せるのは割愛しています)。
pipenv install
コマンド実行時において、仮想環境が作られていない場合には、仮想環境が自動で作成されます。
バージョンを指定してインストールする方法
パッケージのバージョンを明示的に指定したいときは、以下のようにします。
pipenv install numpy==2.3.2 # 完全固定(更新されない)
pipenv install numpy~=2.3 # 2.3以上、2.4未満(推奨)
==
はそのバージョンにピン留めしますが、更新できなくなるため、~=
(チルダイコール)による「メジャーバージョンロック」が推奨されています。
開発専用パッケージをインストールする方法(--dev)
テストツールやコード整形ツールなど、開発のみで使用し製品には含めない開発専用パッケージは--dev
オプションでインストールできます。
pipenv install --dev pytest autopep8 flake8
--dev
オプションを指定した場合Pipfile
の[dev-packages]
に以下のように追記されます。
[dev-packages]
pytest = "*"
autopep8 = "*"
flake8 = "*"
PipfileやPipfile.lockを元に環境を作成する方法
Pythonプロジェクトでは、すでに誰かが作成したPipfile
やPipfile.lock
が存在することがあります。この場合において、自分の環境に仮想環境を再構築する方法について解説します。
パターン①:Pipfileに基づいて環境を作成する
Pipfile
に基づいて環境を作成する場合には以下のコマンドを実行します。
pipenv install
このコマンドを実行すると、以下のこと行われます。
Pipfile
に書かれたパッケージをもとに、仮想環境を新しく作成します。Pipfile.lock
がまだない場合は、新たに生成されます。- インストールされるパッケージのバージョンは「Pipfileの指定に従って」決まります。
開発専用パッケージも含めてインストールしたい場合には、以下のコマンドを実行します。
pipenv install --dev
上記のコマンドを実行すると、Pipfile
の[dev-packages]
に書かれた開発専用パッケージも一緒にインストールされます。
パターン②:Pipfile.lockに基づいて環境を作成する(完全再現)
Pipfile.lock
に基づいて環境を作成する場合には以下のコマンドを実行します。
pipenv sync
このコマンドを実行すると、以下のこと行われます。
Pipfile.lock
に書かれたすべてのパッケージとそのバージョンを完全に再現して、仮想環境を新しく作成します。- 環境の完全一致が保証されます(チーム開発ではこのコマンドを実行することをおすすめします)。
開発専用パッケージも含めてインストールしたい場合には、以下のコマンドを実行します。
pipenv sync --dev
上記のコマンドを実行すると、本番用と開発用のすべてのパッケージを、Pipfile.lock
の情報通りにインストールします。
【補足】旧形式(requirements.txt)からの移行も可能
もし以前のプロジェクトでrequirements.txt
が使われていた場合でも、pipenvは対応できます。以下のコマンドを実行すると、requirements.txt
の内容を読み込み、Pipfile
とPipfile.lock
を生成します。
pipenv install -r requirements.txt
仮想環境を有効化する方法(仮想環境に入る方法)
Pythonの開発では、仮想環境を有効化(アクティブ化)して、その中で作業することがよくあります。以下のコマンドを実行すると、仮想環境を有効化することができます。
pipenv shell
このコマンドを実行すると、以下のこと行われます。
- 現在のシェル(ターミナル)内で、pipenvが作成した仮想環境が有効になります。
- いわゆる
source .venv/bin/activate
に相当します。 - プロンプトが変わり、仮想環境名が表示されます(例:
(mypipenv-abc123)
など)。 - この状態では、仮想環境内のPythonやパッケージだけが使われるようになります。
仮想環境を無効化する方法(仮想環境から出る方法)
仮想環境から抜ける(元のシェルに戻る)には、次のコマンドを実行します。
exit
Ctrl + D
でも仮想環境から抜けることができます。
仮想環境を削除する方法
以下のコマンドを実行すると、現在のディレクトリに作られているpipenvの仮想環境が削除されます。
pipenv --rm
このコマンドを実行すると、以下のこと行われます。
- pipenvが管理していた仮想環境フォルダごと削除されます。
- ただし、
Pipfile
やPipfile.lock
は削除されません。 - そのため、あとで
pipenv install
やpipenv sync
を使えば、すぐに同じ環境を再構築できます。
例えば、以下のように仮想環境を削除して、再度環境を構築することはよく行われる操作です。
# 仮想環境を削除(リセット)
$ pipenv --rm
# Pipfile.lockから環境を再構築
$ pipenv sync --dev
仮想環境のパスを確認する方法
pipenvでは、仮想環境は自動的に管理されるため、仮想環境フォルダを手動で作成・操作する必要はありません(どこにあるかを気にする必要もありません)。ただし、「仮想環境の場所を知りたい」・「作成される仮想環境の場所を指定したい」場合もありますよね。仮想環境がどこに作られているか確認したいときは、次のコマンドを使います。
pipenv --venv
実行結果の例
Linux/macOSの場合
/home/username/.local/share/virtualenvs/test-project-z_9CLMvu
Windowsの場合
C:\Users\username\.virtualenvs\test-project-z_9CLMvu
pipenvはプロジェクトのディレクトリ名などをもとに、ユニークな名前で仮想環境を自動生成します。
仮想環境の保存場所(デフォルト)
OS | デフォルトの保存場所 |
---|---|
Windows | %USERPROFILE%\.virtualenvs |
Linux/macOS | $HOME/.local/share/virtualenvs |
仮想環境のパスを指定する方法
次に、作成される仮想環境の場所を変更する方法について説明します。プロジェクトの中に仮想環境を置きたいときは、次の環境変数を設定します。
Linux/macOSの場合
export PIPENV_VENV_IN_PROJECT=true
Windowsの場合
set PIPENV_VENV_IN_PROJECT=true
設定後はプロジェクト直下に.venv
フォルダが作られ、仮想環境がそこに作成されます。
your-project/
├── .venv/ ← 仮想環境がここにできる
├── Pipfile
└── Pipfile.lock
.venv
がプロジェクト内にあると、他の人と共有しやすい&エディタ(VSCodeなど)が認識しやすいというメリットがあります。
ここまで書いた!
Pipfile.lockをもとにrequirements.txtを出力する方法
他の環境やCIツールなどで「pip install -r requirements.txt
」を使いたいことがある場合があります。この場合、pipenvでは以下のコマンドでrequirements.txt
を出力できます。このコマンドではPipfile.lock
をもとにrequirements.txt
を生成しています。
pipenv requirements
実行結果の例
$ pipenv requirements
-i https://pypi.org/simple
blinker==1.9.0; python_version >= '3.9'
click==8.2.1; python_version >= '3.10'
flask==3.1.1; python_version >= '3.9'
itsdangerous==2.2.0; python_version >= '3.8'
jinja2==3.1.6; python_version >= '3.7'
markupsafe==3.0.2; python_version >= '3.9'
numpy==2.3.2; python_version >= '3.11'
pandas==2.3.1; python_version >= '3.9'
python-dateutil==2.9.0.post0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'
pytz==2025.2
six==1.17.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'
tzdata==2025.2; python_version >= '2'
werkzeug==3.1.3; python_version >= '3.9'
この出力は、pipでそのままインストールできる形式になっています。
また、標準出力(ターミナルに表示される内容)をrequirements.txt
に保存するには、リダイレクト(>
)を使います。
pipenv requirements > requirements.txt
これでrequirements.txt
がプロジェクトディレクトリに生成されます。
依存関係のグラフ(ツリー)を確認する方法
どのパッケージがどのパッケージに依存しているかを確認したいときは、以下のコマンドで依存関係をグラフ(ツリー)を形式で出力することができます。
pipenv graph
実行結果の例
$ pipenv graph
autopep8==2.3.2
└── pycodestyle
flake8==7.3.0
├── mccabe
├── pycodestyle
└── pyflakes
Flask==3.1.1
├── blinker
├── click
├── itsdangerous
├── Jinja2
│ └── MarkupSafe
├── MarkupSafe
└── Werkzeug
└── MarkupSafe
pandas==2.3.1
├── numpy
├── python-dateutil
│ └── six
├── pytz
└── tzdata
pytest==8.4.1
├── iniconfig
├── packaging
├── pluggy
└── Pygments
上図の実行結果から、どのパッケージがどのライブラリを必要としているかが一目でわかります。
なお、詳細を知りたい場合には、pipenv install --dev pipdeptree
を実行して、pipdeptree
をインストール後に、以下のコマンドを実行します。
pipenv run pipdeptree
実行結果の例
$ pipenv run pipdeptree
autopep8==2.3.2
└── pycodestyle [required: >=2.12.0, installed: 2.14.0]
flake8==7.3.0
├── mccabe [required: >=0.7.0,<0.8.0, installed: 0.7.0]
├── pycodestyle [required: >=2.14.0,<2.15.0, installed: 2.14.0]
└── pyflakes [required: >=3.4.0,<3.5.0, installed: 3.4.0]
Flask==3.1.1
├── blinker [required: >=1.9.0, installed: 1.9.0]
├── click [required: >=8.1.3, installed: 8.2.1]
├── itsdangerous [required: >=2.2.0, installed: 2.2.0]
├── Jinja2 [required: >=3.1.2, installed: 3.1.6]
│ └── MarkupSafe [required: >=2.0, installed: 3.0.2]
├── MarkupSafe [required: >=2.1.1, installed: 3.0.2]
└── Werkzeug [required: >=3.1.0, installed: 3.1.3]
└── MarkupSafe [required: >=2.1.1, installed: 3.0.2]
pandas==2.3.1
├── numpy [required: >=1.26.0, installed: 2.3.2]
├── python-dateutil [required: >=2.8.2, installed: 2.9.0.post0]
│ └── six [required: >=1.5, installed: 1.17.0]
├── pytz [required: >=2020.1, installed: 2025.2]
└── tzdata [required: >=2022.7, installed: 2025.2]
pipdeptree==2.28.0
├── packaging [required: >=24.1, installed: 25.0]
└── pip [required: >=24.2, installed: 25.2]
pytest==8.4.1
├── iniconfig [required: >=1, installed: 2.1.0]
├── packaging [required: >=20, installed: 25.0]
├── pluggy [required: >=1.5,<2, installed: 1.6.0]
└── Pygments [required: >=2.7.2, installed: 2.19.2]
本記事のまとめ
この記事では『pipenv』について、以下の内容を説明しました。
- pipenvとは?
- pipenvの特徴
- pipenvのインストール方法
- pipenvの使い方
- pipenvでよく使うコマンド
- 仮想環境を新規作成する方法
- パッケージのインストール方法
Pipfile
やPipfile.lock
を元に環境を作成する方法- 仮想環境を有効化する方法(仮想環境に入る方法)
- 仮想環境を無効化する方法(仮想環境から出る方法)
- 仮想環境を削除する方法
- 仮想環境のパスを確認する方法
- 仮想環境のパスを指定する方法
Pipfile.lock
をもとにrequirements.txt
を出力する方法- 依存関係のグラフ(ツリー)を確認する方法
お読み頂きありがとうございました。