🐰

【図解】作業が倍速!pipenvの使い方【Python】

15 min read

Python を使っていると、次のようなことに悩まされませんか。

悩み ① Python3.6 を使っているけれど、Python3.8 も同時に使いたい...
⏩ 環境の使い分けが難しい
悩み ② パッケージをたくさん入れすぎて、もう何がなんだが分からない...
⏩ パッケージの管理が大変

遅かれ早かれ、Python 使いならこの問題には必ずぶち当たる日が来ます。これらの悩みは pipenv を使うことで解決することができます。

今回は、今注目されている pipenv の使い方とイメージを図解して解説します。


Python の基礎を本にまとめています。併せてご覧いただけるととても嬉しいです ↓

https://zenn.dev/nekoallergy/books/python-basic
DeepLearning の基礎を本にまとめています。手に取って頂けるととても喜びます ↓
https://zenn.dev/nekoallergy/books/904df952389317



Created by NekoAllergy

pipenv ってなに?

pipenv とは、Python のパッケージ管理と仮想環境の構築を簡単に、自動で行ってくれる便利なツールです.pipvirtualenv の 2 つがセットになって使いやすくなったと考えれば、分かりやすいです。

【参考】pip って?

python を使ったことがある方ならパッケージを入れる際に pip install 〇〇 というコマンドを使ったことがあるでしょう。pip はパッケージのインストールや管理などができるツール(パッケージ)です。

【参考】virtualenv って?

仮想環境を作りたいなら virtualenv を使えば対応できます。異なるバージョンの Python を同時に入れたり、使い終わった環境をすぐに削除したりすることができます。

環境を分けると何が嬉しいの?

作業環境を分けると、いいことがたくさんあります。

もし環境を分けないと,,

もし環境を分けないと、次のようなことが起こってしまいます。

🌀 起こってしまうかも

  • Python3.8 が使いたいから、今使ってる Python3.6 を一旦消さなきゃ...
  • Python を使って機械学習をしているけど、Web アプリ開発もしてみたい...
  • 変なパッケージを入れてしまって、今までのプログラムが動かなくなっちゃった...
  • 先輩の PC では動いているのに、自分の PC では動かない。どこで間違えたんだ...
pipenv で環境を分けると,,

一方で、pipenv を使うと、このような問題をスマートに解決できます。

✅ pipenv を使うと

  • Python3.6 と Python3.8 を同時に入れて、行き来して動作を確かめよう!
  • 機械学習をする専用の環境と、Web アプリ開発専用の環境を分けて作ろう!
  • 試してみたいパッケージは使い捨ての環境を用意して、使い終わったらすぐ消そう!
  • 自分が作ったこの環境を、チームメンバーに配布しよう!


pipenv のインストール

pipenv のインストールは pip から行えます。

pipenv のインストール
pip install pipenv

これで、pipenvが使えるようになりました。

今回作る環境のイメージ

今回は 以下の 2 つの環境を作ってみます。 pipenv の使い方をなんとなく理解することを目標にしています。

環境 A : 機械学習ができる環境
環境 B : Web バックエンド開発ができる環境


今回作る環境のイメージ


pipenv の仮想環境は、1 つのフォルダに 1 つの環境が対応しています。今回の例では、ProjectA というフォルダに機械学習の環境が対応しています。ProjectB というフォルダに Web 開発の環境が対応しています。


1 つのフォルダに 1 つの環境が対応している

PipfilePipfile.lockについては、このあと説明します。

【環境 A】 機械学習の環境を作ろう

まずは、機械学習をするための仮想環境を作ってみます。

現在の状態は、以下の図のようなイメージです。まだ何もありません。

この状態から、pipenv を使って、仮想環境を作る & パッケージをインストールします。
最終的には以下のような構成になります。


最終的なファイル構成 と 環境の完成イメージ図

なお、作成する 4 つのファイルは以下の役割を持っています。


ファイルの役割

以下のような流れで進めます。

環境構築の手順

Step01 : 入れたいパッケージを requiremenets.txt に書く
Step02 : 仮想環境を生成(初期化)する
Step03 : 仮想環境にパッケージをインストールする
Step04 : 仮想環境の中に入る
Step05 : Python のプログラムを実行する


環境構築の手順

ひとつずつ順を追って解説します。

Step01 requiremenets.txt に入れたいパッケージを書く

Desktop に ProjectA というフォルダを作って、その中に requiremenets.txt を作ります。Desktop じゃなくてもいいですが、分かりやすいので今回はそうしています。

ProjectAフォルダを作る
~/Desktop $ mkdir ProjectA
~/Desktop $ cd ProjectA
requirements.txtを作る
~/Desktop/ProjectA $ touch requirements.txt
~/Desktop/ProjectA $ ls
requirements.txt

今回は機械学習の環境を作りたいので、機械学習に必要なパッケージを requiremenets.txt に書いておきます。以下のように好きなパッケージを書いてください。

requirements.txt
numpy
scipy
pandas
matplotlib
sklearn

これで前準備は完了です。


Step02 仮想環境を生成(初期化)する


pipenv を使って仮想環境を作っていきます。

ターミナルで以下のコマンドを実行すると、仮想環境を作ることができます。
3.6の部分は python のバージョンです。お好きなバージョンを入れてみてください。

仮想環境を生成
pipenv --python 3.6

このコマンドを実行すると、Pipfile というファイルが自動生成されます。Pipfile仮想環境の「設計図」 です。テキストエディタなどで中をのぞいてみれば分かりますが、Python のバージョンやインストールしたパッケージなどがここに書き込まれます。このPipfileファイルをもとに、他の PC に今作った環境を再現することができます。


Step03 仮想環境にパッケージをインストールする

環境はできましたが、まだパッケージが入っていません。パッケージを環境の中にインストールするために、下記のコマンドを実行しましょう。この時インストールされるのは、さっき requirements.txt に書いたパッケージです。

仮想環境にパッケージをインストール
pipenv install -r requirements.txt

また、このコマンドを実行すると、新しくPipfile.lock というファイルが自動生成されます。Pipfile.lockには、実際にインストールしたパッケージの詳細なバージョンや依存パッケージの情報などが自動で記録されます。このPipfile.lockファイルをもとに、他の PC に今作った環境を再現することもできます。


【補足】このパッケージは環境を破壊しません

pipenv installコマンドでインストールしたパッケージは、ローカル PC の環境には影響しません。完全に分離されているため、ローカルの環境を汚すこともないし、使い終わったら環境ごと削除することもできます。

試しに pip listコマンドでパッケージ一覧を表示してみてください。今インストールしたパッケージたちは入っていないはずです。(もともとローカル環境にインストールされているなら別です)

pipenv installコマンドでインストールしたパッケージは、仮想環境の中でのみ使えます。次の STEP で環境の中に入ってみましょう。


Step04 仮想環境の中に入る

下記のようにpipenv shellコマンドを実行すると、仮想環境の中に入ることができます。

仮想環境の中に入る
~/Desktop/ProjectA $ pipenv shell
(ProjectA)のように、ディレクトリの名前が仮想環境の名前になる
(ProjectA) ~/Desktop/ProjectA $
仮想環境の中で `pip list` を使うと?

仮想環境の中に入った状態で、pip listを使うと、仮想環境の中で使えるパッケージの一覧が表示されます。

インストール済みのパッケージを確認
(ProjectA) ~/Desktop/ProjectA $ pip list
Package                           Version
--------------------------------- ---------
backports.entry-points-selectable 1.1.0
certifi                           2021.5.30
cycler                            0.10.0
distlib                           0.3.3
filelock                          3.3.0
importlib-metadata                4.8.1
importlib-resources               5.2.2
joblib                            1.1.0
kiwisolver                        1.3.2
matplotlib                        3.4.3
numpy                             1.21.2
pandas                            1.3.3
Pillow                            8.4.0
pip                               21.3
pipenv                            2021.5.29
platformdirs                      2.4.0
pyparsing                         2.4.7
python-dateutil                   2.8.2
pytz                              2021.3
scikit-learn                      1.0
scipy                             1.7.1
setuptools                        39.0.1
six                               1.16.0
sklearn                           0.0
threadpoolctl                     3.0.0
typing-extensions                 3.10.0.2
virtualenv                        20.8.1
virtualenv-clone                  0.5.7
wheel                             0.37.0
zipp                              3.6.0

requirements.txt に書いたパッケージが正しくインストールされていることが確認できます。環境の中に入った状態でコマンドを打つことに注意してください。

仮想環境の外で `pip list` を使うと?

仮想環境の外に出るためには、exit コマンドを実行します。

仮想環境の外に出る
(ProjectA) ~/Desktop/ProjectA $ exit

仮想環境に入っていない状態で、pip listを使ってみましょう。

~/Desktop/ProjectA $ pip list

今インストールしたパッケージたちは入っていないはずです。(もともとローカル環境にインストールされているパッケージが表示されます。)


Step05 Python のプログラムを実行する

環境ができて、パッケージを入れることができたので、あとはプログラムが正しく動くか確認です。以下の機械学習プログラムを作成して実行してみます。

プログラム
my_ml_code.py
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from sklearn import datasets
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split

# Load datasets
iris = datasets.load_iris()

# Load as pandas.DataFrame
df_iris = pd.DataFrame(data=iris.data, columns=iris.feature_names)

# Add target
df_iris['target'] = iris.target

print(df_iris)

# Split the dataset
data_train, data_test, target_train, target_test = train_test_split(
    iris.data, iris.target, test_size=0.2, random_state=0)

# Define Neural Neowork model
clf = MLPClassifier(hidden_layer_sizes=10, activation='relu',
                    solver='adam', max_iter=1000)

# Lerning model
clf.fit(data_train, target_train)

# Calculate prediction accuracy
print(clf.score(data_train, target_train))

# Predict test data
print(clf.predict(data_test))

# Show loss curve
plt.plot(clf.loss_curve_)
plt.title("Loss Curve")
plt.xlabel("Iteration")
plt.ylabel("Loss")
plt.grid()
plt.show()

エラーなくプログラムが通れば、成功です。


【補足】パッケージを追加したい

追加したいパッケージがあればpipenv install 〇〇でインストールできます。このコマンドは、仮想環境に入った後でも同じように実行できます。

パッケージを追加する
~/Desktop/ProjectA $ pipenv install seaborn
【補足】仮想環境から出たい

仮想環境の外に出るためには、exit コマンドを実行します。

仮想環境から出る
(ProjectA) ~/Desktop/ProjectA $ exit

出た後は、コマンドラインの最初に(ProjectA)という表記がなくなっていると思います。試しにpip listを実行してみると今インストールしたパッケージたちは入っていないはずです。(もともとローカル環境にインストールされているなら別です)

pip listでパッケージを表示
~/Desktop/ProjectA $ pip list
【補足】仮想環境を消したい

pipenv で作った機械学習の環境は、簡単に削除することができます。下記のようにpipenv --rmコマンドを打つと、ProjectA ディレクトリに対応している環境が削除されます。

仮想環境を消す
~/Desktop/ProjectA $ pipenv --rm

【環境 B】 Web バックエンド開発の環境を作ろう

続いて、簡単な Web 開発の環境を作ってみます。やることはほとんど一緒で、変わるのは python のバージョンと requirements.txt に書くパッケージくらいです。さっき作った機械学習の環境の中にまだいる場合は、exit コマンドを実行して、仮想環境の外に出てください。

ProjectAの仮想環境から出る
(ProjectA) ~/Desktop/ProjectA $ exit

現在の状態は、以下の図のようなイメージです。


現在のファイル構成と環境のイメージ

この状態から、pipenv を使って、仮想環境を作る & パッケージをインストールします。
最終的には以下のような構成になります。


最終的なファイル構成と環境のイメージ

さっきと同様に、以下のような流れで進めます。

Step01 : 入れたいパッケージを requiremenets.txt に書く
Step02 : 仮想環境を生成(初期化)する
Step03 : 仮想環境にパッケージをインストールする
Step04 : 仮想環境の中に入る
Step05 : Python のプログラムを実行する

Step01 requiremenets.txt に入れたいパッケージを書く

Destop に ProjectB というフォルダを作って、その中に requiremenets.txt を作ります。

ProjectBフォルダを作る
~/Desktop $ mkdir ProjectB
~/Desktop $ cd ProjectB
requirements.txtを作る
~/Desktop/ProjectB $ touch requirements.txt
~/Desktop/ProjectB $ ls
requirements.txt

今回は Web バックエンド開発の環境を作りたいので、Web 開発に必要なパッケージを requiremenets.txt に書いておきます。以下のように好きなパッケージを書いてください。

requirements.txt
numpy
flask

Step02 仮想環境を生成(初期化)する

ターミナルで以下のコマンドを実行すると、仮想環境を作ることができます。
python のバージョンはお好きなバージョンを入れてみてください。今回は 3.8 を入れました。pipenv を使うと、環境ごとに python の状態も変えることができるので便利です。

仮想環境を生成
pipenv --python 3.8

このコマンドを実行すると、Pipfile というファイルが自動生成されます。


Step03 仮想環境にパッケージをインストールする

環境はできましたが、まだパッケージが入っていません。パッケージを環境の中にインストールするために、下記のコマンドを実行しましょう。この時インストールされるのは、さっき requirements.txt に書いたパッケージです。

仮想環境にパッケージをインストール
pipenv install -r requirements.txt

このコマンドを実行すると、新しくPipfile.lock というファイルが自動生成されます。


Step04 仮想環境の中に入る

下記のようにpipenv shellコマンドを実行すると、仮想環境の中に入ることができます。

仮想環境の中に入る
~/Desktop/ProjectB $ pipenv shell
(ProjectB)のように、ディレクトリの名前が仮想環境の名前になる
(ProjectB) ~/Desktop/ProjectB $

Step05 Python のプログラムを実行する

以下のプログラムを実行して、ローカルサーバを立ち上げてみましょう。

プログラム
sample.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    name = "Hello World"
    return name

@app.route('/good')
def good():
    name = "Good"
    return name

## おまじない
if __name__ == "__main__":
    app.run(debug=True)

エラーなくサーバが起動したら、http://localhost:5000/ にアクセスしてみましょう。
Hello Worldの文字が表示されたら成功です。

まとめ

今回は pipenv の使い方とイメージを図解で解説しました。

  1. pipenv を使うと、仮想環境の構築が簡単にできる
  2. pipenv を使うと、パッケージの管理が簡単にできる
  3. 環境を分けることで、それぞれの環境をスマートに管理できる などのメリットがある

また、今回は詳しく紹介しませんでしたが、以下のようなことも可能です。

  1. PipfilePipfle.lockを使うことで、環境を再現できる
  2. 開発時だけ使うパッケージを設定できる
【補足】pip でインストールしたパッケージを全て削除する方法

pipenv が使えれば、環境やパッケージを自由に 作る&消す ができます。
ローカル PC にパッケージがたくさんインストールされているのは、ややこしいので、私は全て削除しました。

pipでインストールしたパッケージを全て削除
pip freeze > piplist.txt
sudo pip uninstall -r piplist.txt

消していいか聞かれるので、全部 Y で実行します。実行は自己責任でお願いします。
その後、pip listで確認すると、今までインストールしたパッケージがなくなっています。

pip listで確認した結果
%pip list
Package    Version
---------- -------
pip        21.2.4
setuptools 39.0.1

その後、pipenv だけを入れます。これさえ入れとけば、必要なパッケージを使いたい環境で必要な分だけ入れることができます。

pipenvのインストール
pip install pipenv
最終的なpipの環境
%pip list
Package                           Version
--------------------------------- ---------
backports.entry-points-selectable 1.1.0
certifi                           2021.5.30
distlib                           0.3.3
filelock                          3.3.0
importlib-metadata                4.8.1
importlib-resources               5.2.2
pip                               21.2.4
pipenv                            2021.5.29
platformdirs                      2.4.0
setuptools                        39.0.1
six                               1.16.0
typing-extensions                 3.10.0.2
virtualenv                        20.8.1
virtualenv-clone                  0.5.7
zipp                              3.6.0

これで PC の環境が超スッキリしました。とっても快適です。


機械学習をもっと詳しく

Python の基礎を本にまとめています。併せてご覧いただけるととても嬉しいです ↓

https://zenn.dev/nekoallergy/books/python-basic
DeepLearning の基礎を本にまとめています。手に取って頂けるととても喜びます ↓
https://zenn.dev/nekoallergy/books/904df952389317


ねこアレルギーのAI

ねこアレルギーの AI
YouTube で機械学習について発信しています。お時間ある方は覗いていただけると喜びます。





Created by NekoAllergy

Discussion

ログインするとコメントできます