这一切都始于我开始安装Python 3的Requests库(我在OSX Mavericks上运行Python 2.7.5(由brew install python
安装)和3.4.2(由{{1安装)当我运行brew install python3
(或与pip3命令相关的任何内容)时,我看到了这一点:
pip3 --version
当我运行Python 2.7.5版本时,我看到了这一点:
$ 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
出于理智目的,当我进入交互式口译员时,我会看到以下内容:
$ pip --version
pip 1.5.6 from /Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg (python 2.7)
许多与更新pip3相关的其他答案建议我使用此推荐$ 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 install --upgrade pip
但是由于brew如何设置Pythons,它只更新Python 2.7.5版本(没有easy_install -U pip
)。有什么想法吗?
答案 0 :(得分:3)
根本问题是你以某种方式在你的3.x站点包中安装了一个只有Python 2.x的软件包。
根据这一点,您实际上已经有两个不同的Python 2.7安装(Apple&#39; s和Homebrew&#39; s)相互交叉,这可能与您如何将2.7包装进入3.x以及......
无论如何,这是打破pip
的原因是pip
有各种可选依赖项,如果存在则尝试导入,其中一些依赖于它们,依此类推,最终开始向上pip
正在导入ndg-httpsclient
包。
我不确定你是怎么得到这个包裹的。一个标准的Homebrew 3.x查看两个额外的site-packages目录(启动python3
然后import sys; print(sys.path)
以查看它看起来的所有地方,包括stdlib和site){{1}安装到。
在这种情况下,您以某种方式将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
你可能想要同样清理你的Homebrew 2.7(或者只是废弃它并且只使用Apple&#39; - 特别是因为我非常确定你还在运行Apple&#39;)和Apple 2.7的网站包(当然,不是Apple的Python本身,因为你无法卸载它)。