Решение найдено тут link
Под windows используем пакет pyenv for Windows.
Устанавливаем pyenv
и poetry
как написано в документации.
С помощью pyenv
устанавливаем нужные нам версии питон. При этом py launcher
должен быть удален (или отключен),
а сам питон может быть установлен в системе любым способом, pyenv
его найдет и определит. Но имхо удобнее
все версии питона централизовано устанавливать через pyenv
.
Ищем достапные в репозитории версии
$ pyenv install -l | findstr 3.1
Устанавливаем нужные нам версии в систему
$ pyenv install 3.10.2
$ pyenv install 3.5.2
В папке проекта устанавливаем версию по-умолчанию
$ pyenv local 3.5.2
Появится файл .python-version
c содержимым 3.5.2
Теперь выполнив команду python в этой папке, у нас автоматически будет использоваться версия 3.5.2:
$ python --version
Python 3.10.2
Чтобы установить версую по-умолчанию для всех остальных папок, используем global: pyenv global <version>
C:\Users\OLEKSII\testproject>poetry init
INFO: Could not find files for the given pattern(s).
This command will guide you through creating your pyproject.toml config.
Package name [testproject]:
Version [0.1.0]:
Description []:
Author [None, n to skip]: n
License []:
Compatible Python versions [^3.11]: 3.5.2 <<<<==== INSERT OUR ACTUAL VERSION
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 = "testproject"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "3.5.2"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
Do you confirm generation? (yes/no) [yes]
Теперь обновите env у poetry, указав pyenv — это очень важный шаг. Когда вы установили poetry, она установила python 3.10.5 в качестве системного python, поэтому вам нужно переопределить это, указав правильную env для poetry с помощью poetry env use $(pyenv which python)
. Вам нужно сделать это только один раз.
λ poetry env info
Virtualenv
Python: 3.11.2
Implementation: CPython
Path: NA
Executable: NA
System
Platform: win32
OS: nt
Python: 3.11.2
Path: C:\Users\OLEKSII\.pyenv\pyenv-win\versions\3.11.2
Executable: C:\Users\OLEKSII\.pyenv\pyenv-win\versions\3.11.2\python.exe
^^^^^^^^^^ poetry use system python!
λ poetry env use $(pyenv which python)
Creating virtualenv testproject-s9DjT1w_-py3.5 in C:\Users\OLEKSII\AppData\Local\pypoetry\Cache\virtualenvs
Using virtualenv: C:\Users\OLEKSII\AppData\Local\pypoetry\Cache\virtualenvs\testproject-s9DjT1w_-py3.5
λ poetry env info
Virtualenv
Python: 3.5.2
Implementation: CPython
Path: C:\Users\OLEKSII\AppData\Local\pypoetry\Cache\virtualenvs\testproject-s9DjT1w_-py3.5
Executable: C:\Users\OLEKSII\AppData\Local\pypoetry\Cache\virtualenvs\testproject-s9DjT1w_-py3.5\Scripts\python.exe
Valid: True
System
Platform: win32
OS: nt
Python: 3.5.2
Path: C:\Users\OLEKSII\.pyenv\pyenv-win\versions\3.5.2
Executable: C:\Users\OLEKSII\.pyenv\pyenv-win\versions\3.5.2\python.exe
^^^^^^^^^^ now python exec from virtual env!!!
Теперь мы можем создать виртуальное окружение при помощи
poetry instrall <= this command use existing pyproject.toml
OR
poetry install <package-name>
Cheat sheet pyenv for Windows
List all python version available for install
pyenv install -l | findstr 3.8
Setup python version for current directory (create .python-version)
pyenv local 3.8.2
Cheat sheet poetry
Setup poetry in current directory (create pyproject.toml
config, but not create virtual env yet)
poetry init
Install all from pyproject.toml
poetry install
Change executable python for current environment (work with pyenv). This command create virt. environment directory.
poetry env use $(pyenv which python)
If add package manually in pyproject.toml
poetry lock # update lock file from pyproject.toml
poetry install