pip权限及运行报错求助:AttributeError: '_NamespacePath'无sort属性
解决pip3报错AttributeError: '_NamespacePath' object has no attribute 'sort'的方案
Hey,我之前在多Python版本的Ubuntu系统里也踩过这个坑!这个报错几乎可以肯定是setuptools版本太旧,和Python3的新特性不兼容导致的,尤其是你同时装了系统Python和Anaconda,很容易出现依赖冲突。下面是新手友好的解决步骤:
1. 先修复系统自带的Python3.5环境
你说pip3和pip3.5都报错,先从系统的Python3.5入手:
- 直接用Python3.5自带的ensurepip工具来升级pip和setuptools,这样能确保操作的是对应版本的依赖:
python3.5 -m ensurepip --upgrade - 如果提示权限不够,加上
sudo再跑一次:sudo python3.5 -m ensurepip --upgrade - 升级完之后,再输入
pip3.5 -V测试一下,应该就能正常显示版本信息了。
2. 搞定Anaconda环境的问题
Anaconda也出现同样错误,说明它的setuptools也没跟上:
- 先激活你的Anaconda默认环境(base环境):
要是你用的是新版conda,换成source activate baseconda activate base就行 - 然后强制重新安装并升级setuptools:
conda install -y --force-reinstall setuptools - 或者也可以用conda环境里的pip来升级:
pip install --upgrade setuptools - 测试一下conda环境里的
pip -V(此时应该对应Python3.6),应该就没问题了。
3. 给Python新手的避坑小建议
多版本Python共存很容易搞混,给你几个实用小技巧:
- 尽量别混用系统pip和conda的pip,激活对应环境后再操作包管理,避免互相污染;
- 安装包时,优先用
pythonX.X -m pip install <包名>的方式,比如python3.5 -m pip install requests,这样能确保调用的是你指定的Python版本的pip,不会跑错; - 如果以后经常要切换Python版本,可以试试
pyenv工具,专门用来管理不同版本的Python,比直接共存省心多了。
简单说下报错原因
旧版本的setuptools不知道Python3里的_NamespacePath对象有sort方法,而新版本的pip或者Python会调用这个方法,就导致了这个AttributeError。只要把setuptools升级到兼容的版本,问题就解决啦。
内容的提问来源于stack exchange,提问作者Marvin
相关产品推荐
相关产品推荐

