这一切都开始了,当我开始安装请求库为Python 3(我在OSX小牛运行与Python 2.7.5(由安装brew install python
)和3.4.2(由安装brew install python3
)。当我运行pip3 --version
(或任何有关pip3命令),我看到以下内容:
$ pip3 --version
Traceback (most recent call last):
File "/usr/local/bin/pip3", line 7, in <module>
from pip import main
File "/usr/local/lib/python3.4/site-packages/pip/__init__.py", line 11, in <module>
from pip.vcs import git, mercurial, subversion, bazaar # noqa
File "/usr/local/lib/python3.4/site-packages/pip/vcs/mercurial.py", line 9, in <module>
from pip.download import path_to_url
File "/usr/local/lib/python3.4/site-packages/pip/download.py", line 22, in <module>
from pip._vendor import requests, six
File "/usr/local/lib/python3.4/site-packages/pip/_vendor/requests/__init__.py", line 53, in <module>
from .packages.urllib3.contrib import pyopenssl
File "/usr/local/lib/python3.4/site-packages/pip/_vendor/requests/packages/urllib3/contrib/pyopenssl.py", line 49, in <module>
from ndg.httpsclient.ssl_peer_verification import SUBJ_ALT_NAME_SUPPORT
File "/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/ndg/httpsclient/ssl_peer_verification.py", line 17
except ImportError, e:
^
SyntaxError: invalid syntax
当我运行Python 2.7.5版本时,我看到以下内容:
$ pip --version
pip 1.5.6 from /Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg (python 2.7)
仅出于理智目的,这是我进入交互式口译员时看到的内容:
$ python3
Python 3.4.2 (default, Oct 19 2014, 17:52:17)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.51)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
$ python
Python 2.7.5 (default, Mar 9 2014, 22:15:05)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
与更新pip3有关的许多其他答案都建议我使用此命令更新pip3,该命令pip3 install --upgrade pip
会产生相同的错误,或者我使用easy_install -U pip
了该命令,但是由于brew如何设置Python,它只会更新Python 2.7.5版本(没有easy_install3
)。有任何想法吗?
根本问题是,您以某种方式将仅Python 2.x的软件包安装到了3.x站点软件包中。
在此基础上,实际上您已经相互交叉了两个不同的Python 2.7安装程序(Apple和Homebrew),这可能与如何将2.7程序包也集成到3.x中有关……
无论如何,这种中断的原因pip
是它pip
具有多种可选依赖项,如果存在,它将尝试导入,其中一些依赖项也是如此,依此类推,最终,开始pip
导入ndg-httpsclient
包。
我不确定你是怎么得到那个包裹的。标准的Homebrew 3.x会在安装目录之外的目录中查找两个额外的site-packages目录(python3
然后启动,import sys; print(sys.path)
以查看其看起来的所有位置,包括stdlib和site)pip3
。
在这种情况下,你已经以某种方式安装的2.x版ndg-httpsclient
成/usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages
。
由于您没有使用它进行安装,pip
而且,更重要的是,由于您无法pip
首先运行,因此您不能仅安装pip uninstall
它。所以:
rm -rf /usr/local/Cellar/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/ndg*
这可能会破坏其他依赖它的软件包。一旦一切正常,您就可以pip3 list
用来查看已安装的所有站点包并进行测试。如果您想变得偏执,请执行以下操作:
$ pip3 list > mypackages
$ rm -rf <each site-package directory>
$ brew uninstall python3
$ brew install python3
$ pip3 install -r mypackages
您可能想要类似地清理Homebrew 2.7(或仅将其报废并仅使用Apple的-尤其是因为我很确定您仍在运行Apple的Homebrew),以及Apple 2.7的站点程序包(而不是Apple的Python本身) ,当然,因为您无法将其卸载)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句