LoginSignup
55
50

More than 5 years have passed since last update.

Pipenv で Python パッケージを管理する

Last updated at Posted at 2017-11-08

はじめに

例えば Ruby では Bundler を使って Gemfile で、Node.js では npmYarn を使って package.json でパッケージを管理できます。

同様に Python では pip を使って requirements.txt でパッケージを管理できます。しかし Gemfilepackage.json と違って機能が十分ではありません。

そこで、もっと便利なパッケージ管理方法を調べていたところ Pipfile というものを発見しました。まだ実験段階のようですが、requirements.txt より高機能で便利そうです。そして Pipenv というツールを使用することで Pipfileを取り扱うことができるようなので、試してみました。

Pipenv とは

公式ドキュメントの日本語訳 によると

Pipenv — Python.org が正式に推薦するPythonパッケージングツール、そして (自由としての) フリー。
(略)
pipenvは、手動でパッケージのインストールおよびアンインストールを行うのと同じように Pipfile に対してパッケージの追加および削除を行うのに加え、自動でプロジェクト用の仮想環境を作成し管理します。 また、pipenvはいかなるときも重要な Pipfile.lock を生成し、これは決定論的ビルドをもたらすために使われます。

とのことです。機械翻訳っぽいですね :robot:

なお Pipenv では仮想環境の作成に virtualenv を使っています。

インストール

$ pip install pipenv

使い方

任意の Python プロジェクトのディレクトリに移動しておきましょう。

$ cd pipenv-sandbox

はじめに仮想環境を作成します。このとき、virtualenv が使う Python のバージョンをオプションで指定します。

$ pipenv --three  # Python 3
$ pipenv --two  # Python 2
$ pipenv --python 3.6.3  # バージョンを厳密に指定する

次に、パッケージをインストールします。試しに beautifulsoup4requests をインストールしましょう。

$ 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

参考

55
50
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
55
50