Python
pip
virtualenv

pipenv を使ってみたのでメモ


概要


pipenvで色々やってみる


  • 各コマンドを試したのでそのときの備忘録も兼ねてメモ。

  • 実行環境は、 macOS Sierra。


1.インストールする。

pipenvは、pipでインストールできます。

いつも通り以下のコマンドを実行してインストール。

$ pip install pipenv


2. とりあえずpipenvを使ってみる

$ mkdir test1      # 検証用ディレクトリの作成

$ cd test1 # 検証用ディレクトリに移動
$ pipenv install # 仮想環境 と Pipfile を作成
$ ls -a
. .. .venv Pipfile Pipfile.lock

pipenv実行後に、 Pipfile, Pipfile.lock と、仮想環境の設定が格納される .venv が作成されていることがわかります。

後述する方法でパッケージをインストールすると、Pipfileにその情報が書き込まれます。

Pythonのバージョンを切り替える場合は、以下のコマンドを実行する

$ pipenv shell


3. 作成した環境に対して、パッケージをインストールする。

pipenv install [package] で、作成した仮想環境にパッケージをインストールできます。

パッケージのバージョンを指定してもいいし、省略しても構いません。省略した場合は、最新のバージョンが取得されるのは pip と同じです。

$ pipenv install nose==1.3.7  # 仮想環境向けにパッケージをインストール

$ pipenv shell
$ (test1)(test1) python
>>> import nose
>>> exit()

$ python

>>> import nose # 仮想環境にのみインストールされていることを確認してみる
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named nose
>>> exit()
$ (test1)(test1) exit # 仮想環境から抜ける

$cat Pipfile        # Pipfileを確認してみる

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

[packages] # new!!!
nose = "==1.3.7"


4. 定義済みのPipfileを用いて、仮想環境の構築とパッケージのインストールを試す

$ cd .. && mkdir test2 && cd test2  # 検証用にディレクトリ作成&移動

$ ls -a
. ..

$ pipenv run python      # 仮想環境に入ってpythonを実行するのと同義

>>> import nose
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named nose
>>> exit()

$ cp ../test1/Pipfile . # 定義済みPipfileを持ってくる
$ pipenv install # 仮想環境の作成とパッケージのインストールを実施
$ ls -a
. .. .venv Pipfile Pipfile.lock
$ pipenv run python
>>> import nose
>>> exit()


 備考:pipenv をバージョン指定で実行する


バージョンを詳細に指定する

Pythonのバージョンを直接指定できるようになりました。何も指定しなければStableな最新版が入るようです。

$ pipenv --python <Pythonのバージョン>

3.6.2で入れたい場合は、以下のように記述できます。3.6といった指定もできます。その場合、 x.y.z の部分は最新が取られるようになります。

$ pipenv --python 3.6.2


2系か3系かを指定する

下記コマンドでそれぞれバージョンを指定して実行できます。とりあえず2系・3系の環境を作りたい場合は、ざっくりこの指定で良いのではないでしょうか。

$ pipenv --two # 2系の環境を作成する

$ pipenv --three # 3系の環境を作成する


The 'python3' command exists in these Python versions が出た場合

リリース当時に遭遇しました。pyenvで、2系・3系の複数バージョンをインストールしていたため、下記のようなメッセージが表示され、処理が中断されたことがありました。3系のバージョンが複数あって、対象を1つに絞れないという情報を提供してくれています。2系でも同様。

$ pipenv --three

Creating a virtualenv for this project...
pyenv: python3: command not found
The `python3' command exists in these Python versions:
3.4.2
3.4.3

この場合は、pyenv local [version] などでバージョンを指定することでとりあえず解決できるが、果たしてこれで良いのだろうか・・・。

pyenv install で初期化した場合は、 system のバージョン(pyenvとは無関係)を参照しているようで、その場合は当然ながら上記エラーは発生しません。