Python環境構築
WIP
Python環境構築まとめ
TL;DR
- python3系以上 + pyenv + pipenv
- anacondaは使わない
- pipxも使わない
はじめに
Pythonで環境を作るときの個人的ベストプラクティスです。
より良いやり方が分かり次第、アップデートして行きたいです。
コメント、ご意見等お待ちしております。
この記事で扱わない内容
- pythonそのもの機能など
- 開発用ツール(エディタ、IDE等)
ゆくゆくは扱いたい内容(今はない)
- poetry
- docker等による低レイヤでの環境構築
概要
- python 3系以降 (3.7以降で実証)
- pyenv
- pipenv
その他
- Ubuntu20.04 or Ubuntu20.04(WSL2)
各要素の説明
python
2系はサポートが終了しているので、今から新たに始めるプロジェクトでは3系を使いましょう。
python3系のリリース状況、サポート期間については、公式サイトを確認しましょう。
pyenv
pythonのversionを管理してくれるツールです。同一のPCの中に異なるversionのpythonを同居させるときに使います。ディレクトリごとにどのversionのpythonを使うかを指定できます。この機能は、具体的にはshim
というライブラリによってpathを透過的に書き換えることで実現されています。
pyenvをインストールするには、pyenvを直接インストールする方法とanyenvというツールを使う方法があります。python以外の言語でも~env系のバージョン管理ツールを使用する方はanyenvを導入し、そこから様々なバージョン管理ツールを導入すると楽です。(anyenvは必須ではありません。必要になったときに個別にパッケージ管理ツールを導入すれば同じです。)
pipenv
pythonの仮想環境作成,パッケージ管理をしてくれるツールです。
pyenvでpythonを導入しただけだと、同じversionのpythonでは、同じpipを使うことになります。すると、これらのプロジェクト間ではパッケージが共通になってしまいます。このため、プロジェクト間で異なるversionのパッケージを使い分けることが難しくなります。また、そもそもそのプロジェクトでは使わないパッケージがrequirements.txtに含まれることになります。
pipenvは高機能なpipのようなツールです。pipenvを使用すると、プロジェクトごとの実行環境を作成し、そのプロジェクトに必要なパッケージのみをインストールすることができます。
また、その他の細かい機能としては、プロジェクトごとの環境変数ファイル.env
を実行時に自動でロードしてくれたり、開発時にのみ使うパッケージと本番環境でも使用するパッケージの区別等があります。
pyenvとの違いですが、pyenvで異なるversionのpythonをインストールし、そのうえでpipenvでプロジェクトごとに異なる環境を用意するイメージです。
使わないとしているツールについて
anaconda
anacondaは、pythonのversion管理やパッケージの管理、仮想環境作成までを統合的に行ってくれます。pythonパッケージでないライブラリ等の環境についても管理してくれます。
非常に便利ですが、
- 管理する範囲が広すぎる (globalに環境を破壊しうる)
- 権限が強すぎる (globalに環境を破壊しうる)
- ディレクトリごとの切り替えができない (globalに環境を破壊しうる)
- 他のツール(pyenv, pip, pipenv)と共存できない
といった点で、複数のプロジェクトで異なるversionのpythonを利用しているような環境下では、個人的にはあまり使いたくありません。このような環境で、anacondaレベルでの管理が必要になった場合は、むしろdockerを利用した方がメリットが大きいように感じます。
逆に、python version の切り替えがあまり無く、導入が大変なパッケージやライブラリ(例えばビルドが必要になるライブラリ)を利用するようなユースケースでは真価を発揮するように感じます。
pipx
pipexはglobalに使用しがちなツールを、プロジェクトをまたいでglobalにインストールしてくれるツールです。
pipxを使用したくなるシーンとしては、例えばjupyterが挙げられます。なんとなくデータの中身を触りたいようなプロジェクトで、プロジェクトに直接jupyterをインストールすることなく利用できるのは魅力的です。
しかし、pipx環境中で使われるパッケージ群は、pipx環境内で閉じているため、プロジェクト内で使用しているライブラリのバージョンと差異が生じることがあります。また、自分が使用している時には、まれにpyenvとの同居が上手くいかないケースが見受けられました。
こうしたことから、個人的には、pipxを用いずにプロジェクトに直接インストールするようにしています。
実際の手順
pyenv(anyenv) + pipenv という環境を作る手順です。
- anyenvのインストール
- pyenvのインストール
- pipenvのインストール
pyenvのインストールから始めます。(この段階でpythonは必要ありません)
wip
Discussion