Pythonで開発する際には、仮想環境の作成と管理には「virtualenv」、パッケージのインストールや管理には「pip」 の2つのツールの組み合わせがよく使われていますよね。ただ、この組み合わせは2つのツールを使い分けないといけない面倒さや、pipでのパッケージ管理にはいくつか課題があるため、決して使いやすいものという訳ではありませんでした。
しかし「Pipenv」は、公式サイトの冒頭に書かれているように
「production-ready tool that aims to bring the best of all packaging worlds to the Python world. It harnesses Pipfile, pip, and virtualenv into one single command. 」
と、仮想環境とパッケージ管理をこのコマンドのみでおこなえるようにし、またpipでのパッケージ管理のつらさを解決を目指しているツールです。
ですから今回はこの「pipenv」の簡単な使い方と特徴を紹介します。
この記事を読む人に必要な知識や環境について
今回少し難しい内容ですので以下の知識や環境を参考にしてください。
前提知識
仮想環境(virtualenv)と pip を使ったことがある
記事環境
- Python実行環境を用意
PythonのダウンロードページよりPythonの実行環境をインストールしました。そして仮想環境で違うバージョンのPythonを試すため、違うバージョンを複数インストールしています。
Pipenvのインストール
まずはpipenvのサイトの手順でインストールします。いくつか手順がありますが、私は
$ pip install --user pipenv
でインストールしました。
使い方
初期設定
環境構築したいディレクトリ、以下のコマンドで環境を準備します。 –python で利用したいpythonのバージョンを指定できます。
$ mkdir pipenv-test $ cd pipenv-test $ pipenv --python 3.7
仮想環境内でコマンドを実行
2つの方法があります。下記はどちらも同じ結果になります。
仮想環境に入って実行
$ pipenv shell $ python --version python 3.7.6
仮想環境に入らず、直接実行
$ pipenv run python --version python 3.7.6
パッケージの追加
パッケージのインストールには、 pipenv install を利用します。この時、pipと同様にバージョンを指定することができます。パッケージの追加は、仮想環境に入っていてもいなくてもどちらでもできます。
$ pipenv install pandas
指定したパッケージと依存するパッケージががインストールされ、Pipfileの[packages]にpandas が追加されているはずです。また Pipfile.lock というファイルも生成されています。
– Pipfile.lock
[[source]] name = "pypi" url = "https://pypi.org/simple" verify_ssl = true [dev-packages] [packages] pandas = "*" [requires] python_version = "3.7"
パッケージの削除
パッケージの削除は uninstall コマンドで行えます。
pipenv uninstall pandas
Pipfileを直接編集するパッケージ管理
Pipfileを直接編集して、パッケージのバージョン変更やパッケージの追加を行うこともできます。例えば、 pandas のバージョンを 0.24系に固定し、新しくseabornを追加する場合、Pipfile の[packages]のセクションを
[packages] pandas = "==0.24.*" seaborn = "*"
とし、
$ pipenv install
を実行すると、Pipfileの内容にしたがってパッケージのインストールが行われます。
環境を誰かに渡したい場合
環境を渡す場合は、Pipfile とPipfile.lock の両方を渡します。渡された方は、
$ pipenv sync
で、同じ環境が利用できるようになります。
git でバージョン管理をする場合
もしgitでバージョン管理をする場合は、通常、以下の2つをバージョン管理するのがおすすめです。
- Pipfile
- Pipfile.lock
ただし、現在開発中のものが複数バージョンのPythonに対応しないといけない場合は、 Pipfileのみの管理とし、Pipfile.lockはgit管理外にしないといけません。
仮想環境の削除
仮想環境を削除する場合、Pipfileがあるディレクトリで、
$ pipenv --rm
で削除できます。
pipとの違いとは
pipと違い、pipenvでは、requiments.txt の代わりに Pipfile とPipefile.lockの2つのファイルでパッケージの管理を行います。しかし行うのが大きな違いです。なぜ2つ必要なのでしょうか?
大きな理由としては、パッケージの依存関係管理を行えるようにするためにあります。 例えば pandas はこれ単体では動作できず、 numpy も動作に必要となります。イメージ的には、以下のようになります。
pip やpipenvはこの依存関係を認識し、使いたいパッケージをインストールすると、動作に必要なパッケージもインストールします。 pip はただインストールするだけですが、 pipenv は 「使いたいパッケージ」と「それに依存しているパッケージ」を管理できる形になっています。イメージとしては図の形です。
Pipfile には、「利用したいパッケージ」のみを記載し、 Pipfile.lockは実際にインストールされている全てのパッケージの情報が生成され記載されています。
この仕組みにより、requiments.txt でのパッケージ管理より簡単な管理が可能となっています。
pipenv の簡単な使い方と、pip との違いを紹介しました。
pipenv を使うことで、仮想環境の作成と管理とパッケージのインストールと管理がこのコマンド1つで行えるようになります。
また、pipとrequirments.txtの管理では難しかった依存パッケージの管理も、Pipfile とPipfile.lockファイルの2つで管理するという方法で、簡単に扱えるようになっています。
pipenv自体は 内部的には pipとvirtualenv を利用していますので使い方も似ており、またpip/virtualenvの組み合わせからpipenvへの移行も比較的簡単です。もちろん、pipenv で構築した環境ではpipを使うこともできますので、途中から pip/requirments.txt へ戻すことも簡単です。
Pipenvをぜひ使って見てください。