11

我在 AWS EC2 上设置了一个新的 Debian 10 (Buster) 实例,并且能够安装一个依赖于 netifaces 的 pip3 包,但是当我第二天回到它时,该包在 netifaces 中报告错误。如果我尝试运行 pip3 install netifaces 我得到同样的错误:

~$ pip3 install netifaces
Collecting netifaces
  Using cached https://files.pythonhosted.org/packages/0d/18/fd6e9c71a35b67a73160ec80a49da63d1eed2d2055054cc2995714949132/netifaces-0.10.9.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/usr/lib/python3/dist-packages/setuptools/__init__.py", line 20, in <module>
        from setuptools.dist import Distribution, Feature
      File "/usr/lib/python3/dist-packages/setuptools/dist.py", line 35, in <module>
        from setuptools.depends import Require
      File "/usr/lib/python3/dist-packages/setuptools/depends.py", line 7, in <module>
        from .py33compat import Bytecode
      File "/usr/lib/python3/dist-packages/setuptools/py33compat.py", line 55, in <module>
        unescape = getattr(html, 'unescape', html_parser.HTMLParser().unescape)
    AttributeError: 'HTMLParser' object has no attribute 'unescape'
4

4 回答 4

16

HTMLParser().unescape在 Python 3.9 中被删除。比较Python 3.8 和 Python 3.9 中代码

该错误似乎是setuptools. 尝试升级setuptools。或者使用 Python 3.8。

于 2020-11-27T19:09:42.053 回答
2

我在 PyCharm 2018 中遇到了这个问题。除了setuptools上面提到的升级之外,我还必须升级PyCharm 2020.3.4才能解决这个问题。PyCharm 问题跟踪器上的相关错误:https ://youtrack.jetbrains.com/issue/PY-39579

希望这可以帮助某人避免花费数小时尝试调试它。

于 2021-03-24T22:33:40.717 回答
1

我通过 deb 管理获得了 python3.6 和相关包。需要 python3.9 用于辅助项目和修复 pip 的解决方案,并且AttributeError: 'HTMLParser' object has no attribute 'unescape' 是为一个用户在本地更新 python3.9 的 pip:

python3.9 -m pip install --upgrade pip

现在安装 python3.9 版本的 pip-packages 工作:

python3.9 -m pip install --target=~/.local/lib/python3.9/site-packages numpy
于 2021-09-08T07:46:31.370 回答
0

降级到任何较旧的 python3 版本都不是解决方案,而且大多数时候升级 setuptools 不会解决问题。对我来说使用 python3.9 使用 pip 的正确解决方案在 Ubuntu18 上如下所示:找到 /usr/lib/python3/dist-packages/setuptools/py33compact.py33 并更改

# unescape = getattr(html, 'unescape', html_parser.HTMLParser().unescape)  # comment out this line
unescape = getattr(html, 'unescape', None)
if unescape is None:
    # HTMLParser.unescape is deprecated since Python 3.4, and will be removed
    # from 3.9.
    unescape = html_parser.HTMLParser().unescape
于 2021-06-26T23:00:09.727 回答