概要
- https://github.com/kennethreitz/pipenv
-
It harnesses Pipfile, pip, and virtualenv into one single toolchain.
- virtualenv と pipによるパッケージ管理を、Pipfile を介して統合的に扱うようにするためのツールのようだ。
- 乗り換え時の作業メモはこちらに書きました
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とは無関係)を参照しているようで、その場合は当然ながら上記エラーは発生しません。