pipenvでPythonの開発環境を構築してみた
最近話題のPythonの環境構築ツールのpipenvですが、つかってみたので紹介します。
公式はこちら
pipenvとは?
pipenvとは、具体的には pip
と viertualenv
が融合して便利になったツールと考えると良いようです。
つまり、プロジェクト以外のシステムを汚さない独立した仮想環境と、パッケージ管理ができるツールといったことになります。
また、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環境を利用する際に自動で作成された環境だと、複数作成したらどれがどれかわからないといったことも起こってしまいがちです。
そういったときには非常に便利なしくみです。
他にも公式ドキュメントを見ると様々な便利機能があるようです。モダンなPythonライフを過ごしましょう。