🔖

poetry init では 3.10 が使えるのに、 poetry env use python3.10 ではエラーになる

2022/01/15に公開

TL;DR

PoetryをHomebrewでインストールしている場合、Python3.10が同梱される(2022年1月現在)。
Homebrewで依存関係のためにインストールされるモジュールは通常PATHに存在しないので、pyenvなどでインストールしていない限りはpoetry env use python3.10がエラーになる。

Poetryの仕様

poetry init

poetry init で --python オプションを指定しない場合、Poetryが利用しているPythonを利用する。

参考: current_env = SystemEnv(Path(sys.executable))

ちなみに、PATHにpython3.10が存在しない状態で--python 3.10を指定すると poetry install時にエラーになる。

% poetry init --python 3.10
# 省略
Do you confirm generation? (yes/no) [yes]

% poetry install
The currently activated Python version 3.10.1 is not supported by the project (3.10).
Trying to find and use a compatible version. 

  NoCompatiblePythonVersionFound

  Poetry was unable to find a compatible version. If you have one, you can explicitly use it via the "env use" command.

poetry env use python3.10

PATHにpython3.10が存在しない場合、エラーになる。

% poetry env use python3.10
/bin/sh: python3.10: command not found

  EnvCommandError

  Command python3.10 -c "import sys; print('.'.join([str(s) for s in sys.version_info[:3]]))" errored with the following return code 127, and output:

解決方法

ドキュメントに記載がある通り、pyenvでpython3.10を利用する。

pyenv local 3.10.1

poetry config virtualenvs.in-project true --local
# OR
export POETRY_VIRTUALENVS_IN_PROJECT=true

poetry init --python ^3.10
poetry install

まとめ

pyenvで明示的にバージョンを指定することで、Poetryがデフォルトで利用しているPythonを避けることができる。

GitHubで編集を提案

Discussion