さるへい備忘録

さるへいのやったことを綴っているブログです。基本的にテクノロジーの話題です。

pipenvでPythonの開発環境を構築してみた

最近話題のPythonの環境構築ツールのpipenvですが、つかってみたので紹介します。
公式はこちら

pipenv-ja.readthedocs.io

pipenvとは?

pipenvとは、具体的には pipviertualenv が融合して便利になったツールと考えると良いようです。
つまり、プロジェクト以外のシステムを汚さない独立した仮想環境と、パッケージ管理ができるツールといったことになります。

また、pyenvをシステムに導入していればローカルにインストールしていないversionのPythonも要求すれば勝手にインストールしてくれるといった特徴もあるようですね。

pipenvのインストール

下記のコマンド一発インストールが可能です。

$ curl https://raw.githubusercontent.com/kennethreitz/pipenv/master/get-pipenv.py | python

また、pipが入っていれば下記でもインストールが可能です。

$ pip install pipenv

構築

下記コマンドで、Pythonのversionを指定して仮想環境を構築可能です。
pyenvがあれば、ローカルにインストールしていなくても自動でインストールしてくれるのでいれることをおすすめします。

 $ pipenv --python 3.7.2

そうすると、以下のようなPipfileというファイルが生成されます。

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

[dev-packages]

[packages]

[requires]
python_version = "3.7"

上記をみてわかるように、 developpment環境とライブラリのインストール環境を分けることができます。

ここに、flaskというライブラリをインストールしたい場合は下記コマンドを実行します。
実行後にはPipfileに書き込まれます。

$ pipenv install flask

また、dev環境に導入したい場合は下記コマンドになります。

$ pipenv install --dev flask

過去のプロジェクトの活用

過去にrequirements.txtをつかって管理していたものを移行する場合は以下のコマンドで実行できます。

$ pipenv install -r ./requirements.txt

また、pipenvで管理した状態からrequirements.txtを抽出する場合は以下のコマンドで実行します。

$ pipenv lock -r

ライブラリのバージョンアップ/指定

ライブラリのバージョン指定やアップデートをする際はPipfileをそのまま修正します。

[packages]
Flask = "==1.0.2"

上記のままだと1.02で固定してインストールされます。

[packages]
Flask = "*"

上記に変更すると、現在の一番新しいものがインストールされます。
また、そうした場合、Pipfileで * が自動的にインストールされたバージョンにかわるわけではないので以下のようにすると最新にしたあとにバージョンを固定できます。

$ pipenv lock -r > requirements.txt
$ pipenv install -r ./requirements.txt

pipでインストールしてあるものを、一旦requirements.txtに落とし込んでその後PIpfileにまたコンバートする方法ですね。

pipenv環境の起動

作成したPythonの環境のシェルのサブプロセスを以下のコマンドで実行できます。

$ pipenv shell

こちらでPythonを実行すれば、設定したPythonが利用でき、でインストールしたライブラリがimportできます。

run scriptの実行

とはいえ、makeコマンドなどを設定していたり、コマンドを仮想環境外から実行したいことがありますよね。
その場合はPipfileに [scripts] を設定してみましょう。

[scripts]
start = "python run.py"

そして下記を実行します。

$ pipenv run start

これで、問題ありません。仮想環境でのPython実行ができます。

実行プロジェクト内での仮想環境作成

いままで紹介してきたpipenvですが、システムの全く別の箇所に仮想環境を作成してそれを実行するといった仕組みになります。
しかし、それよりもプロジェクト内のどこかにディレクトリを作成して仮想環境を作成したいといった要望はあると思います。
そんな方は以下の設定をしてみるとOKです。

export PIPENV_VENV_IN_PROJECT=1

たとえば、PyCharmなどでpipenv環境を利用する際に自動で作成された環境だと、複数作成したらどれがどれかわからないといったことも起こってしまいがちです。
そういったときには非常に便利なしくみです。

pleiades.io

他にも公式ドキュメントを見ると様々な便利機能があるようです。モダンなPythonライフを過ごしましょう。