今回はPythonの開発環境構築について書いてみる。
一応、Pythonは現在メインで使用している言語であり、様々な環境を試してみた結果、個人的に使いやすいと思った環境を紹介したい。
この記事の内容
- pyenv/pyenv-virtualenvの導入
- パッケージ管理ツールPoetryの導入
Python環境構築の前提の話
一番わかりにくいというか、混乱の原因となっているのが、Pythonの環境構築は様々な方法が存在していることだと思う。
そもそも、最もベーシックなPython環境構築としてはaptを使用した方法がある。
Ubuntu18.04LTSの場合、これは最初からインストールされていると思う。
MacOSの場合はhomebrewを使った方法だろうか (Macほとんど使ったことないのでよくわかっていない)。
|
|
OSのシステムに関連するPythonコードを実行するには特に問題はないが、自分でコードを作成する場合にこのPython環境を使用するのは適切ではない。
理由は以下の通り。
- 仮想環境を作成できないため、面倒なトラブルに陥る可能性が高い
- Pythonのバージョンを自由に変更できない
少しでもPythonを触ったことがある人ならわかると思うが、Pythonパッケージのインストール・アンインストールを繰り返していると、バージョンの依存関係が狂ってにっちもさっちも行かなくなることがある。
そのため、上記の環境に自分でパッケージをインストールすることはおすすめしない。
以上のデフォルト環境にパッケージをインストールしていくことは非常にリスクが高い。
したがって、Pythonでの開発環境には仮想環境を構築できるものが必須となる。
(仮想環境であれば、おかしくなった環境も削除してしまえばまたやり直せる。)
一番有名なのはAnacondaだと思う (私も最初はこれを使っていた)。
特にこだわりがなければ、正直Anacondaを入れておけば十分な気もする (割と本気)。
GUIで仮想環境を作れたり、パッケージをインストールできたりと色々やりやすい。
が、これだけだと記事が終わってしまうので、一応デメリットも挙げておく。
- condaコマンドだけではインストールできないパッケージも多い
- pipとconda両方で同じパッケージをインストールすると挙動が怪しくなる
- ディレクトリ毎に仮想環境を設定できない
これらの理由から、私はAnacondaを使うのをやめた。
そして私は現在はpyenvを使用している。
他にも方法はあると思うが、割と納得いく環境となっている。
(少し前まではPyTorchなどcondaを使わないと入れるのが大変なパッケージもあったが、最近はかなり減っていると感じている。)
pyenvとpyenv-virtualenvの導入
インストール
早速pyenvを導入していく。
同時に仮想環境を作成するプラグイン、pyenv-virtualenvも導入する。
まず、以下のコマンドを実行し、リポジトリをcloneする。
|
|
次に、.profileもしくは.zshenvに以下の記述を加える。
|
|
その後、ターミナルの再起動もしくはsource
コマンドで再読込をする。
以下のコマンドで、pyenvのバージョンを表示できればOK。
|
|
任意のバージョンのPythonをビルド
次に、好きなバージョンのPythonをビルドする。
ちなみにビルドできるバージョンは以下のコマンドで確認できる。
|
|
今回は例として、3.7.6をビルドしてみる。
以下のコマンドを実行する。
インストールには少し時間がかかる。
|
|
ビルド時に上記のオプションを指定しないと色々なところでハマる。
(確かOpenCVとか使うときに問題が起きた気がする。昔のことだから覚えていない…)
ビルドが完了したら、デフォルトで使用するPythonバージョンとして指定する。
pyenvには使用するPythonバージョンを指定する方法としてglobal
とlocal
の2通りの方法がある。
global
ではデフォルトとして使用するバージョンを指定でき、local
ではそのディレクトリで使用するバージョンを指定できる。
先ほどビルドした3.7.6をデフォルトのバージョンに指定する。
|
|
確認してみる。
|
|
このように表示されればOK。
仮想環境の作り方
次に仮想環境を作成していく。
作るのは非常に簡単。
先ほどビルドしたバージョン3.7.6を利用して、sample
という名前の仮想環境を作成してみる。
|
|
作成したら、この仮想環境を使用したいプロジェクトのディレクトリで以下のコマンドを実行。
|
|
これで、このディレクトリ内では仮想環境sample
を利用できるようになる。
ちなみに一時的に特定の仮想環境を使用したい場合は以下のコマンドを使えば良い。
|
|
Poetryの導入
ここからはパッケージ管理ツールのPoetryを導入していく。
Poetryはパッケージ管理ソフトであり、パッケージの依存関係管理の役割を担う。
Poetryはそれにプラスして、パッケージのビルドやパブリッシュなども行うことができる。
似たようなソフトにはPipenvやPyflowなどが存在する。
これら他のソフトは使用したことがないので比較は行わないが、Pipenvはビルドやパプリッシュなどは行うことはできない、Pyflowはより高機能でPythonバージョンの管理もできるが発展途上のため情報が少ない、という理由からPoetryを使用している。
Pythonバージョンの管理については前述のpyenv-virtualenvで実現しているため、組み合わせて使用すれば特に問題はない。
インストール方法
こちらもインストールはお手軽。
|
|
以下のコマンドでバージョンが表示されればOK。
|
|
もしpoetry
コマンドが実行できない場合は.profileもしくは.zshenvに以下の記述を加える。
|
|
コマンド補完の導入
Poetryはシェルのコマンド補完を簡単に設定することができる。
環境によって異なるが、以下のコマンドを実行するだけ。
|
|
これでコマンド補完が効くようになる。
プロジェクトの作成
Poetryはpyproject.toml
とpoetry.lock
の2つのファイルでプロジェクトを管理している。
このうち、実際に操作するのはpyproject.toml
のみで、poetry.lock
については適宜自動で更新される。
まずはプロジェクトを作成したいディレクトリで以下のコマンドを実行する。
|
|
すると、対話形式でプロジェクトの設定を聞かれるので、順番に入力していく。
- Package name : パッケージの名前
- Version : バージョン
- Description : パッケージの概要
- Author : 開発者名
- License : ライセンス
- Compatible Python versions : Pythonのバージョン
その後、依存パッケージのインストールについて聞かれるが、今は設定する必要がないので、2回No
と答える。
最後にDo you confirm generation?
と確認されるので、Yes
と答える。
これでプロジェクトが出来上がった。
パッケージのインストール
プロジェクトにパッケージをインストールしていく。
このとき、pyenv local
で仮想環境に切り替えておくと、その仮想環境にパッケージがインストールされる。
パッケージのインストールは以下のコマンドを実行すれば良い。
|
|
上記コマンドでパッケージをインストールすると、pyproject.toml
にもそのパッケージが追加される。
その際、インストールしたパッケージのバージョンや依存パッケージのバージョンなどがpoetry.lock
に自動で記載される。
これにより、自分で利用するために明示的にインストールしたパッケージと2次的にインストールされた依存パッケージなどをわけて管理できている。
そのため、アンインストールしたい場合は以下のコマンドを実行すると、その依存パッケージも含めてアンインストールされる。
|
|
また、Poetryで管理されているプロジェクト(pyproject.toml
とpoetry.lock
が含まれているディレクトリ)を外部から取得した場合、以下のコマンドを実行することで必要なパッケージをまとめてインストールできる。
|
|
これでPoetryの基本的な使い方は一通り説明した。
パッケージをPyPIなどに公開する際のビルドやパブリッシュなどもPoetryから行えるが、このあたりの話は後日別途紹介したい。
まとめ
今回の記事では、pyenv/pyenv-virtualenvとPoetryを使ったPython開発環境構築について説明した。
パッケージの公開に関する話やエディタ環境に関する話には触れることができなかったので、別途記事を書きたいと思っている。