python-poetry/poetry · error · InvalidCurrentPythonVersionError
Current Python version
Error message
Current Python version ({given}) is not allowed by the project ({expected}). What it means
Raised as InvalidCurrentPythonVersionError in EnvManager.create_venv when Poetry is already inside a virtualenv (or virtualenv creation is disabled via virtualenvs.create=false) and the currently active Python version is not allowed by the project's python constraint in pyproject.toml. Because Poetry cannot transparently switch interpreters in this state, it aborts.
Solutions
- Deactivate the current venv ('deactivate') and let Poetry create a compatible one.
- Switch to a compliant interpreter: 'poetry env use python3.11' (or whichever the constraint allows).
- Loosen the python constraint in pyproject.toml if the current version is actually fine.
- If virtualenvs.create=false, either re-enable it or install a system python that satisfies the constraint.
Example fix
// before - inside a py3.9 venv, project needs >=3.11 # (poetry install) -> InvalidCurrentPythonVersionError // after deactivate poetry env use python3.11 poetry install
Defensive patterns
Strategy: validation
Validate before calling
from poetry.core.constraints.version import Version
def current_python_allowed(poetry, env) -> bool:
current = Version.parse(".".join(str(c) for c in env.version_info[:3]))
return poetry.package.python_constraint.allows(current)
# before triggering create_venv while inside a venv:
if env.is_venv() and not current_python_allowed(poetry, env):
raise SystemExit("activate a compatible python first or run 'poetry env use <ver>'") Type guard
from poetry.utils.env.python.exceptions import InvalidCurrentPythonVersionError, PythonVersionError
def is_invalid_current_python(e: Exception) -> bool:
return isinstance(e, InvalidCurrentPythonVersionError) or (
isinstance(e, PythonVersionError) and str(e).startswith("Current Python version")
) Try / catch
from poetry.utils.env.python.exceptions import InvalidCurrentPythonVersionError
try:
manager.create_venv()
except InvalidCurrentPythonVersionError as e:
# cannot switch here - user must deactivate or env use
raise SystemExit(f"{e}\nHint: deactivate, then 'poetry env use <compatible-python>'") Prevention
- Keep [tool.poetry.dependencies] python constraint aligned with your active interpreter.
- Deactivate venvs before 'poetry install' to let Poetry pick a compliant interpreter.
- If setting virtualenvs.create=false, ensure the system python satisfies the project constraint.
- In CI, provision an image whose default python matches the project's min version.
When it happens
Trigger: Running 'poetry install' (or any operation triggering create_venv) while already inside an activated venv whose Python version violates [tool.poetry.dependencies] python = ...; OR with virtualenvs.create=false and the system python is incompatible. Branch: env_manager.py:384-399.
Common situations: User activated a py3.10 venv then ran poetry install on a project requiring python >=3.11; CI image's default python is too old; virtualenvs.create=false set globally and the system python doesn't match; downstream of a conda activate.
Related errors
- The specified Python version
- Poetry was unable to find a compatible version. If you have…
- Bad script ( ): script needs to specify a function within a…
- Could not find the python executable
- Discovered shell ' ' doesn't have an activator in virtual…
AI-assisted analysis of python-poetry/poetry@92b74dcfe3 (2026-08-04).
Data as JSON: /api/errors/a083e384f4defd07.
Report an issue: GitHub.
Appendix: source
Thrown at src/poetry/utils/env/env_manager.py:390
if self._env is not None and not force:
return self._env
cwd = self._poetry.file.path.parent
env = self.get(reload=True)
if not env.is_sane():
force = True
supported_python = self._poetry.package.python_constraint
create_venv = self._poetry.config.get("virtualenvs.create")
if (env.is_venv() and not force) or not create_venv:
# Already inside a virtualenv.
current_python = Version.parse(
".".join(str(c) for c in env.version_info[:3])
)
if not supported_python.allows(current_python):
raise InvalidCurrentPythonVersionError(
self._poetry.package.python_versions,
str(current_python),
note=(
'Please change python executable via the "env use" command.'
if create_venv
else "Poetry cannot switch to a compatible Python version because"
" virtualenv creation is disabled."
),
)
return env
in_project_venv = self.use_in_project_venv()
venv_prompt = self._poetry.config.get("virtualenvs.prompt")
specific_python_requested = python is not None
if not python:
python = Python.get_preferred_python(
config=self._poetry.config, io=self._ioView on GitHub (pinned to 92b74dcfe3)