はじめに
例えば Ruby では Bundler を使って Gemfile で、Node.js では npm や Yarn を使って package.json でパッケージを管理できます。
同様に Python では pip を使って requirements.txt でパッケージを管理できます。しかし Gemfile
や package.json
と違って機能が十分ではありません。
そこで、もっと便利なパッケージ管理方法を調べていたところ Pipfile というものを発見しました。まだ実験段階のようですが、requirements.txt
より高機能で便利そうです。そして Pipenv というツールを使用することで Pipfile
を取り扱うことができるようなので、試してみました。
Pipenv とは
公式ドキュメントの日本語訳 によると
Pipenv — Python.org が正式に推薦するPythonパッケージングツール、そして (自由としての) フリー。
(略)
pipenvは、手動でパッケージのインストールおよびアンインストールを行うのと同じように Pipfile に対してパッケージの追加および削除を行うのに加え、自動でプロジェクト用の仮想環境を作成し管理します。 また、pipenvはいかなるときも重要な Pipfile.lock を生成し、これは決定論的ビルドをもたらすために使われます。
とのことです。機械翻訳っぽいですね
なお Pipenv では仮想環境の作成に virtualenv を使っています。
インストール
$ pip install pipenv
使い方
任意の Python プロジェクトのディレクトリに移動しておきましょう。
$ cd pipenv-sandbox
はじめに仮想環境を作成します。このとき、virtualenv が使う Python のバージョンをオプションで指定します。
$ pipenv --three # Python 3
$ pipenv --two # Python 2
$ pipenv --python 3.6.3 # バージョンを厳密に指定する
次に、パッケージをインストールします。試しに beautifulsoup4
と requests
をインストールしましょう。
$ pipenv install beautifulsoup4==4.6.0 requests==2.18.4
さらに ipython
をインストールしてみましょう。pipenv install
コマンドには yarn add
コマンドと同様に --dev
オプションがあり、開発環境のみにパッケージをインストールすることができます。
$ pipenv install --dev ipython==6.2.1
ここでプロジェクトを確認すると Pipfile が自動生成されていることが分かります。なお Pipfile は TOML 形式です。そして Pipfile.lock という JSON 形式の lock ファイルも自動生成されています。
$ cat Pipfile
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"
[packages]
"beautifulsoup4" = "==4.6.0"
requests = "==2.18.4"
[dev-packages]
ipython = "==6.2.1"
作成した仮想環境でコマンドを実行するには、先頭に pipenv run
を付けます。これは Bundler の bundle exec
に相当します。
$ python -c 'from bs4 import BeautifulSoup' # pipenv run なし
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named bs4
$ pipenv run python -c 'from bs4 import BeautifulSoup' # pipenv run あり
$ ipython # pipenv run なし
pyenv: ipython: command not found
$ pipenv run ipython # pipenv run あり
Python 3.6.3 (default, Nov 8 2017, 15:19:48)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]:
あるいは pipenv shell
コマンドで仮想環境を activate することもできます。
$ pipenv shell
$ ipython
$ exit
参考
-
Pipenv: Python Dev Workflow for Humans
- 公式ドキュメント
-
How to manage your Python projects with Pipenv
- thoughtbot 社の記事