'pip3 --version'失败,出现SyntaxError

Jas*_*ske 2 python setuptools osx-mavericks

这一切都开始了,当我开始安装请求库为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
Run Code Online (Sandbox Code Playgroud)

当我运行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)
Run Code Online (Sandbox Code Playgroud)

仅出于理智目的,这是我进入交互式口译员时看到的内容:

$ 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()
Run Code Online (Sandbox Code Playgroud)

与更新pip3有关的许多其他答案都建议我使用此命令更新pip3,该命令pip3 install --upgrade pip会产生相同的错误,或者我使用easy_install -U pip了该命令,但由于brew如何设置Python,它只会更新Python 2.7.5版本(没有easy_install3)。有任何想法吗?

aba*_*ert 5

根本问题是,您以某种方式将一个仅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*
Run Code Online (Sandbox Code Playgroud)

这可能会破坏其他依赖它的软件包。一旦一切正常,您就可以pip3 list用来查看已安装的所有站点包并进行测试。如果您想变得偏执,请执行以下操作:

$ pip3 list > mypackages
$ rm -rf <each site-package directory>
$ brew uninstall python3
$ brew install python3
$ pip3 install -r mypackages
Run Code Online (Sandbox Code Playgroud)

您可能想要同样地清理Homebrew 2.7(或仅将其报废并仅使用Apple的-尤其是因为我很确定您仍在运行Apple的),以及Apple 2.7的站点程序包(而不是Apple的Python本身) ,当然,因为您无法将其卸载)。