【図解】作業が倍速!pipenvの使い方【Python】
Python を使っていると、次のようなことに悩まされませんか。
遅かれ早かれ、Python 使いならこの問題には必ずぶち当たる日が来ます。これらの悩みは pipenv を使うことで解決することができます。
今回は、今注目されている pipenv の使い方とイメージを図解して解説します。
Python の基礎を本にまとめています。併せてご覧いただけるととても嬉しいです ↓
DeepLearning の基礎を本にまとめています。手に取って頂けるととても喜びます ↓
Created by NekoAllergy
pipenv ってなに?
pipenv とは、Python のパッケージ管理と仮想環境の構築を簡単に、自動で行ってくれる便利なツールです.pip
と virtualenv
の 2 つがセットになって使いやすくなったと考えれば、分かりやすいです。
【参考】pip って?
python を使ったことがある方ならパッケージを入れる際に pip install 〇〇
というコマンドを使ったことがあるでしょう。pip
はパッケージのインストールや管理などができるツール(パッケージ)です。
【参考】virtualenv って?
仮想環境を作りたいなら virtualenv
を使えば対応できます。異なるバージョンの Python を同時に入れたり、使い終わった環境をすぐに削除したりすることができます。
環境を分けると何が嬉しいの?
作業環境を分けると、いいことがたくさんあります。
もし環境を分けないと,,
もし環境を分けないと、次のようなことが起こってしまいます。
pipenv で環境を分けると,,
一方で、pipenv を使うと、このような問題をスマートに解決できます。
pipenv のインストール
pipenv のインストールは pip から行えます。
pip install pipenv
これで、pipenv
が使えるようになりました。
今回作る環境のイメージ
今回は 以下の 2 つの環境を作ってみます。 pipenv の使い方をなんとなく理解することを目標にしています。
環境 A : 機械学習ができる環境
環境 B : Web バックエンド開発ができる環境
今回作る環境のイメージ
pipenv の仮想環境は、1 つのフォルダに 1 つの環境が対応しています。今回の例では、ProjectA というフォルダに機械学習の環境が対応しています。ProjectB というフォルダに Web 開発の環境が対応しています。
1 つのフォルダに 1 つの環境が対応している
※Pipfile
とPipfile.lock
については、このあと説明します。
【環境 A】 機械学習の環境を作ろう
まずは、機械学習をするための仮想環境を作ってみます。
現在の状態は、以下の図のようなイメージです。まだ何もありません。
この状態から、pipenv を使って、仮想環境を作る & パッケージをインストールします。
最終的には以下のような構成になります。
最終的なファイル構成 と 環境の完成イメージ図
なお、作成する 4 つのファイルは以下の役割を持っています。
ファイルの役割
以下のような流れで進めます。
環境構築の手順
ひとつずつ順を追って解説します。
Step01 requiremenets.txt に入れたいパッケージを書く
Desktop に ProjectA
というフォルダを作って、その中に requiremenets.txt
を作ります。Desktop じゃなくてもいいですが、分かりやすいので今回はそうしています。
~/Desktop $ mkdir ProjectA
~/Desktop $ cd ProjectA
~/Desktop/ProjectA $ touch requirements.txt
~/Desktop/ProjectA $ ls
requirements.txt
今回は機械学習の環境を作りたいので、機械学習に必要なパッケージを requiremenets.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) ~/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 のプログラムを実行する
環境ができて、パッケージを入れることができたので、あとはプログラムが正しく動くか確認です。以下の機械学習プログラムを作成して実行してみます。
プログラム
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
を実行してみると今インストールしたパッケージたちは入っていないはずです。(もともとローカル環境にインストールされているなら別です)
~/Desktop/ProjectA $ pip list
【補足】仮想環境を消したい
pipenv で作った機械学習の環境は、簡単に削除することができます。下記のようにpipenv --rm
コマンドを打つと、ProjectA ディレクトリに対応している環境が削除されます。
~/Desktop/ProjectA $ pipenv --rm
【環境 B】 Web バックエンド開発の環境を作ろう
続いて、簡単な Web 開発の環境を作ってみます。やることはほとんど一緒で、変わるのは python のバージョンと requirements.txt に書くパッケージくらいです。さっき作った機械学習の環境の中にまだいる場合は、exit
コマンドを実行して、仮想環境の外に出てください。
(ProjectA) ~/Desktop/ProjectA $ exit
現在の状態は、以下の図のようなイメージです。
現在のファイル構成と環境のイメージ
この状態から、pipenv を使って、仮想環境を作る & パッケージをインストールします。
最終的には以下のような構成になります。
最終的なファイル構成と環境のイメージ
さっきと同様に、以下のような流れで進めます。
Step01 requiremenets.txt に入れたいパッケージを書く
Destop に ProjectB というフォルダを作って、その中に requiremenets.txt を作ります。
~/Desktop $ mkdir ProjectB
~/Desktop $ cd ProjectB
~/Desktop/ProjectB $ touch requirements.txt
~/Desktop/ProjectB $ ls
requirements.txt
今回は Web バックエンド開発の環境を作りたいので、Web 開発に必要なパッケージを requiremenets.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) ~/Desktop/ProjectB $
Step05 Python のプログラムを実行する
以下のプログラムを実行して、ローカルサーバを立ち上げてみましょう。
プログラム
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 の使い方とイメージを図解で解説しました。
また、今回は詳しく紹介しませんでしたが、以下のようなことも可能です。
【補足】pip でインストールしたパッケージを全て削除する方法
pipenv が使えれば、環境やパッケージを自由に 作る&消す ができます。
ローカル PC にパッケージがたくさんインストールされているのは、ややこしいので、私は全て削除しました。
pip freeze > piplist.txt
sudo pip uninstall -r piplist.txt
消していいか聞かれるので、全部 Y で実行します。実行は自己責任でお願いします。
その後、pip list
で確認すると、今までインストールしたパッケージがなくなっています。
%pip list
Package Version
---------- -------
pip 21.2.4
setuptools 39.0.1
その後、pipenv だけを入れます。これさえ入れとけば、必要なパッケージを使いたい環境で必要な分だけ入れることができます。
pip install pipenv
%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 の基礎を本にまとめています。併せてご覧いただけるととても嬉しいです ↓
DeepLearning の基礎を本にまとめています。手に取って頂けるととても喜びます ↓ねこアレルギーの AI
YouTube で機械学習について発信しています。お時間ある方は覗いていただけると喜びます。
Created by NekoAllergy
Discussion