Dataclasses solver failure with conditional python marker
See original GitHub issue-
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). -
Linux (Fedora 32):
-
Poetry version:
$ poetry debug info
Poetry
Version: 1.0.5
Python: 3.8.2
Virtualenv
Python: 3.8.2
Implementation: CPython
Path: /home/projects/poetry-dataclasses/poetry-demo/.venv
Valid: True
System
Platform: linux
OS: posix
Python: /usr
pyproject.yaml
[tool.poetry]
name = "poetry-demo"
version = "0.1.0"
description = ""
authors = []
[tool.poetry.dependencies]
python = "^3.6.1"
dataclasses = {version = "^0.7", python = "~3.6.1"}
dacite = "^1.5.0"
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
Issue
Following on from #1413, the solution there seems to suggest user python version markers to specify when to install a conditional dependencty - in my case the dataclasses-backport on python 3.6.*. However this seems to result in a SolverProblemError
resolving in certain cases even with the python specifier as indicated in my pyproject.yaml
above .
Things seem to work fine until I also install the addional library dacite
(https://github.com/konradhalas/dacite) - which also has a dependency on dataclasses when using python 3.6. The setup.py
for it is as follows,
install_requires=['dataclasses;python_version<"3.7"'],
Once this library is also installed, adding any other packages to my project results in the aforementioned SolverProblemError
, e.g.
$ poetry add arrow
Using version ^0.15.6 for arrow
Updating dependencies
Resolving dependencies... (0.0s)
[SolverProblemError]
The current project's Python requirement (^3.6.1) is not compatible with some of the required packages Python requirement:
- dataclasses requires Python >=3.6, <3.7
Because dataclasses (0.7) requires Python >=3.6, <3.7
and no versions of dataclasses match >0.7,<0.8, dataclasses is forbidden.
So, because poetry-demo depends on dataclasses (^0.7), version solving failed.
Commenting then uncommenting out either my use of dataclasses
or dacite
in my pyproject.toml
to add additional libraries works, but it seems that both my projects and dacite’s use of dataclasses with a conditional python marker conflict in poetry.
Issue Analytics
- State:
- Created 3 years ago
- Reactions:6
- Comments:22 (4 by maintainers)
As the original submitter, I can still reproduce this on the latest Poetry (1.0.9), when running
poetry add <anypackage>
within a Python 3.8 venv.For more context, I’m building an application that runs on any Python from >= 3.6.1, and < 4.0.0 that requires the
dataclasses
library. Asdataclasses
is only required when developing using / when a user is running on Python >= 3.6.1 and < 3.7.0, I’ve set a conditional marker - however I develop myself within a Python 3.8 venv. I don’t believe that this is a user error, as I imagine Poetry supports such a configuration (Poetry’s ownpyproject.toml
has a similar dataclasses constraint) so I’m not sure what’s not working here.The only way I can get it to work right now is by commenting the
dataclasses
package in mypyproject.toml
, adding the additional package I want viapoetry add
, and then uncommentingdataclasses
again.My
pyproject.toml
is,The output from running
poetry add <anypackage> -vvv
isHaving a lot of trouble with this. If a dependency itself depends on a restricted version of
dataclasses
you also get this error, even if you don’t depend ondataclasses
yourself.