【问题标题】:Pip version limboPip 版本的边缘
【发布时间】:2012-10-03 19:49:53
【问题描述】:

我的情况基本上与
Python 2.7 on System, PIP and Virtualenv still using 2.6 - How do I switch them to use 2.7

中描述的情况完全相同

也就是说,我的 mac 默认使用 Python 2.7,而 Pip 安装到 2.6

我关注Ned Deily's answer 并使用我的默认 Python 安装了 easy_install,并使用它来安装 Pip。

现在我明白了:

$ which easy_install
/Library/Frameworks/Python.framework/Versions/2.7/bin/easy_install  
$ which pip
/Library/Frameworks/Python.framework/Versions/2.7/bin/pip  

好的,看起来不错。但是,我也明白了:

$ pip --version
pip 1.0.2 from /Library/Python/2.6/site-packages/pip-1.0.2-py2.6.egg (python 2.6)

并且 Pip 仍在安装到 2.6。

我错过了什么?


更新

也许这是一个线索 - 我刚刚运行了以下内容:

$ ls -la /usr/bin/python*  
-rwxr-xr-x  2 root  wheel  86000 May  4  2011 /usr/bin/python  
-rwxr-xr-x  5 root  wheel    925 May  4  2011 /usr/bin/python-config  lrwxr-xr-x  1 root  wheel     75 May  4  2011 /usr/bin/python2.5 ->
../../System/Library/Frameworks/Python.framework/Versions/2.5/bin/python2.5
lrwxr-xr-x  1 root  wheel     82 May  4  2011
/usr/bin/python2.5-config ->
../../System/Library/Frameworks/Python.framework/Versions/2.5/bin/python2.5-config
lrwxr-xr-x  1 root  wheel     75 May  4  2011 /usr/bin/python2.6 ->
../../System/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6
lrwxr-xr-x  1 root  wheel     82 May  4  2011
/usr/bin/python2.6-config ->
../../System/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6-config
-rwxr-xr-x  2 root  wheel  86000 May  4  2011 /usr/bin/pythonw lrwxr-xr-x  1 root  wheel     76 May  4  2011 /usr/bin/pythonw2.5 ->
../../System/Library/Frameworks/Python.framework/Versions/2.5/bin/pythonw2.5
lrwxr-xr-x  1 root  wheel     76 May  4  2011 /usr/bin/pythonw2.6 ->
../../System/Library/Frameworks/Python.framework/Versions/2.6/bin/pythonw2.6

$ ls -la /usr/local/bin/python*     
lrwxr-xr-x  1 ykessler  wheel  68
Nov 14  2011 /usr/local/bin/python ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python
lrwxr-xr-x  1 ykessler  wheel  71 Nov 14  2011
/usr/local/bin/python-32 ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python-32
lrwxr-xr-x  1 ykessler  wheel  75 Nov 14  2011
/usr/local/bin/python-config ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python-config
lrwxr-xr-x  1 ykessler  wheel  71 Nov 14  2011
/usr/local/bin/python2.7 ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7
lrwxr-xr-x  1 ykessler  wheel  74 Nov 14  2011
/usr/local/bin/python2.7-32 ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7-32
lrwxr-xr-x  1 ykessler  wheel  78 Nov 14  2011
/usr/local/bin/python2.7-config ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7-config
lrwxr-xr-x  1 ykessler  wheel  69 Nov 14  2011 /usr/local/bin/pythonw
-> ../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw
lrwxr-xr-x  1 ykessler  wheel  72 Nov 14  2011
/usr/local/bin/pythonw-32 ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw-32
lrwxr-xr-x  1 ykessler  wheel  72 Nov 14  2011
/usr/local/bin/pythonw2.7 ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw2.7
lrwxr-xr-x  1 ykessler  wheel  75 Nov 14  2011
/usr/local/bin/pythonw2.7-32 ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw2.7-32

所以看起来我的用户环境指向 2.7,但根环境指向 2.6?如何调和这两者?


更新 2:

好的,只是稍微转动一下螺丝:

$ sudo pip --version  
pip 1.2.1 from /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-1.2.1-py2.7.egg (python 2.7)
$ pip --version  
pip 1.0.2 from /Library/Python/2.6/site-packages/pip-1.0.2-py2.6.egg (python 2.6)

所以我的根指向 2.6 但sudo pip --version 指向 pip 2.7, 虽然我的本地用户指向 2.7,但 pip --version 指向 pip 2.6

???我的大脑开始发麻。

现在我刚刚做了sudo pip install {module},它在 2.7 中正确安装,但我希望我知道发生了什么......


更新 3:回答 Ned 的问题:

$ type pip  
pip is /Library/Frameworks/Python.framework/Versions/2.7/bin/pip  
$ echo $PATH  
/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/usr/X11/bin  
$ which pip  
/Library/Frameworks/Python.framework/Versions/2.7/bin/pip  
$ ls -l $(which pip)  
-rwxr-xr-x  1 ykessler  admin  358 Oct  3 15:30 /Library/Frameworks/Python.framework/Versions/2.7/bin/pip  
$ sudo bash  
bash-3.2# type pip  
pip is /Library/Frameworks/Python.framework/Versions/2.7/bin/pip  
bash-3.2# echo $PATH  
/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/usr/X11/bin  
bash-3.2# ls -l $(which pip)  
-rwxr-xr-x  1 ykessler  admin  358 Oct  3 15:30 /Library/Frameworks/Python.framework/Versions/2.7/bin/pip  

【问题讨论】:

  • head /Library/Frameworks/Python.framework/Versions/2.7/bin/pip上列出了什么python?
  • @Martijn: #!/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python
  • 如果你直接运行/Library/Frameworks/Python.framework/Versions/2.7/bin/pip --version?您的路径似乎很混乱,它仍然找到 Python 2.6 版本。
  • @Martijn:正确,直接指向它会显示正确的版本。我只是不确定默认路径如何在which 上指向 2.7,但在执行时指向 2.6
  • 您是否为pip 定义了shell 别名? echo $PATH 在同一个 shell 中提供了什么,而 pip 指向 Python 2.6?

标签: python macos pip


【解决方案1】:

在我的系统上,我有几个 easy_installs:

$ ls /usr/bin/easy_install*
/usr/bin/easy_install       /usr/bin/easy_install-2.5   /usr/bin/easy_install-2.6   /usr/bin/easy_install-2.7

还有几个点:

$ ls /usr/local/bin/pip*
/usr/local/bin/pip  /usr/local/bin/pip-2.5  /usr/local/bin/pip-2.6  /usr/local/bin/pip-2.7

正如您所说,您的用户环境似乎指向 2.7,但系统指向 2.6。在我看来,您有两种选择:

  1. 您可以使用 Apple 设置来切换系统 python 版本:$ defaults write com.apple.versioner.python Version 2.7$ export VERSIONER_PYTHON_VERSION=2.7。 (有关您的特定 OSX 版本的更多详细信息,请参阅man python。)
  2. 您可以使用 pip python 特定版本。 (例如:pip-2.7

【讨论】:

  • 您不能使用 VERSIONER_PYTHON_VERSION 指向非 Apple 安装的 Python,AFAIK。
  • @NedDeily 是的。但从上面的路径名来看,他使用的是 Apple 安装的 2.7 Python。
  • @akraut-no Ned 是对的-我自己安装了 python 2.7 来使用 GAE,但是很久以前
  • 对我来说不是。请注意,/Library/Frameworks/ 不是 /System/Library/Frameworks。而且 Apple 不会在其框架 bin 目录中包含 python-32 之类的内容。
  • @arkaut - 感谢您的建议 2 - 假设这可行,尽管我最终得到它与 sudo 一起工作,但不明白为什么......
【解决方案2】:

您可能遇到 $PATH 问题或权限问题或两者兼而有之。试试这个:

type pip
echo $PATH
which pip
ls -l $(which pip)
sudo bash
type pip
echo $PATH
ls -l $(which pip)

更新:在这两种情况下再尝试一件事:

env | grep PYTHON
sudo bash
env | grep PYTHON

然后我会查看site-packages目录的内容:

cd /Library/Frameworks/Python.framework/Versions/2.7
cd ./lib/python2.7/site-packages/
ls -al
more setuptools.pth

还有:

more $(which pip)
python2.7 -c 'import sys, pprint; pprint.pprint(sys.path)'
sudo python2.7 -c 'import sys, pprint; pprint.pprint(sys.path)'

【讨论】:

  • 我在我的问题中将结果发布在update 3 下。都指向2.7...?
  • 好吧,不用说,它都可以正常工作。但是,此时您已经采取了各种步骤,如果不详细了解您安装的 Python、easy_install 版本和源代码(setuptools 与 Distribute)、pip 版本的所有详细信息,就很难知道发生了什么,当您使用 sudo 与否时,您的 site-packages 目录的内容究竟是什么,哪些环境变量设置生效等等。也许还要检查一件事:您是否有一个 ~/.pydistutils.cfg 文件,如果有,它的内容是什么?
  • 没有。但是今天早上突然pip指向2.7安装!我真的不知道发生了什么变化,但非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多