在Ubuntu上,Python3的pip3安装出现问题

我在我的Ubuntu16.04上成功安装了Python3和pip3,但是pip3 install出现了问题。我该如何解决这个问题?pip3 install的错误信息如下:
# pip3 install xlwt
Traceback (most recent call last):
File "/usr/bin/pip3", line 9, in <module>
  from pip import main
File "/usr/lib/python3/dist-packages/pip/__init__.py", line 21, in <module>
  from pip._vendor.requests.packages.urllib3.exceptions import DependencyWarning
ModuleNotFoundError: No module named 'pip._vendor.requests'

sudo -H pip3 install --upgrade pip的输出结果

sudo -H pip3 install --upgrade pip  
Traceback (most recent call last):
File "/usr/bin/pip3", line 9, in <module>
  from pip import main
File "/usr/lib/python3/dist-packages/pip/__init__.py", line 21, in <module>
  from pip._vendor.requests.packages.urllib3.exceptions import DependencyWarning
ModuleNotFoundError: No module named 'pip._vendor.requests'

which pip3pip3 --version的输出:

# which pip3
/usr/bin/pip3

# pip3 --version
Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in <module>
    from pip import main
  File "/usr/lib/python3/dist-packages/pip/__init__.py", line 21, in <module>
    from pip._vendor.requests.packages.urllib3.exceptions import DependencyWarning
ModuleNotFoundError: No module named 'pip._vendor.requests'

P.S. Python2 pip 运行成功。"which pip" 和 "pip --version" 的输出:
# which pip
/usr/bin/pip

# pip --version
pip 1.5.4 from /usr/local/lib/python2.7/dist-packages/pip-1.5.4-py2.7.egg (python 2.7)

Python和Python3的安装信息如下:
# which python
/usr/bin/python
# which python3
/usr/bin/python3

# python -V
Python 2.7.14
# python3 -V
Python 3.6.3  

你在帖子中说的是16.04,但使用了14.04的标签。哪个版本是正确的? - edwinksl
116.04是正确的。刚才我找不到16.04的标签。抱歉。 - mlpy
8个回答

你的pip3出了点问题,所以先将其移除再重新安装。打开终端,输入以下命令:

sudo apt purge python3-pip  
sudo rm -rf '/usr/lib/python3/dist-packages/pip'  
sudo apt install python3-pip   
cd
cd .local/lib/python3/site-packages
sudo rm -rf pip*  
cd
cd .local/lib/python3.5/site-packages
sudo rm -rf pip*  
python3 -m pip install xlwt

4我尝试了,但还是出现相同的错误:https://imgur.com/a/nAdqU。 - mlpy
我也遇到了同样的问题。当我执行sudo apt install python3-pip时,我得到了以下错误信息:以下软件包有未满足的依赖关系: python3-pip : 依赖于:python-pip-whl (= 8.1.1-2) 但是 8.1.1-2ubuntu0.4 将被安装 建议:build-essential 但它将不会被安装 建议:python3-dev (>= 3.2) 但它将不会被安装 建议:python3-wheel 但它将不会被安装 E: 无法纠正问题,您有损坏的软件包。 - Kristada673
@Kristada673 试着阅读这个问题的答案:https://askubuntu.com/questions/363200/e-unable-to-correct-problems-you-have-held-broken-packages。DragonLord的回答对我有用。 - karel
@karel 你最后一条命令行中的--user参数有什么作用?没有解释的话,看起来像是针对你的环境特定的东西。 - FKEinternet

安装python3-pip软件包会在文件/usr/bin/pip3中创建一个Python脚本。为了运行,需要从pip模块导入main()函数(from pip import main)。 这种方法路径仅适用于打包的pip版本(我这里是9.0.1)。
运行pip3 install --upgrade pip后,pip版本变为18.1,并且main()已经移动到pip._internal中。
使用命令python3 -m pip --version查看您的情况是否与相同情况相符(当/usr/bin/pip3损坏时,也可以使用此方法来使用pip3)。
如果是这样,请在文件/usr/bin/pip3中将第9行替换为: from pip._internal import main 问题将得到解决。 (在Ubuntu 18.04发行版上测试通过)

我更改了导入后,出现了不同的错误File "/usr/bin/pip3", line 11, in <module> sys.exit(main()) TypeError: 'module' object is not callable - Mzq

这是我发现有用的内容:
  1. sudo rm -rf /usr/local/lib/python3.5/dist-packages
  2. 永远不要在sudo下运行pip3

虽然这可能解决问题,但你能否详细说明一下?为什么要删除这个目录(或许可以加上关于python3.5路径的警告),为什么不能使用sudo运行,等等... - Robert Riedl
我对这个并不是很专业,只是想分享一下对我有效的方法。 - Jan Lachnitt
我真的无法推荐这种方法。 - Mr. T
在搜索了SO和SE几个小时后,这是唯一解决我的问题的方法。 - Old Markus

首先删除损坏的pip3:
rm /user/bin/pip3 /user/local/bin/pip3

重新安装新的一个:
sudo apt-get remove python3-pip
sudo apt-get install python3-pip

这是一个问题,但你可以找到解决办法。
rm /user/bin/pip3 /user/local/bin/pip
sudo apt-get remove python-pip

重新安装
sudo apt-get install python-pip

正如@Vincent H.所提到的,我遇到了同样的问题。
回溯(最近的调用): "/home/ashish/.local/bin/pip3"文件中的第7行, 从pip._internal导入主要部分 导入错误:没有名为'pip._internal'的模块
解决这个问题的方法是在.local/bin/pip3中将pip._internal替换为pip,可以通过sudo gedit .local/bin/pip3来实现。

遇到了同样的问题,安装了openssl后问题解决了。

但是我的Ubuntu上已经安装了openssl:https://imgur.com/a/60kIM。可能是由于其他原因引起的。 - mlpy

你可以这样做:
sudo apt purge python3-pip  
sudo rm -rf '/usr/lib/python3/dist-packages/pip'  
sudo apt install python3-pip
sudo cp /usr/bin/pip3 /usr/local/bin/

这对我来说很有用,当我的pip3出现问题时。