nicfit / eyeD3

eyeD3 is a Python module and command line program for processing ID3 tags. Information about mp3 files (i.e bit rate, sample frequency, play time, etc.) is also provided. The formats supported are ID3v1 (1.0/1.1) and ID3v2 (2.3/2.4).
http://eyed3.nicfit.net/
GNU General Public License v3.0
532 stars 58 forks source link

Dev dependencies into main dependencies poetry cfg #574

Open Olegt0rr opened 2 years ago

Olegt0rr commented 2 years ago

Since test dependencies is located in [tool.poetry.dependencies], poetry trying to resolve they. Even they are optional. https://github.com/nicfit/eyeD3/blob/3c073bb27db0ca2078037fe566fb9631aae094b9/pyproject.toml#L65-L72

So. Let's get any application with coverage v6...

[tool.poetry.dev-dependencies]
coverage = "^6"

Try to add eyed3:

poetry add eyed3

And get exception:

  SolverProblemError

  Because no versions of coverage match >5.3.1,<5.4 || >5.4,<5.5 || >5.5,<6.0.0
   and coverage (5.3.1) depends on coverage (5.3.1), coverage (>=5.3.1,<5.4 || >5.4,<5.5 || >5.5,<6.0.0) requires coverage (5.3.1).
  And because coverage (5.4) depends on coverage (5.4)
   and coverage (5.5) depends on coverage (5.5), coverage (>=5.3.1,<6.0.0) requires coverage (5.3.1 || 5.4 || 5.5).
  Because no versions of eyed3 match >0.9.6,<0.10.0
   and eyed3 (0.9.6) depends on coverage (>=5.3.1,<6.0.0), eyed3 (>=0.9.6,<0.10.0) requires coverage (>=5.3.1,<6.0.0).
  Thus, eyed3 (>=0.9.6,<0.10.0) requires coverage (5.3.1 || 5.4 || 5.5).
  So, because App depends on both eyed3 (^0.9.6) and coverage (^6), version solving failed.

To avoid this behaviour eyed3 should locate dev dependencies into [tool.poetry.dev-dependencies] instead of [tool.poetry.dependencies].

nicfit commented 1 year ago

I do use [tool.poetry.dev-dependencies] for release tools, but the coverage is part of an test extras, not the main eyeD3 deps.

ping commented 1 year ago

@nicfit I'm not familiar how the dependencies are setup but coverage is indeed getting installed by default.

$ python3 -m pip install eyed3 
Collecting eyed3
  Using cached eyed3-0.9.7-py3-none-any.whl (246 kB)
Collecting filetype<2.0.0,>=1.0.7
  Using cached filetype-1.2.0-py2.py3-none-any.whl (19 kB)
Collecting coverage[toml]<6.0.0,>=5.3.1
  Using cached coverage-5.5-cp310-cp310-macosx_10_14_x86_64.whl (207 kB)
Collecting deprecation<3.0.0,>=2.1.0
  Using cached deprecation-2.1.0-py2.py3-none-any.whl (11 kB)
Collecting toml
  Using cached toml-0.10.2-py2.py3-none-any.whl (16 kB)
Collecting packaging
  Using cached packaging-23.0-py3-none-any.whl (42 kB)
Installing collected packages: filetype, toml, packaging, coverage, deprecation, eyed3
Successfully installed coverage-5.5 deprecation-2.1.0 eyed3-0.9.7 filetype-1.2.0 packaging-23.0 toml-0.10.2

[notice] A new release of pip available: 22.2.1 -> 23.0.1
[notice] To update, run: pip install --upgrade pip

How can I not get coverage installed as part of eyed3 since you mention that is part of test extras?