poetry: [virtualenvs] configuration not working with pyproject.toml
- 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).
- OS version and name: Linux 5.8.9-arch2-1 x86_64
- Poetry version: 1.0.10
- Link of a Gist with the contents of your pyproject.toml file: š
[tool.poetry]
name = "name"
version = "0.1.0"
description = "description"
authors = ["my-name my-name@mail.com"]
license = "BSD-3-Clause"
[tool.poetry.dependencies]
python = "^3.8"
[tool.poetry.dev-dependencies]
pre-commit = "^2.7.1"
pylint = "^2.6.0"
pytest = "^6.0.2"
pytest-cov = "^2.10.1"
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
[virtualenvs]
create = true
in-project = true
Issue
Hello, Iāve been trying to make Poetry create the virtual environment folder in the projectās root but it kept installing in home/leleco/.cache/pypoetry/virtualenvs
despite the configuration set in pyproject.toml
file.
After a few tries, I ran poetry config --list
and the output was this š
cache-dir = "/home/leleco/.cache/pypoetry"
virtualenvs.create = true
virtualenvs.in-project = false
virtualenvs.path = "{cache-dir}/virtualenvs" # /home/leleco/.cache/pypoetry/virtualenvs
This got me startled, so I tried poetry config virtualenvs.in-project true
, then poetry install
and it worked: a .venv
was created inside my projectās root directory. I then tried the same, except that with virtualenvs.create
š
# pyproject.toml
[virtualenvs]
create = false
in-project = true
And the result from poetry config --list
was this š
cache-dir = "/home/leleco/.cache/pypoetry"
virtualenvs.create = true
virtualenvs.in-project = true
virtualenvs.path = "{cache-dir}/virtualenvs" # /home/leleco/.cache/pypoetry/virtualenvs
With this, I concluded that [virtualenvs]
does not work with pyproject.toml
(which was expected to me, as a user). Furthermore, poetry config virtualenvs.in-project true --local
creates a poetry.toml
instead of adding an entry in pyproject.toml
. š
# poetry.toml
[virtualenvs]
in-project = true
Is this expected? If so, I couldnāt find the documentation explaining thisā¦ also, is there a chance that we convert this issue from Bug to Feature Request in case the described behavior is the expected behavior? Iām more than glad to update this description and convert it to a feature request with proper use-case description.
Thanks in advance, Hope I can be useful to resolve this, or to implement this feature, somehow š„³
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Reactions: 18
- Comments: 18 (6 by maintainers)
Commits related to this issue
- chore: š¤ unversion local poetry configuration See https://github.com/python-poetry/poetry/issues/2937#issuecomment-770543652 for context — committed to huggingface/datasets-server by severo 3 years ago
- Mention poetry.toml See https://github.com/python-poetry/poetry/issues/2937#issuecomment-709774431 — committed to majiang/poetry by majiang 2 years ago
- chore: š¤ unversion local poetry configuration See https://github.com/python-poetry/poetry/issues/2937#issuecomment-770543652 for context — committed to mattstern31/datasets-server-storage-admin by mattstern31 3 years ago
poetry.toml
is now mentioned in the documentation. There is no plan on adding poetry settings control topyproject.toml
file.I see your point and partially agree with the argument. Nevertheless, I believe thereās at least one action item for this issue: better document
poetry.toml
. I read through the docs for a while and found nothing on this issue (pyproject.toml
vspoetry.toml
). Not even on stackoverflow I found much about it (the most I got was someone mentioningpoetry.toml
existed, but it was such an old post that I simply thought it was a deprecated Poetry configuration file).For me, this is really a pain because VS Code doesnāt work with the default poetry venv dir (there are issues open on this) and VS Code users HAVE to change venvās directory in order to use poetry venv. In order to avoid that my team has problems with poetry and VS Code, I looked for a way to enforce poetry to install venv in the projectās root everytime (that way, VS Code would always find the venv folder). This being said, I can see that lots of developers will spend considerable time looking for an appropriate solution for their professional projects and not finding proper documentation and relying on trial and error or workarounds. I believe this justifies adding some documentation on
poetry.toml
and itās usage, what configs could go there and so on.Lastly, an opinion on the separation of files: we have
black
,isort
and many other tool configurations underpyproject.toml
->[tools.<tool-name>]
. I donāt see why we canāt have a project setting (where to install venv, for this specific project) in the same file (pyproject.toml
) under different keys in order to avoid increasing the number of files. š¤Just to be clear, I really appreciate your help and opinionā¦ this is a IMO response only, based on bad UX regarding the documentation (not Poetry itself, which is so awesome that Iām trying to change my peers mind to use it in our project) š
Itās just a personal opinion that these are personal opinions. Other teams can decide otherwise.
pyproject.toml contains the configuration for black,isort,mypy, pytest,ā¦ It contains the information which python-version the virtualenv needs to be instantiated for, and what packages needs to be installed in the virtualenv, so why not support these extra settings?
We are happy to get rid of pytest.ini, .pylintrc,ā¦ and a plentitude of other files that can be consolidated in pyproject.toml
Now we are forced to create a poetry.toml, add it to the repo, just to have all our teammembers a consistent setup with an in-project virtualenv.
On some arcane setups where virtual environments need to be managed with another tool (see conda), it would be really helpful to have a way of overriding the virtual environment settings from the
pyptoject.toml
file, as disabling virtual environment creation is not a user preference but a must.@finswimmer, would it be possible to preserve the current behavior and allow custom overrides? The priority order would look like this:
pyproject.toml
.poetry.toml
.To add to this, I can only assume you guys donāt have a bunch of junior developers on your team. Having a consistent development setup is incredibly important to aid beginners and writing instructions. It would be great to ensure all of them have the venv folder at the same location.
Hello @lcbm,
the reason why the local configs are not in
pyproject.toml
but in a separatepoetry.toml
is that one developer should not force another howpoetry
is configured. This would automatically the case if these local config would be in thepyproject.toml
.But itās a good idea to document the existens of this file and would fit at best in the Local Configuration section of the docs.
PR is welcome š
fin swimmer
Hi @finswimmer
I quite agree with @0x2b3bfa0 's suggestion. So I can have a default virtualenv setting in pyproject.toml(this makes perfect sense for the purpose of pyproject.toml), then if developer prefers a different venv setting then it can be overwritten by
poetry.toml
, this casepoetry.toml
can be excluded from version control.@finswimmer I would like to add another point to maybe revisit this decision.
Recently Poetry implemented another config
system-site-packages
(#1393 and #3711), which not only allows for saving space, but also make currently incompatible packages (such as those not supporting PEP-517) to work seamlessly with Poetry as well (so we donāt need to specify them on dependencies and still rely on them as a dependency on host).This setting alone will turn the developerās environment consistent and therefore it should be set on a per-project basis IMHO. This was an example, but other settings might be introduced in the future that developers would like to āenforceā across their teams for sake of consistency/environment reproducibility.
Perhaps, as an option for future-proofing, itās worth considering allowing users to set these properties at the project-level as well (on
pyproject.toml
), being overridden by those inglobal
, then by those inlocal
scope (so we donāt break compatibility). What do you think?This is precisely what needs to be done.
I assume youāre talking about enabling poetry configuration at the project level. In that case, not that Iām aware of, but maybe due to the issue title and tags, this is not getting enough visibility.
To help the devs (and to better clarify the request) we can push this as a feature request in a separate issue.
The
pyproject.toml
contains information about your package, like metadata and dependencies. Anything that is needed to build the package.The
poetry.toml
contains the local configuration of the poetry application. One should not check-in this file into a repository, because these configuration are just personal flavors.To the best of my knowledge, using a key called
[virtualenvs]
has never been supported, nor has overriding config options in the pyproject.toml ā the poetry settings are used to handle processing for the pyproject.toml, so it makes sense that they are separate.