TIL

Today I Learned. 知ったこと、学んだことを書いていく

pipenv パッケージングツール - Python

pipenvとはpipの環境を分離できるツール?。requestsの作成者が作っている。

github.com

少し使ってみて、良さそうだったらこれからも使っていきたい。

インストールする

$ pip3 install pipenv

使い方

pipenvコマンドで使う。

pipenv install

現在のディレクトリに仮想環境を作成

$ pipenv install

pipenv install モジュール名

仮想環境にモジュールをインストールする。(pip install のような感じ)

$ pipenv install python-dateutil

pipenv run コマンド

仮想環境の中でコマンドを実行する

$ pipenv run python3

pipenv graph

インストールされているモジュールの依存関係を表示する

$ pipenv graph
python-dateutil==2.6.1
  - six [required: >=1.5, installed: 1.11.0]
requests==2.18.4
  - certifi [required: >=2017.4.17, installed: 2017.7.27.1]
  - chardet [required: <3.1.0,>=3.0.2, installed: 3.0.4]
  - idna [required: >=2.5,<2.7, installed: 2.6]
  - urllib3 [required: >=1.21.1,<1.23, installed: 1.22]

.env ファイルで専用の環境変数を設定

Pipenvは実行時にディレクトリ内にある .env の内容を自動的に読み込み一時的な環境変数を設定してくれる。これがあれば、direnvいらない!!!

詳しくはこちら

.env を作成する

NAME=tamago

取得する

$ pipenv run python3
Loading .env environment variables…
>>> import os
>>> os.environ['NAME']
tamago

.envをgitでは見ないようにするには.gitignoreに以下の記述を追加する

# pipenv
.env



いろいろやったこと

仮想環境の作成

プロジェクトのディレクトリに移動し、pipenv installとする。これによって、そのディレクトリに仮想環境ができる。

$ mkdir myenv; cd myenv
$ pipenv install
...
$ ls
Pipfile      Pipfile.lock

作成した仮想環境にモジュールをインストール

pipenv install モジュール名とすることでインストールできる。pipと同じような感じ

$ pipenv install python-dateutil

仮想環境だけに入っているかを確認してみる。

pipenv run コマンドとすることで、仮想環境内でコマンドを実行することができる。

$ pipenv run python3
Python 3.6.3 (default, Oct  4 2017, 06:09:15)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.37)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import dateutil

しっかりとインストールできていることがわかる

しかし、pipenv runを使わない場合(仮想環境で実行しない場合)には、python-dateutilはインストールされていないため、エラーになる。

$ python3
Python 3.6.3 (default, Oct  4 2017, 06:09:15)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.37)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import dateutil
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'dateutil'

pip3 listでもわかる

$ pipenv run pip3 list
Package         Version
--------------- -----------
certifi         2017.7.27.1
chardet         3.0.4
idna            2.6
pip             9.0.1
python-dateutil 2.6.1
requests        2.18.4
setuptools      36.6.0
six             1.11.0
urllib3         1.22
wheel           0.30.0

$ ip3 list
Package          Version
---------------- -----------
certifi          2017.7.27.1
chardet          3.0.4
flake8           3.5.0
idna             2.6
mccabe           0.6.1
pew              1.1.0
pip              9.0.1
pipenv           8.3.0
pycodestyle      2.3.1
pyflakes         1.6.0
requests         2.18.4
setuptools       36.5.0
urllib3          1.22
virtualenv       15.1.0
virtualenv-clone 0.2.6
wheel            0.30.0

参考文献