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

Pipenvを用いたPythonの環境構築

Pipenvについての記事が少ないので、ユーザーが増えることを願って投稿します。間違っている所があれば教えて頂けると嬉しいです。

Pipenvとは

Pythonを用いたアプリケーション開発のための環境構築は
1. ライブラリ依存関係の管理
2. 仮想環境の構築

以上で分けてみるとわかりやすいです。つまり、2つのツールを使うことになりますが、それらを一つにしたのがpipenvです。

1. ライブラリ依存関係の管理

ライブラリは、依存関係というものが存在します。「aライブラリは、bライブラリを使用している。そのため、aライブラリを使いたければbライブラリのインストールが必要になる」といったものです。しかし、話はインストールすれば終わりではなく「aライブラリのバージョンを上げた。運悪くそれが原因で、bライブラリに不具合が出た(動かなくなった)。またcライブラリは、bに依存しているため、bライブラリに不具合が出るとcライブラリも不具合が出る」といったことがありえます。そのために依存関係を管理してくれるのがpipです。

2. 仮想環境の構築

プロジェクトによって「このプロジェクトではaライブラリはこのバージョンを使って、bライブラリではあのバージョンを使って」ということがあります。また、パソコンのシステムを汚したくない、ということもあるでしょう。そのために仮想環境を構築します。環境を別個に分離でき、不要になったときもディレクトリ削除でことが済みます。それを実現するのがvirtualenvです。

それらを一つのコマンドで操作したい場合に使うツールです。

実際に使ってみる

1. 仮想環境を構築

実際にコマンドを用いて、説明に入っていきます。

pipenvのインストールがすでにされているかどうか、バージョンで確認。

# 数字が出ればインストールはされています。
$ pipenv --version

もしインストールがされていなければ、以下のコマンドでインストール可能です。

# homebrewを用いた場合。
$ brew install pipenv

# pipを用いた場合。
$ pip install pipenv

実際にpipenvを使ってみましょう。何かしらディレクトリを作って、そのディレクトリ内で以下のコマンドを実行します。

# qiitaディレクトリを作成します。
$ mkdir qiita

# qiitaディレクトリに移動します。
$ cd qiita

# 仮想環境の構築(※Pipfileがあった場合には、Pipfileの内容で仮想環境を構築します)をします。
$ pipenv install

# どのようなファイルが作成されたか確認してみましょう。
$ ls

以上の作業で、PipfileとPipfile.lockが作成されました。どのような内容なのか、確認してみます。
Pipfileの中身は以下のような状態になっています。

[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"

[packages]

[dev-packages]

[requires]
python_version = "3.6"

Pipfile.lockの中身は以下のような状態になっています。

{
    "_meta": {
        "hash": {
            "sha256": "4e55147db217bb4120f6e68cb8cad7bc37011457441ce0eb9d97308315625834"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.6"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.python.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {},
    "develop": {}
}

上述のとおり、Pipfileがカレントディレクトリに無い状態で $ pipenv install コマンド実行をすると、ほぼ空っぽの状態のPipfileとPipfile.lockが作成されます。それぞれのファイルの役割ですが、

  • Pipfile => 設定ファイル
  • Pipfile.lock => インストールしたライブラリの情報

という構成になっています。 2つのファイルでpipで言う requirements.txt の代替をすると考えていただければわかりやすいでしょう。仮想環境のシェルに入ります。 .venv があるディレクトリで以下のようにコマンドを実行してください。

# シェルに入ります。
$ pipenv shell

# 仮想環境内のPythonのバージョンを確認します。
$ python --version

以上で仮想環境が使えるようになりました。

2. ライブラリ管理

次に、Pipenvを用いてライブラリの管理をしてみましょう。まずライブラリを追加してみます。ここでは、例として django を追加します。

# Djangoライブラリを追加
$ pipenv install django

Pipfile.lockがインストール済みライブラリの情報が記述されているはずなので、確認してみます。以下のようにPipfle.lockが更新されました。

{
    "_meta": {
        "hash": {
            "sha256": "e0eba63583a7777ad2aec379073e7fbabad9eb003c979b8cd4a85f63f7374a8f"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.6"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.python.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "django": {
            "hashes": [
                "sha256:26b34f4417aa38d895b6b5307177b51bc3f4d53179d8696a5c19dcb50582523c",
                "sha256:71d1a584bb4ad2b4f933d07d02c716755c1394feaac1ce61ce37843ac5401092"
            ],
            "index": "pypi",
            "version": "==2.0.5"
        },
        "pytz": {
            "hashes": [
                "sha256:65ae0c8101309c45772196b21b74c46b2e5d11b6275c45d251b150d5da334555",
                "sha256:c06425302f2cf668f1bba7a0a03f3c1d34d4ebeef2c72003da308b3947c7f749"
            ],
            "version": "==2018.4"
        }
    },
    "develop": {}
}

※djangoの依存関係にあるpytzライブラリも同時にインストールされています。

逆にアンインストール作業をするには、下記のコマンドです。ここでも、djangoをアンインストールしてみます。

$ pipenv uninstall django

ここでは割愛しますが、djangoライブラリとpytzライブラリの両方がアンインストールされていることを、Pipfile.lockを見て確認してみてください。

また、ライブラリの依存関係含め、ライブラリ全体のバージョンアップをするときは、以下のコマンドを実行します。

$ pipenv update

3. 仮想環境内でのコマンドの実行方法

基本的にrunコマンドのあとに、コマンドは実行する必要があります。具体例としては、以下のようになります。

# hoge コマンドを仮想環境内で引数 fuga をつけて実行する場合
$ pipenv run hoge fuga 

まとめ

ここまでで、仮想環境構築、ライブラリ管理、仮想環境内でのコマンド実行についてまとめました。発展的内容に関しては、公式サイトをご覧いただくのがベストです。

Pipenv公式

Why do not you register as a user and use Qiita more conveniently?
  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
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