前記事でpyenvとpipenvの組み合わせによるPython仮想環境の構築方法を紹介したが、pipenvと並び立つPython用仮想環境ツールとしてPoetryがある。
Python用仮想環境ツールとしてvirtualenv、pipenv、Poetryの3つが広く使われているが、最近の主流はPoetryかもしれない。
以前の記事で、UbuntuとMacを対象したpyenvとPoetryによるPython仮想環境の構築方法について書いたが、Windowsでも同様の環境を作ることができる。
本記事で、pyenvとPoetryを組み合わせたWindows上でのPython仮想環境の構築方法について紹介する。
なお、以下の内容はpyenv(pyenv-win)がインストール済みであることを前提としている(pyenvのインストール方法については前記事を参照のこと)。
Poetryのインストール
Poetryのインストールは、PowerShellから下のコマンドを実行することで行える。
> (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python -
Poetryの公式サイトではpy
コマンドを使うようになっているが、pyenv側のpython
コマンドを使っても問題ない。
上のコマンドを実行すると、Poetryの実行ファイル群はディレクトリ%APPDATA%\pypoetry
(C:\Users\USERNAME\AppData\Roaming\pypoetry
)へインストールされる。
Poetryの環境変数設定
Poetryのインストールが済んだら、ディレクトリパス%APPDATA%\Python\Scripts
(C:\Users\USERNAME\AppData\Roaming\Python\Scripts
)をユーザー環境変数Path
に追加する。
PowerShellから下のコマンドを実行すれば、その設定操作が行える。
> $oldpath = [System.Environment]::GetEnvironmentVariable("Path", "User"); $oldpath += ";%APPDATA%\Python\Scripts"; [System.Environment]::SetEnvironmentVariable("Path", $oldpath, "User")
Poetryの実行確認
上記の操作が済んだら、poetry
コマンドが実行できることを確認しておく。
> poetry --version
Poetry (version 1.7.1)
Poetryの設定変更
Poetryのvirtualenvs.in-project
という設定を以下のように変更しておく。
> poetry config virtualenvs.in-project true > poetry config --list cache-dir = "C:\\Users\\USERNAME\\AppData\\Local\\pypoetry\\Cache" experimental.system-git-client = false installer.max-workers = null installer.modern-installation = true installer.no-binary = null installer.parallel = true virtualenvs.create = true virtualenvs.in-project = true virtualenvs.options.always-copy = false virtualenvs.options.no-pip = false virtualenvs.options.no-setuptools = false virtualenvs.options.system-site-packages = false virtualenvs.path = "{cache-dir}\\virtualenvs" # C:\Users\USERNAME\AppData\Local\pypoetry\Cache\virtualenvs virtualenvs.prefer-active-python = false virtualenvs.prompt = "{project_name}-py{python_version}" warnings.export = true
この設定をしておくと、プロジェクトディレクトリ内に.venv
というディレクトリが作成され、仮想環境のPythonインタープリタおよびパッケージはその中にインストールされるようになる。
pyenv + Poetryによる仮想環境構築
プロジェクトの作成・初期化
> mkdir PROJECT_DIR > cd PROJECT_DIR > pyenv local 3.12.1 > python --version Python 3.12.1 > poetry init This command will guide you through creating your pyproject.toml config. Package name [project_dir]: Version [0.1.0]: Description []: Author [vedfolnir-k9 <vedfolnir@ketus-ix.work>, n to skip]: License []: Compatible Python versions [^3.12]: 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 Generated file [tool.poetry] name = "project-dir" version = "0.1.0" description = "" authors = ["vedfolnir-k9 <vedfolnir@ketus-ix.work>"] readme = "README.md" [tool.poetry.dependencies] python = "^3.12" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" Do you confirm generation? (yes/no) [yes]
プロンプトCompatible Python versions [^3.12]:
に対する入力は、以下のような意味になる。
^3.12
3.12 ≦ プログラムのPython依存バージョン < 4.0
>=3.8,<3.13
3.8 ≦ プログラムのPython依存バージョン ≦ 3.12
仮想環境の初期化
> poetry install Creating virtualenv project-dir in C:\Users\USERNAME\PROJECT_DIR\.venv Updating dependencies Resolving dependencies... (0.1s) Writing lock file Installing the current project: project-dir (0.1.0) The current project could not be installed: [Errno 2] No such file or directory: 'C:\\Users\\USERNAME\\PROJECT_DIR\\README.md' If you do not want to install the current project use --no-root
"No such file or directory: 'C:\\Users\\USERNAME\\PROJECT_DIR\\README.md'
" というエラーが表示されるが、これは無視しても構わない。
このエラーを回避したければ、ファイルpyproject.toml
内の以下の行を編集すれば良い。
- pyproject.toml
-readme = "README.md" +readme = ""
Poetryでのパッケージ管理
パッケージのインストール
$ poerty add PACKAGE_NAME
パッケージのアンインストール
$ poerty remove PACKAGE_NAME
開発用パッケージのインストール
$ poerty add --dev PACKAGE_NAME
開発用パッケージのアンインストール
$ poerty remove --dev PACKAGE_NAME
PoetryによるPythonプログラム実行
仮想環境によって直接プログラムを実行
> poetry run python PROGRAM.py
仮想環境を起動して、プログラムを実行
> poetry shell
> python PROGRAM.py
~~~~ ~~~~
~~~~ ~~~~
~~~~ ~~~~
~~~~ ~~~~
> exit