Python 開発環境の構成方法を考えた : pipenv のススメ
Python の開発環境をどう作ったらいいかなー、という話。
TL;DR : OS に Python3 系を入れて、プロジェクトディレクトリごとに pipenv で管理しろ。
目次
- pyenv?virtualenv?venv?
- Python v3 系を OS に直接インストールする
- パッケージ管理は pipenv を使う
- pipenv を使って新規プロジェクトの作成
- 依存モジュールをインストールしてみる
[scripts]
ブロックを使う- 既存の pipenv プロジェクトを再現するには
- 以上
pyenv?virtualenv?venv?
複数の Python のバージョンをインストールするためのバージョン管理ツール。Node.js における Nodist や Nodebrew 的なヤツ。
歴史的経緯から色んなツールが存在するが、pyenv は v2 系向けとかで、venv が現在 Python 公式に含まれてる。
- 参考 : pyenvが必要かどうかフローチャート - Qiita
- 参考 : pyenv、pyenv-virtualenv、venv、Anaconda、Pipenv。私はPipenvを使う。 - Qiita
- 参考 : 2018年のPythonプロジェクトのはじめかた - Qiita
Python v3 系を OS に直接インストールする
色々調べたけど、めんどくせーから全部無視することにする。
Python v2 系はもう使わない。Python v3 系も、v3.7 あたりが1つ入っていれば良くて、複数の Python 本体のバージョンなんか管理しなくていい。Node.js だって、v5・v6 時代はゴチャついててめんどくさかったけど、今となっては v10 以降の適当なヤツが入ってればもう問題ないし、メジャーバージョンが変わったところで適当にバージョンアップして最新版だけ使ってればいいレベルだ。Nodist も Nodebrew も別に使うことはなくなったわ。
だから v3.7 系か v3.8 系か、適当なあたりのバージョンを OS に直接インストールする。
- 公式から OS 別のインストーラを落としてきて入れる
- Windows で Chocolatey を入れていれば以下のようなコマンドで入れられる
PS1> choco install python3
(バージョン指定したい場合は--version=3.7.5
とか書けば良い)
- Windows の場合は Git SDK に同梱の Python3 でも事足りそう
- MacOS は Homebrew で入れれば良い
$ brew install python
python
と打った時に v3 系を使いたい場合は、v2 系との衝突を$ brew unlink python@2
→$ brew link python
で解消できるかと
パッケージ管理は pipenv を使う
パッケージ管理ツールは pipenv というツールを使えば良い。コレがちょうど npm のように使える。
$ pip install pipenv
コレで pipenv
をグローバルに使えるようにしておいたら、以降は pip
コマンドは使わず、pipenv
のみを使う。
次に、環境変数 PIPENV_VENV_IN_PROJECT
を指定する。コレに true
なり 1
なり値をしてしておくことで、プロジェクトディレクトリごとに仮想環境ファイルを格納できるようになる。
export PIPENV_VENV_IN_PROJECT=true
pipenv を使って新規プロジェクトの作成
それでは、pipenv を使って新規 Python プロジェクトを作成してみる。
$ mkdir python-example-project && cd $_
$ pipenv --python 3.7
使用する Python のバージョンを --python
オプションで指定するだけ。こうすると、そのディレクトリに Pipfile
というファイルができる。コレが npm における package.json
的な役割を担う。中身も読みやすいので見てみると良い。
依存モジュールをインストールしてみる
続いて pipenv を使って依存モジュールをインストールしてみる。例えば BeautifulSoup をインストールするとしたらこんな感じ。
$ pipenv install beautifulsoup4
こうすると Pipfile
に依存モジュールの情報が書かれる他、Pipfile.lock
という Lock ファイルも生成される。
[scripts]
ブロックを使う
試しに example.py
というファイルを作る。中身は適当で良い。普通に考えたら、このスクリプトは
$ python example.py
と実行して動かしたい。
コレも、pipenv を使うと、npm-run-scripts のように動かせる仕組みがある。
Pipfile を開き、以下のような行を追加する。
[scripts]
start = "python example.py"
そして、以下のようにコマンド実行すれば、npm-run-scripts のように実行できることが分かる。
$ pipenv run start
既存の pipenv プロジェクトを再現するには
ココまでは、プロジェクトを新規作成して拡張していく立場の人向けの話。ココからは、そうしたプロジェクトをローカルにクローンしてきて、開発に参加したい人の話。
プロジェクトをクローンしてきたら、以下のコマンドで npm install
同様に、依存パッケージを拾ってこられる。
$ pipenv install --dev
--dev
を付けると開発向けのパッケージも取得できるので、開発者は付けておくと良い。
以上
「Python のバージョン管理をどうしたらいいか」というお題目に対して、「そもそも Python 本体のバージョンを管理する必要があるのか」を突き付け、「Python 本体の管理は不要!パッケージ管理を pipenv で一元化しろ!」で終えた。
pipenv がかなり npm と似た使い勝手なので、Node.js 民はとっつきやすいかなーと思う。