Skip to content

Poetry stuck at pyenv Python version active during install-poetry, broken after version uninstall #4317

Description

@jian-robo
  • I am on the latest Poetry version.
  • I have searched the issues of this repo and believe that this is not a duplicate.
  • If an exception occurs when executing a command, I executed it again in debug mode (-vvv option).
    • no exception occurs, only Shell error
  • OS version and name:
    • macOS Big Sur 11.2.3
  • 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:

  1. 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
  2. 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].

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/bugSomething isn't working as expected

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions