Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

はじめに

例えば 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

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした