Pipenvについての記事が少ないので、ユーザーが増えることを願って投稿します。間違っている所があれば教えて頂けると嬉しいです。
Pipenvとは
Pythonを用いたアプリケーション開発のための環境構築は
- ライブラリ依存関係の管理
- 仮想環境の構築
以上で分けてみるとわかりやすいです。つまり、2つのツールを使うことになりますが、それらを一つにしたのがpipenvです。
1. ライブラリ依存関係の管理
ライブラリは、依存関係というものが存在します。「aライブラリは、bライブラリを使用している。そのため、aライブラリを使いたければbライブラリのインストールが必要になる」といったものです。しかし、話はインストールすれば終わりではなく「aライブラリのバージョンを上げた。運悪くそれが原因で、bライブラリに不具合が出た(動かなくなった)。またcライブラリは、bに依存しているため、bライブラリに不具合が出るとcライブラリも不具合が出る」といったことがありえます。そのために依存関係を管理してくれるのがpipです。
2. 仮想環境の構築
プロジェクトによって「このプロジェクトではaライブラリはこのバージョンを使って、bライブラリではあのバージョンを使って」ということがあります。また、パソコンのシステムを汚したくない、ということもあるでしょう。そのために仮想環境を構築します。環境を別個に分離でき、不要になったときもディレクトリ削除でことが済みます。それを実現するのがvirtualenvです。
それらを一つのコマンドで操作したい場合に使うツールです。
実際に使ってみる
1. 仮想環境を構築
実際にコマンドを用いて、説明に入っていきます。
pipenvのインストールがすでにされているかどうか、バージョンで確認。
# 数字が出ればインストールはされています。
$ pipenv --version
もしインストールがされていなければ、以下のコマンドでインストール可能です。
# homebrewを用いた場合。
$ brew install pipenv
# pipを用いた場合。
$ pip install pipenv
実際にpipenvを使ってみましょう。何かしらディレクトリを作って、そのディレクトリ内で以下のコマンドを実行します。
# qiitaディレクトリを作成します。
$ mkdir qiita
# qiitaディレクトリに移動します。
$ cd qiita
# 仮想環境の構築(※Pipfileがあった場合には、Pipfileの内容で仮想環境を構築します)をします。
$ pipenv install
# どのようなファイルが作成されたか確認してみましょう。
$ ls
以上の作業で、PipfileとPipfile.lockが作成されました。どのような内容なのか、確認してみます。
Pipfileの中身は以下のような状態になっています。
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"
[packages]
[dev-packages]
[requires]
python_version = "3.6"
Pipfile.lockの中身は以下のような状態になっています。
{
"_meta": {
"hash": {
"sha256": "4e55147db217bb4120f6e68cb8cad7bc37011457441ce0eb9d97308315625834"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.6"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.python.org/simple",
"verify_ssl": true
}
]
},
"default": {},
"develop": {}
}
上述のとおり、Pipfileがカレントディレクトリに無い状態で $ pipenv install コマンド実行をすると、ほぼ空っぽの状態のPipfileとPipfile.lockが作成されます。それぞれのファイルの役割ですが、
- Pipfile => 設定ファイル
- Pipfile.lock => インストールしたライブラリの情報
という構成になっています。 2つのファイルでpipで言う requirements.txt の代替をすると考えていただければわかりやすいでしょう。仮想環境のシェルに入ります。 .venv があるディレクトリで以下のようにコマンドを実行してください。
# シェルに入ります。
$ pipenv shell
# 仮想環境内のPythonのバージョンを確認します。
$ python --version
以上で仮想環境が使えるようになりました。
2. ライブラリ管理
次に、Pipenvを用いてライブラリの管理をしてみましょう。まずライブラリを追加してみます。ここでは、例として django を追加します。
# Djangoライブラリを追加
$ pipenv install django
Pipfile.lockがインストール済みライブラリの情報が記述されているはずなので、確認してみます。以下のようにPipfle.lockが更新されました。
{
"_meta": {
"hash": {
"sha256": "e0eba63583a7777ad2aec379073e7fbabad9eb003c979b8cd4a85f63f7374a8f"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.6"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.python.org/simple",
"verify_ssl": true
}
]
},
"default": {
"django": {
"hashes": [
"sha256:26b34f4417aa38d895b6b5307177b51bc3f4d53179d8696a5c19dcb50582523c",
"sha256:71d1a584bb4ad2b4f933d07d02c716755c1394feaac1ce61ce37843ac5401092"
],
"index": "pypi",
"version": "==2.0.5"
},
"pytz": {
"hashes": [
"sha256:65ae0c8101309c45772196b21b74c46b2e5d11b6275c45d251b150d5da334555",
"sha256:c06425302f2cf668f1bba7a0a03f3c1d34d4ebeef2c72003da308b3947c7f749"
],
"version": "==2018.4"
}
},
"develop": {}
}
※djangoの依存関係にあるpytzライブラリも同時にインストールされています。
逆にアンインストール作業をするには、下記のコマンドです。ここでも、djangoをアンインストールしてみます。
$ pipenv uninstall django
ここでは割愛しますが、djangoライブラリとpytzライブラリの両方がアンインストールされていることを、Pipfile.lockを見て確認してみてください。
また、ライブラリの依存関係含め、ライブラリ全体のバージョンアップをするときは、以下のコマンドを実行します。
$ pipenv update
3. 仮想環境内でのコマンドの実行方法
基本的にrunコマンドのあとに、コマンドは実行する必要があります。具体例としては、以下のようになります。
# hoge コマンドを仮想環境内で引数 fuga をつけて実行する場合
$ pipenv run hoge fuga
まとめ
ここまでで、仮想環境構築、ライブラリ管理、仮想環境内でのコマンド実行についてまとめました。発展的内容に関しては、公式サイトをご覧いただくのがベストです。