+
Skip to content

Reliance on dataclasses throws errors in pip for Python3.9 #30

@erewok

Description

@erewok

Hello. I have used this library a handful of times over the years and it has been helpful to me.

Recently, however, on Python 3.9 I have seen failing builds due to the dependence on dataclasses. After installing ecological, all further pip commands throw errors like this:

Traceback (most recent call last):
  File "/install/bin/pip", line 5, in <module>
    from pip._internal.cli.main import main
  File "/install/lib/python3.9/site-packages/pip/_internal/cli/main.py", line 9, in <module>
    from pip._internal.cli.autocompletion import autocomplete
  File "/install/lib/python3.9/site-packages/pip/_internal/cli/autocompletion.py", line 10, in <module>
    from pip._internal.cli.main_parser import create_main_parser
  File "/install/lib/python3.9/site-packages/pip/_internal/cli/main_parser.py", line 8, in <module>
    from pip._internal.cli import cmdoptions
  File "/install/lib/python3.9/site-packages/pip/_internal/cli/cmdoptions.py", line 23, in <module>
    from pip._internal.cli.parser import ConfigOptionParser
  File "/install/lib/python3.9/site-packages/pip/_internal/cli/parser.py", line 12, in <module>
    from pip._internal.configuration import Configuration, ConfigurationError
  File "/install/lib/python3.9/site-packages/pip/_internal/configuration.py", line 20, in <module>
    from pip._internal.exceptions import (
  File "/install/lib/python3.9/site-packages/pip/_internal/exceptions.py", line 14, in <module>
    from pip._vendor.rich.console import Console, ConsoleOptions, RenderResult
  File "/install/lib/python3.9/site-packages/pip/_vendor/rich/console.py", line 55, in <module>
    from .pretty import Pretty, is_expandable
  File "/install/lib/python3.9/site-packages/pip/_vendor/rich/pretty.py", line 366, in <module>
    class Node:
  File "/install/lib/python3.9/site-packages/dataclasses.py", line 958, in dataclass
    return wrap(_cls)
  File "/install/lib/python3.9/site-packages/dataclasses.py", line 950, in wrap
    return _process_class(cls, init, repr, eq, order, unsafe_hash, frozen)
  File "/install/lib/python3.9/site-packages/dataclasses.py", line 800, in _process_class
    cls_fields = [_get_field(cls, name, type)
  File "/install/lib/python3.9/site-packages/dataclasses.py", line 800, in <listcomp>
    cls_fields = [_get_field(cls, name, type)
  File "/install/lib/python3.9/site-packages/dataclasses.py", line 659, in _get_field
    if (_is_classvar(a_type, typing)
  File "/install/lib/python3.9/site-packages/dataclasses.py", line 550, in _is_classvar
    return type(a_type) is typing._ClassVar
AttributeError: module 'typing' has no attribute '_ClassVar'

When ecological is removed as a dependency (or copied and built without dataclasses) the error goes away.

My request is to change the pyproject.toml for this project to stop supporting python 3.6 and remove the dependency on dataclasses:

[tool.poetry.dependencies]
python = "^3.7"

There is a precedent for other Python libraries recently dropping support for Python3.6.

Alternatively, I know that with a setup.py, it's possible to specify a dependency like dataclasses only if using an earlier Python version. For instance, in a setup.py, the following would work:

    install_requires=["dataclasses>=0.7;python_version<'3.7'"]

I believe that the pyproject.toml for this project may be modified in the following way to achieve this:

dataclasses = {version = "0.6",  markers = "python_version < '3.7'"}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载