pip3错误 - '_NamespacePath'对象没有'sort'属性

52

我尝试通过pip3安装一个软件包,但是遇到了这个错误。每次运行pip/pip3命令都会给出相同的错误提示-

alexg@hitbox:~$ pip3 -V
Traceback (most recent call last):
  File "/usr/local/bin/pip3", line 7, in <module>
    from pip import main
  File "/home/alexg/.local/lib/python3.5/site-packages/pip/__init__.py", line 26, in <module>
    from pip.utils import get_installed_distributions, get_prog
  File "/home/alexg/.local/lib/python3.5/site-packages/pip/utils/__init__.py", line 27, in <module>
    from pip._vendor import pkg_resources
  File "/home/alexg/.local/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3018, in <module>
    @_call_aside
  File "/home/alexg/.local/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3004, in _call_aside
    f(*args, **kwargs)
  File "/home/alexg/.local/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3046, in _initialize_master_working_set
    dist.activate(replace=False)
  File "/home/alexg/.local/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2578, in activate
    declare_namespace(pkg)
  File "/home/alexg/.local/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2152, in declare_namespace
    _handle_ns(packageName, path_item)
  File "/home/alexg/.local/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2092, in _handle_ns
    _rebuild_mod_path(path, packageName, module)
  File "/home/alexg/.local/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2121, in _rebuild_mod_path
    orig_path.sort(key=position_in_sys_path)
AttributeError: '_NamespacePath' object has no attribute 'sort'

我尝试按照某些答案运行pip3 install --upgrade pip setuptools,但每个pip命令都会给我错误。我被卡住了,无法做任何事情。

是什么原因导致的,如何解决?

我使用的是Python 3.5.2,Ubuntu 16.04


我的setuptools版本是36.6.0 - amadispstac
抱歉,我没有注意到 - 这与 setuptools 本身无关,而是与 pip 使用的供应商提供的 setuptools 副本有关。 - hoefling
16个回答

61

我遇到了与Python 3.5.2和pip3(9.0.1)相同的问题。我通过按照以下解决方法进行修复:https://github.com/pypa/setuptools/issues/885#issuecomment-307696027

更具体地说,我编辑了此文件的第2121~2122行内容:"sudo vim /usr/local/lib/python3.5/dist-packages/pip/_vendor/pkg_resources/__init__.py"

#orig_path.sort(key=position_in_sys_path)
#module.__path__[:] = [_normalize_cached(p) for p in orig_path]
orig_path_t = list(orig_path)
orig_path_t.sort(key=position_in_sys_path)
module.__path__[:] = [_normalize_cached(p) for p in orig_path_t]

4
太棒了!这真的起作用了(即使删除并重新安装pip也不行)。 - James
1
检查错误信息中文件的实际路径:在我的情况下,它是不同的Python安装位置,所以它在其他地方。不过,它完美地工作了! - Luis
1
谢谢。它解决了我的问题。Ubuntu 16.04 python3.6.4。 - user1941407
2
文件的确切路径可以从崩溃跟踪中找到以便进行编辑。例如,查看@amadispstac发布的原始错误日志:File "/home/alexg/.local/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2121, in _rebuild_mod_path - jkjung13
1
当然,一旦您升级了 pip,这个修复将会失效。 - ebosi
我还必须编辑文件“/usr/lib/python3/dist-packages/pkg_resources/init.py”。现在它可以正常工作了。 - ddas

60

升级setuptools对我很有帮助:

pip3 install --upgrade setuptools

1
如果你遇到了“Permission denied”错误,考虑使用“pip3 install --user --upgrade setuptools”。加油^^ - tngotran

11

我正在使用virtualenv,升级setuptools对我没有用。有效的方法是使用这个解决办法

pip uninstall setuptools -y && pip install setuptools

11

这可能听起来有些奇怪,因为我曾经遇到过这个问题并尝试了在SO和GitHub问题中提到的所有方法。但后来我使用easyinstall安装了pip,现在pip命令可以正常工作了。也许现在有两个pip软件包了,但错误已经消失了。

easy_install pip


1
这对我有用(尽管我不得不重新安装一些软件包) - an4s
在执行了 easy_install pip 后,我尝试了以下命令:pip install --upgrade pip && pip install --upgrade setuptools。这对我起作用了。 - splintercell

7

以下是最终为我解决问题的答案。由于 pip 受到了破坏,我无法使用它来升级自身或 setuptools,并且使用 easy_install 也会出现相同的问题。因此,我尝试使用 Python 安装 pip

答案如下:

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py 
pip install --upgrade setuptools

4

尝试执行以下命令 -
pip install -U pip
pip install -U setuptools

如果编辑 __init__.py 没有帮助。


4
我尝试了上述大多数建议的解决方法,但由于pip3无法正常工作,所以没有任何结果。后来我找到了这个链接: https://deeptalk.lambdalabs.com/t/trying-to-uninstall-tensorflow-or-matplotlib-pip-package-throws-attributeerror--namespacepath-object-has-no-attribute-sort/310 我认为这可能是我们大多数人遇到的问题。我尝试了建议的解决方案,pip3又可以正常工作了。
对于我来说,matplotlib不在dist-packages中,而是在site-packages中,所以对我有用的命令是:
sudo rm ~/.local/lib/python3.5/site-packages/matplotlib-3.0.3-py3.5-nspkg.pth

当然,您需要根据Matplotlib的版本和位置更改上面的路径。


3

这可能意味着你的依赖关系出了问题。

尝试从头开始卸载pip3,然后它应该可以正常工作。

如果还不行,在你的情况下删除你的pip安装。

rm -r /home/alexg/.local/lib/python3.5/site-packages/pip/

为了确保下一次顺利进行,最好使用虚拟环境来工作 :)


我使用apt安装了pip3,即使我清除了python3-pip,我仍然得到相同的错误! - amadispstac
这就是 Python 的糟糕之处! - Naveed
@Naveed 确实如此! - adrpino

0

我在使用poetry时遇到了同样的问题。

正在运行

poetry run pip install --upgrade pip setuptools

而不是

pip install --upgrade pip setuptools

问题已解决。


0

其他发布的答案对我都不起作用,但运行以下命令解决了问题:

sudo apt-get purge --auto-remove python3-pkg-resources python3-setuptools


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接