開発では複数のpythonのバージョンを使い分けられると便利.また,各pythonバージョンごとにpipでインストールするモジュールもプロジェクトごとに分けられると便利である.
pythonのバージョンの使い分けにはpyenvを使用する.
インストールするモジュールの使い分けにはpoetryを使用する.
環境構築の準備
pyenv, poetry自体をインストールする.
pyenvのinstall
pyenvの公式ページのインストール手順に従う.
今回はWSL Ubuntu上に構築するので,手順はLinux(Ubuntu)+Bashのものを参照している.
$ curl -fsSL https://pyenv.run | bash
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init - bash)"' >> ~/.bashrc
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
$ echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
$ echo 'eval "$(pyenv init - bash)"' >> ~/.profile
$ exec "$SHELL"
pathが通っていること確認
$ pyenv versions
* system (set by /home/harib/.pyenv/version)
$ sudo apt update; sudo apt install build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl git \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
poetryのinstall
詳細はpoetryのインストール・基本的な使い方を参照.
$ curl -sSL https://install.python-poetry.org | python3 -
$ exec "$SHELL"
環境構築
pyenv, poetryを使って開発に必要なものをそろえる.
pyenvでpythonのバージョンを指定
現在install済みのpythonを確認する場合
$ pyenv versions
install可能なバージョン一覧を表示する場合
$ pyenv install -l
# anacondaとかを除外し,3.~だけ表示したい場合の例
$ pyenv install -l | grep -E "^ *3"
特定のバージョンをinstallする例(3番目のマイナーバージョンを省くと最新のものが指定される).
$ pyenv install 3.10
使用するpythonバージョンの指定
特定のバージョンに切り替える.以下の3つを用途に合わせて使い分けるが,プロジェクトのディレクトリごとに開発環境を分けるならpyenv localがよい.
pyenv shell <version>
: 現在のシェル内でのみ有効pyenv local <version>
: 現在のディレクトリ内(サブディレクトリ含む)でのみ有効pyenv global <version>
: 現在のユーザーアカウントで有効
# pyenv localの後のバージョンはtab補完で表示できる
$ pyenv local 3.10.16
# 確認
$ python --version
Python 3.10.16
poetryの設定ファイル作成
まずプロジェクト用のディレクトリを作成し,pythonバージョンを指定する.
$ mkdir sample_proj
$ cd sample_proj/
$ pyenv local 3.10.16
poetryでプロジェクト設定ファイルを作成する.
以下の例はpythonのバージョン指定だけ設定している.
$ poetry init
Package name [sample_proj]:
Version [0.1.0]:
Description []:
Author [haribote-prog, n to skip]:
License []:
Compatible Python versions [^3.12]: 3.10.*
Would you like to define your main dependencies interactively? (yes/no) [yes] no
Would you like to define your development dependencies interactively? (yes/no) [yes] no
Do you confirm generation? (yes/no) [yes] yes
デフォルトのpackageモードをoperatingモードに変えるために,生成されたpyproject.tomlファイルに赤字部分を追加する.
[tool.poetry]
name = "sample-proj"
version = "0.1.0"
description = ""
authors = ["haribote-prog"]
readme = "README.md"
package-mode = false
[tool.poetry.dependencies]
python = "3.10.*"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
以下のようにpoetryのpythonの参照先が間違っている場合(以下はバージョンが3.12になっている)は修正を行う.
$ poetry env info
Virtualenv
Python: 3.12.3
Implementation: CPython
Path: NA
Executable: NA
Base
Platform: linux
OS: posix
Python: 3.12.3
Path: /usr
Executable: /usr/bin/python3.12
poetryのプロジェクト情報をpoetry envコマンドで修正
$ poetry env use 3.10.16
Creating virtualenv sample-proj-nT50-1kP-py3.10 in /home/harib/.cache/pypoetry/virtualenvs
Using virtualenv: /home/harib/.cache/pypoetry/virtualenvs/sample-proj-nT50-1kP-py3.10
$ poetry env info
Virtualenv
Python: 3.10.16
Implementation: CPython
Path: /home/harib/.cache/pypoetry/virtualenvs/sample-proj-nT50-1kP-py3.10
Executable: /home/harib/.cache/pypoetry/virtualenvs/sample-proj-nT50-1kP-py3.10/bin/python
Valid: True
Base
Platform: linux
OS: posix
Python: 3.10.16
Path: /home/harib/.pyenv/versions/3.10.16
Executable: /home/harib/.pyenv/versions/3.10.16/bin/python3.10
モジュールの追加の例
$ poetry add pandas
# 開発時のみ必要なときはdevグループに追加
$ poetry add jupyterlab --group dev
最終的に以下のようなpyproject.tomlファイルが生成される.
$ cat pyproject.toml
[tool.poetry]
name = "sample-proj"
version = "0.1.0"
description = ""
authors = ["haribote-prog"]
readme = "README.md"
package-mode = false
[tool.poetry.dependencies]
python = "3.10.*"
pandas = "^2.2.3"
[tool.poetry.group.dev.dependencies]
jupyterlab = "^4.3.5"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
開発時
poetry addをした環境でない場合はモジュールをinstallする.
このときもエラーが出るようであれば,上のpoetry envコマンドで設定を行うこと.
$ poetry install
特定のpythonファイルを実行するだけのときは以下のコマンドを叩く.
$ poetry run python <実行したいpythonファイル>
仮想環境に入って作業する場合は以下の2つの方法がある.
# 仮想環境に入る
$ poetry shell
# 色々実行できる
$ python --version
Python 3.10.16
$ jupyter-lab --no-browser
# 仮想環境から抜ける
$ exit
または
# 仮想環境に入る
$ source $(poetry env info --path)/bin/activate
# 仮想環境から抜ける
$ deactivate
コメント