- OS version and name:
- Poetry version:
- 1.1.7 via
install-poetry.py
- Link of a Gist with the contents of your pyproject.toml file:
- provided inside [Issue] section
Issue
Below scenarios demonstrate that:
- Poetry 1.1.7 which was installed via
install-poetry.py, does not recognize the changes in Python version made via pyenv local <version>. The expected behavior is to recognize Python version activated via pyenv. Similar issue: Poetry does not use active pyenv when creating virtual environment #651
- Poetry becomes broken after pyenv Python version, which have been active at a time of Poetry installation via
install-poetry.py, was uninstalled via pyenv.
Out-of-the-head suggestion is that/Users/username/Library/Application Support/pypoetry/venv/bin/python should link to pyenv Python shims, not to a specific pyenv Python version, as it happens currently.
The environment:
- pyenv 2.0.3 via Homebrew
- Python 3.8.8 installed via pyenv, activated in a Poetry project dir via
.python-version file. No other versions of Python installed via pyenv
- Poetry 1.1.7 installed via curl +
install-poetry.py from the Poetry project dir, i.e. an active version of Python at a time of installation was 3.8.8
- Poetry appended to PATH via
.zshrc: export PATH="$PATH:$HOME/.local/bin", echo $PATH output:
/Users/username/.pyenv/shims:/usr/local/bin:<skipped>:/Users/username/.local/bin
pyproject.toml specifies Python version requirement via [tool.poetry.dependencies]: python = "^3.8.8"
poetry.lock specifies Python version requirement: python-versions = "^3.8.8"
poetry.toml: in-project = true
- at the beginning, no
.venv present in a Poetry project dir
Commands in below scenarios executed from Poetry project dir /Users/username/workspace/project/.
Scenario 1 (positive). Poetry Python version is the same as pyenv Python version:
pyenv versions. The result (w and p are softlinks to workspace and project dirs):
system
3.8.8 (set by /Users/username/w/p/.python-version)
python --version. The result:
Python 3.8.8
poetry run python --version. The result:
Creating virtualenv project in /Users/username/workspace/project/.venv
Python 3.8.8
Scenario 2 (negative). Switchinig Python version via pyenv:
- follow [Scenario 1]
- delete
.venv from Poetry project dir
- install Python 3.7.11 via pyenv, activate it:
pyenv install 3.7.11, pyenv local 3.7.11
pyenv versions. The result:
system
* 3.7.11 (set by /Users/username/w/p/.python-version)
3.8.8
python --version. The result:
Python 3.7.11
poetry run python --version. The result:
Creating virtualenv project in /Users/username/workspace/project/.venv
Python 3.8.8
Expected result:
poetry prints Python version Python 3.7.11, or maybe a Python version compatibility error (because the Poetry project requires a version 3.8.8 or later).
Scenario 3 (negative). Uninstalling of non-active pyenv Python version, .venv is still present:
- follow [Scenario 2]
pyenv uninstall 3.8.8, after that: poetry run python --version. The result:
/Users/username/.local/bin/poetry: line 2: /Users/username/Library/Application Support/pypoetry/venv/bin/python: No such file or directory
/Users/username/.local/bin/poetry: line 2: exec: /Users/username/Library/Application Support/pypoetry/venv/bin/python: cannot execute: No such file or directory
Expected result:
Poetry is not broken, and either prints the actual Python version, or a reasonable and meaningful error.
Scenario 4 (negative). Uninstalling of non-active pyenv Python version, .venv is absent:
- follow [Scenario 3]
- delete
.venv from Poetry project dir
poetry run python --version. The result:
the same result as for [Scenario 3].
Expected result:
The same expected result as for [Scenario 3].
-vvvoption).install-poetry.pyIssue
Below scenarios demonstrate that:
install-poetry.py, does not recognize the changes in Python version made viapyenv local <version>. The expected behavior is to recognize Python version activated via pyenv. Similar issue: Poetry does not use active pyenv when creating virtual environment #651install-poetry.py, was uninstalled via pyenv.Out-of-the-head suggestion is that
/Users/username/Library/Application Support/pypoetry/venv/bin/pythonshould link to pyenv Python shims, not to a specific pyenv Python version, as it happens currently.The environment:
.python-versionfile. No other versions of Python installed via pyenvinstall-poetry.pyfrom the Poetry project dir, i.e. an active version of Python at a time of installation was 3.8.8.zshrc:export PATH="$PATH:$HOME/.local/bin",echo $PATHoutput:/Users/username/.pyenv/shims:/usr/local/bin:<skipped>:/Users/username/.local/binpyproject.tomlspecifies Python version requirement via[tool.poetry.dependencies]:python = "^3.8.8"poetry.lockspecifies Python version requirement:python-versions = "^3.8.8"poetry.toml:in-project = true.venvpresent in a Poetry project dirCommands in below scenarios executed from Poetry project dir
/Users/username/workspace/project/.Scenario 1 (positive). Poetry Python version is the same as pyenv Python version:
pyenv versions. The result (wandpare softlinks toworkspaceandprojectdirs):python --version. The result:Python 3.8.8poetry run python --version. The result:Creating virtualenv project in /Users/username/workspace/project/.venv Python 3.8.8Scenario 2 (negative). Switchinig Python version via pyenv:
.venvfrom Poetry project dirpyenv install 3.7.11,pyenv local 3.7.11pyenv versions. The result:system * 3.7.11 (set by /Users/username/w/p/.python-version) 3.8.8python --version. The result:Python 3.7.11poetry run python --version. The result:Creating virtualenv project in /Users/username/workspace/project/.venv Python 3.8.8Expected result:
poetry prints Python version
Python 3.7.11, or maybe a Python version compatibility error (because the Poetry project requires a version 3.8.8 or later).Scenario 3 (negative). Uninstalling of non-active pyenv Python version,
.venvis still present:pyenv uninstall 3.8.8, after that:poetry run python --version. The result:Expected result:
Poetry is not broken, and either prints the actual Python version, or a reasonable and meaningful error.
Scenario 4 (negative). Uninstalling of non-active pyenv Python version,
.venvis absent:.venvfrom Poetry project dirpoetry run python --version. The result:the same result as for [Scenario 3].
Expected result:
The same expected result as for [Scenario 3].