Reputation: 8919
My question: How does the Python tool Poetry know the path of the virtual environment of a project?
Explanation: When I run poetry init
inside a directory, a new project is created. Then I run poetry install
and a new virtual environment is created. HOWEVER, neither the path nor the hash of that virtual environment are stored in pyproject.toml
or poetry.lock
as I expected. How does Poetry then know the location of the virtual environment when I run poetry env info -p
?
Besides wanting to know what is going on, I need to know this for 2 reasons:
Possible solution: Looking into the source code of Poetry, it seemed to me that a file envs.toml
may include a mapping from filesystem directories to virtual environment hashes, but on my Mac OS 11.1 I can't find such a file.
Upvotes: 19
Views: 8390
Reputation: 8919
I dived deeper into the source code and I may have understood it now:
poetry/utils/env/env_manager.py
inside the class method EnvManager.generate_env_name(...)
(src)pyproject.toml
and adding the hash of the parent directory of pyproject.toml
As a consequence:
poetry install
again and create a new virtual environmentUpvotes: 18
Reputation: 480
There's a poetry config variable that makes poetry install the virtual environment inside the project. Thus, if you delete the project directory, the venv will also be deleted. It also allows you to inspect what's in the venv, and delete/recreate the venv when needed.
From the cmd line:
poetry config virtualenvs.in-project true
Verify it's set:
poetry config --list
(virtualenvs.in-project should be true)
Upvotes: 2