プログラミング

【pyenv+poetry】Pythonのバージョンを指定した仮想環境構築

プログラミング

概要

Windows 11で pyenv-win、poetry を用いて、Pythonのバージョンを指定した仮想環境を構築する手順を、実際のコマンドと共にまとめました。
本記事は、全4話のシリーズの3つ目です。(以降ではpyenv-winのことを「pyenv」と記載します)

目標は、指定したバージョンのPythonとライブラリ(numpy、pandas)が動く仮想環境を構築することです。複雑な設定は行いません。
異なるバージョンで動かした結果を比較したり、複数人の開発で環境を揃える必要があるときに役立ちます。

初回のみ必要な準備を済ませてから、以下の①~⑥の流れで検証します。

 ① 仮想環境作成
 ② ライブラリインストール
 ③ サンプルプログラム実行
 ④ 構成ファイル出力
 ⑤ 仮想環境削除
 ⑥ 構成ファイルから仮想環境再作成

pyenv+poetry を用いる方法の特徴として、以下が挙げられます。
用途や制約に応じて、適宜使い分けましょう。

 長所:パッケージ化に対応、人気がある
 短所:多機能すぎる

動作確認環境

  • Windows 11
  • Anaconda不使用
  • PowerShellでコマンド実行
  • 使用したバージョンは以下の通り
ライブラリPC本体にインストール
したバージョン
仮想環境にインストール
するバージョン
Python3.12.63.13.13 (指定)
pip24.226.0.1 (自動)
numpy2.2.6 (不使用)2.4.4 (指定)
pandas2.2.3 (不使用)3.0.2 (指定)
pyenv-win3.1.1(不要)
poetry2.4.1(不要)

検証のため、PC本体に既にインストールされている物とは異なるバージョンを指定しました。
pandasはインストールすると、間接的に依存するライブラリ(numpy、python-dateutil、six、tzdata)も自動的にインストールされます。

  • C:\PythonTest をカレントフォルダに設定
  • カレントフォルダに以下のサンプルプログラム(version_test.py)を格納

現在有効になっているPythonとライブラリのバージョンを表示するプログラムを、検証に用いました。

version_test.py
import sys
import pip
import numpy as np
import pandas as pd
import dateutil
import six
import tzdata

libraries = [
    (pip, "pip"),
    (np, "numpy"),
    (pd, "pandas"),
    (dateutil, "python-dateutil"),
    (six, "six"),
    (tzdata, "tzdata")
]

print(f"\nPython version: {sys.version}")
print("\nLibrary version:")
for lib, name in libraries:
    version = getattr(lib, "__version__", "N/A")
    print(f"{name:15} : {version}")
Expand

pyenv準備

シリーズ第1話と同じです。こちらをご参照ください:

poetry準備

poetryをインストール
poetryをインストールする先は、仮想環境で使用するPythonバージョンとは異なっていても構いません。

PowerShell
pip install poetry

インストールされたことを確認

PowerShell
poetry --version

仮想環境をカレントフォルダ内に作る設定
初期状態では C:\Users\[username]\AppData\Local\pypoetry\Cache\virtualenvs の中に仮想環境フォルダが作られる場合があります。
以下のコマンドを実行すると、カレントフォルダ(今回は C:\PythonTest)の中に作成させることができます。PowerShellを再起動後も設定が有効です。

PowerShell
poetry config virtualenvs.in-project true

プラグインをインストール
poetry 2.0 以降では、仮想環境を有効化する poetry shell が利用できなくなりました。
プラグインをインストールすることで、利用可能になります。
詳細:GitHub – python-poetry/poetry-plugin-shell · GitHub

PowerShell
poetry self add poetry-plugin-shell
Looks like you're trying to use a Poetry command that is not available. Since Poetry (2.0.0), the shell command is not installed by default.
プラグインが無いとエラーになる

(参考)poetryをアンインストールする手順

pyenvからpoetryをアンインストール
インストールしたPythonのバージョンごとに実施します。

PowerShell
pip uninstall poetry

poetryの隠しフォルダを削除
C:\Users\[username]\AppData\Local\pypoetry および
C:\Users\[username]\AppData\Roaming\pypoetry が存在していれば削除します。

仮想環境構築

仮想環境を構築するプロジェクト毎に実施します。

仮想環境作成

poetryがインストールされたPythonバージョンに切り替え
pyenv shell は、PowerShellを閉じるまで、そのバージョンが有効になります。有効にするバージョンが既にpyenvのグローバル or ローカルバージョンになっていれば、切り替える操作は不要です。
今回は Python 3.14.5 にpoetryをインストールした場合を想定します。

PowerShell
pyenv shell 3.14.5

仮想環境を新規作成
仮想環境に使用するPythonバージョンを引数に与えます。ただし、指定したPythonバージョンがpyenvにインストールされていないと、エラーになります。
カレントフォルダに pyproject.toml が作成されます。

PowerShell
poetry init -n --python 3.13.13
ハーポルホード高橋
ハーポルホード高橋

-n を付けないと、初期設定を色々質問されます。

仮想環境を有効化
カレントフォルダに「.venv」フォルダが作成され、コマンドの先頭が (pythontest-py3.13) に変わります。

PowerShell
poetry shell

仮想環境のPythonバージョンを確認

PowerShell (pythontest-py3.13)
python -V

仮想環境のライブラリ一覧を確認
この時点では、pipだけが入った状態です。

PowerShell (pythontest-py3.13)
pip list

ライブラリインストール

指定したバージョンのライブラリをインストール
C:\PythonTest\.venv\Lib\site-packages にライブラリ名のフォルダが増えます。
間接的に依存するライブラリも自動でインストールされます。
また、カレントディレクトリに poetry.lock が作成され、ライブラリをインストールするたびに pyproject.toml と poetry.lock の内容が上書き更新されます。

PowerShell (pythontest-py3.13)
poetry add numpy==2.4.4
poetry add pandas==3.0.2

ライブラリ一覧を確認

PowerShell (pythontest-py3.13)
pip list

ライブラリの依存関係を図示

PowerShell (pythontest-py3.13)
poetry show --tree

(参考)ライブラリをアンインストール
関連ライブラリも自動で削除されます。

PowerShell (pythontest-py3.13)
poetry remove pandas

サンプルプログラム実行

カレントフォルダのサンプルプログラム(version_test.py)を実行

PowerShell (pythontest-py3.13)
python version_test.py

構成ファイル出力

前節で生成された poetry.lock が、構成ファイルとなります。

poetry.lock:

仮想環境削除

仮想環境を終了
コマンドの先頭がカレントフォルダの表示に戻ります。

PowerShell (pythontest-py3.13)
exit

仮想環境を削除
カレントフォルダの「.venv」フォルダが跡形なく削除されます。

PowerShell
poetry env remove --all

構成ファイルから仮想環境再作成

仮想環境再作成するフォルダには poetry.lock を配置しておきます。

poetryがインストールされたPythonバージョンに切り替え
今回は Python 3.14.5 にpoetryをインストールした場合を想定しています。

PowerShell
pyenv shell 3.14.5

カレントフォルダ移動

PowerShell
cd C:\PythonTest

構成ファイルから仮想環境を再作成
カレントフォルダに「.venv」フォルダが作成されます。
現在有効になっているPythonバージョンが仮想環境で使用するバージョンと異なっていても、正しく動きます。
カレントフォルダにtomlファイルも存在する場合、lockファイルが優先されてtomlファイルは無視されます

PowerShell
poetry install --no-root

仮想環境を有効化
コマンドの先頭が (pythontest-py3.13) に変わります。

PowerShell
poetry shell

カレントフォルダのサンプルプログラム(version_test.py)を実行

PowerShell (pythontest-py3.13)
python version_test.py

参考文献

タイトルとURLをコピーしました