ヴェズルフェルニルの研究ノート

座右の銘「ただ一人犀の角のように歩め」的な研究活動ノート

【Windows】pyenv + PoetryによるPython仮想環境構築

前記事でpyenvとpipenvの組み合わせによるPython仮想環境の構築方法を紹介したが、pipenvと並び立つPython用仮想環境ツールとしてPoetryがある。

blog.ketus-ix.work

Python用仮想環境ツールとしてvirtualenv、pipenv、Poetryの3つが広く使われているが、最近の主流はPoetryかもしれない。

python-poetry.org

以前の記事で、UbuntuMacを対象したpyenvとPoetryによるPython仮想環境の構築方法について書いたが、Windowsでも同様の環境を作ることができる。

blog.ketus-ix.work

本記事で、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%\pypoetryC:\Users\USERNAME\AppData\Roaming\pypoetry)へインストールされる。

Poetryの環境変数設定

Poetryのインストールが済んだら、ディレクトリパス%APPDATA%\Python\ScriptsC:\Users\USERNAME\AppData\Roaming\Python\Scripts)をユーザー環境変数Pathに追加する。

ユーザー環境変数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