😺

anyenv + pyenv + poetry でPythonの開発環境構築

2023/04/09に公開

4月から新しい環境になって、Pythonの環境構築があったので今後忘れないためのメモです。
未来の自分と誰かの役にたてば嬉しいです。

anyenvとは

「anyenv」は「All in one for env」と言われているオールインワンのバージョンマネージです。
nodenvやpyenv、rbenvなどenv系が色々ありますが、それらをまとめて管理することができます。

プロジェクト毎に異なるバージョンを使用したい場合に便利な*envをまとめて管理できるので優れものです。

anyenvのインストール

早速anyenvをインストールする方法です。
インストールにはgitを使用してcloneしてくるのと、Homebrewを使用してインストールする方法があります。
使用している端末に合わせて自分の好きな方法でインストールしてください。

git を使用する場合

gitを使用する場合はOSに関係なくインストールできるのが利点です。
注意点はgitがすでにインストールされている必要があるので、まだの方は先にgitをインストールする必要があります。
gitのインストール方法は調べてください。

$ git --version
  git version 2.33.0

上記コマンドを打って返ってきたらgitはインストールされています。

ホームディレクトリにanyenvのインストール
ホームディレクトリ以外に入れる場合は後ろの~/.anyenvを変更

$ git clone https://github.com/anyenv/anyenv ~/.anyenv

インストールが完了すると.anyenvディレクトリが作成されます。

このままではパスが通っていないのでパスを通します。
使用しているシェルによってパスの通し方が少し異なります。
bashかzshかどちらを使用しているかわからない人は下記コマンドを実行

$ echo $SHELL
  /bin/bash or /bin/zsh

がでてきます。

bashの場合は下記コマンドでパスを通す

bash
echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile

zshの場合

zsh
echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.zshrc

パスを通すためのコマンドを実行したらシェルの再起動を行います。

$ exec $SHELL -l

anyenvの初期化

$ anyenv init
# Load anyenv automatically by adding
# the following to ~/.bash_profile: or the following to ~/.zshrc:
# ↑ bash か zsh によってどちらかが表示されます。

eval "$(anyenv init -)"

実行後に追加で設定をいれろと指示されるので設定ファイルに追加します。
※anyenv コマンドが実行できない場合はパスが通っていない可能性があります。~/.bash_profile~/.zshrcの中に適切に記述されているか確認してください。anyenvをホームディレクトリ以外に入れた場合はパスの記述に注意してください。

bashの場合

bash
$ echo 'eval "$(anyenv init -)"' >> ~/.bash_profile

zshの場合

zsh
$ echo 'eval "$(anyenv init -)"' >> ~/.zshrc

コマンド実行後は設定を反映するために再起動

$ exec $SHELL -l

再起動後は下記コマンドを実行

$ anyenv install --init

追加入力を求められたらそのまま続行してください。
完了すればCompleted!が表示されます。

Homebrew を使用する場合

macの場合Homebrewを使用してインストールすることができます。
Homebrewを使用するとパスが通っているので手動でパスを通す必要はありません。

$ brew install anyenv

※Homebrewのインストール方法は調べてください。

anyenvの初期化

$ anyenv init
# Load anyenv automatically by adding
# the following to ~/.bash_profile: or the following to ~/.zshrc:
# ↑ bash か zsh によってどちらかが表示されます。

eval "$(anyenv init -)"

実行後に追加で設定をいれろと指示されるので設定ファイルに追加します。

bashの場合

bash
$ echo 'eval "$(anyenv init -)"' >> ~/.bash_profile

zshの場合

zsh
$ echo 'eval "$(anyenv init -)"' >> ~/.zshrc

コマンド実行後は設定を反映するために再起動

$ exec $SHELL -l

再起動後は下記コマンドを実行

$ anyenv install --init

追加入力を求められたらそのまま続行してください。
完了すればCompleted!が表示されます。

pyenvのインストール

下記コマンドでインストール可能なenvの一覧がみれます。
ここから欲しいenv系を確認します。

$ anyenv install --list

今回はpyenvをインストールします。

$ anyenv install pyenv

インストール完了後は再起動します。

$ exec $SHELL -l

インストールできるバージョンの確認

$ pyenv install --list

欲しいバージョンのPythonをインストール

$ pyenv install <version>
  例: pyenv install 3.10.0

インストールしたPythonのバージョンを確認

$ pyenv versions
  3.10.0

globalで使用するバージョンの指定

システム上で使用するバージョンを指定する必要があります。

$ pyenv global <インストール済みPythonのバージョン>
  例: pyenv global 3.10.0

$ python --version
  3.10.0

localで使用するバージョンの指定

localで使用するバージョンを設定することもできます。ローカルで設定するとカレントディレクトリに.python-versionが作成されます。.python-versionがあるディレクトリ配下のみglobalではなくlocalで指定したバージョンを使用することができます。
.python-versionを削除するとlocalでの設定は削除されます。

$ pyenv local <インストール済みPythonのバージョン>
  例: pyenv local 3.10.0

shell単位での指定

shell単位での設定も可能です。
shell単位で設定した場合、そのshellでのみ指定したバージョンが使用できます。

$ pyenv shell <インストール済みPythonのバージョン>
  例: pyenv shell 3.10.0

複数バージョンの切り替え

env系ツールは複数のバージョンを切り替えるために使用することが大半だと思います。
複数バージョンの切り替え方法です。
異なるバージョンをインストールして切り替えていきます。

$ pyenv install 3.11.0
# 先程と異なるバージョンをインストール

$ pyenv versions
* 3.10.0
  3.11.0
# グローバルで指定されているバージョンに*がつきます。

先程のバージョン(3.10.0)とは異なるバージョン(3.11.0)をインストールしました。
ここから新しいバージョン(3.11.0)に切り替えます

$ pyenv global 3.11.0

$ python --version
  3.11.0

$ pyenv versions
  3.10.0
* 3.11.0

これでPythonのバージョンの切り替えが完了です。

プロジェクト毎に切り替えたい場合は、そのプロジェクトのカレントディレクトリに移動して、localでバージョンを設定すれば、プロジェクト毎に切り替えることが可能です。

$ python --version
  3.10.0

# バージョンを変えたいプロジェクトに移動
$ cd ~/new_pj

# localでバージョンを指定
$ pyenv local 3.11.0

$ python --version
  3.11.0

poetryとは

poetryはPythonのパッケージマネーシャーの1つです。
poetryを使うことで、Pythonパッケージのインストールや更新、バージョンの切り替え、依存関係の解決を簡単かつ一貫して行うことができます。
また仮想環境の構築も行うことができます。

poetryのインストール

poetryのインストールと設定を追加

# poetry のインストール
$ curl -sSL https://install.python-poetry.org | python -

インストール完了後に設定を追加
bashの場合

bash
$ echo 'export PATH="$HOME/.poetry/bin/:$PATH"' >> ~/.bash_profile

zshの場合

zsh
$ echo 'export PATH="$HOME/.poetry/bin/:$PATH"' >> ~/.zshrc

インストール完了後は再起動します。

$ exec $SHELL -l

下記コマンドを実行して応答があればインストール完了です。

$ poetry --version

新規でプロジェクトを始める場合

新しくプロジェクトを始まる場合はpoetry newをします。

$ poetry new <pj名>

実行すると<pj名>ディレクトリが作成され、その配下にいくつかのファイルが作成されます。
その中でpyproject.tomlが設定ファイルです。

pyproject.tomlはPythonプロジェクトに関する設定ファイルで、PEP 518によって提案されたフォーマットです。このファイルは、Pythonプロジェクトで使用するツール、ライブラリ、依存関係を定義するために使用されます。
これまでsetup.pyで定義していたものを置き換えるために作成されたものです。

仮想環境のセットアップ

新規でプロジェクトを始めた場合pyproject.tomlがあるディレクトリに移動
既存のプロジェクトですでにpyproject.tomlがある場合も同様にpyproject.tomlあるディレクトリまで移動

移動後に下記コマンドを実行

$ poetry install

コマンド実行後は.venvディレクトリが作成されます。
(poetry config virtualenvs.in-project trueコマンドを実行しないと作成されないかもです。)
.venv配下にpyproject.tomlに書かれたパッケージがインストールされていきます。

プロジェクト途中でパッケージの追加を行いたい場合は

$ poetry add <パッケージ名>

を行います。

指定したパッケージのインストールだけでなく、それが依存しているパッケージも合わせてインストールしてくれます。
また追加でインストールした場合はpyproject.tomlに追加したパッケージとバージョンを自動で追記してくれます。

仮想環境で実行

poetryの仮想環境のセットアップが完了すれば、実行します。
下記コマンドで仮想環境内に入ります。
仮想環境内にはいった後に実行したいファイルを指定すると、実行することができます。

$ poetry shell
$ python <Pythonファイル>

たとえばpytestを実行したい場合は

$ poetry shell
$ pytest

となります。

poetry shellコマンドはその都度仮想環境にはいる方法ですが、毎回入るのが面倒な人は下記コマンドを実行することで、仮想環境内で実行をすることができます。

$ poetry run pytest

poetryで作成した仮想環境をVSCodeに認識させる

仮想環境をVSCodeに認識させる方法はいくつか存在しますが、今回はプロジェクト直下に仮想環境を作成した場合について(プロジェクト直下に.venvがある状態)

ctrl + , で設定を開き、python.defaultInterpreterPathを検索
そこででてきたデフォルトのPythonPathを.venv配下のPathに書き換えれば完了です。

まとめ

anyenv + pyenv + poetryでの環境構築は初めてだったので、調べながら実行していました。
PATHの通すのに手こずったり、VSCodeで仮想環境のpythonを認識させるのに時間がかかったりしました。

次回以降時間がかからないために、今回の手順をまとめました。

Discussion