(对于缺少或适当的链接深表歉意;系统不允许我添加两个以上的链接。)
不幸的是,我学到了一个很难的方法:你不应该在macosx(特别是10.6.8)中破坏默认的Python安装。在
在使用python.org网站2.6.6(http://www.python.org/getit/releases/2.6.6/)和2.5.4(http://www.python.org/getit/releases/2.5.4/)的安装程序,我有比苹果提供的更成熟的Python版本(这对开发非常有利),但是已经破坏了系统的核心功能(这对其他一切都是不利的)到目前为止,最明显的中断是在尝试运行namebench(https://code.google.com/p/namebench/)、Blink(http://icanblink.com/)和Mercurial(https://www.mercurial-scm.org/)时。从我所能收集到的信息来看,这是小径。在
在默认安装中,路径应该类似于this question中概述的路径。相反,我的是这样的:
$ /usr/bin/python2.6 -V
Python 2.6.6
$ which python
/usr/bin/python
$ python
Python 2.6.6 (r266:84374, Aug 31 2010, 11:00:51)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> for i in sys.path:
... print i
...
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/pip-1.0.2-py2.6.egg
/Library/Frameworks/Python.framework/Versions/2.6/lib/python26.zip
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-darwin
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/plat-mac/lib-scriptpackages
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-old
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages
(2.5版的情况与此类似,但为了简单起见,我还是选择2.6版。)
问题似乎是不包括:
这解释了为什么Blink和namebench找不到PyObjC(Is PyObjC pre-installed on OSX SL?),而Mercurial找不到它的模块(在/Library/Python/2.6中)
Python bug tracker中的问题#4865部分地解决了这个特定的问题,这个问题已经在2.7及更高版本中得到了修复。但由于它是“一个特性请求,而不是一个错误修复”,它还没有被后传到2.5和2.6。即使这样,看看提交的修复程序(http://hg.python.org/lookup/r70778),我也不确定它是否解决了对“Extras”目录的引用不足的问题。在
我知道我可以通过手动更改来手动向Python添加路径站点.py. 我还可以使用PYTHONPATH环境变量。我不想因为改变而造成更多的伤害站点.py和更改PYTHONPATH仅对使用我的用户帐户从shell运行的脚本/应用程序有效。在
我可以让这些最新版本的Python引用与默认框架安装相同的路径吗?如果是的话,最好的办法是什么?如果没有,是否有可接受的方法回滚到系统默认值?在
您误解了Python安装在osx上的工作方式。每个Python实例都有自己的
site-packages
目录。框架安装程序的标准位置在框架中的./lib/pythonx.y/site-packages
。所以对于python.org网站安装到/Library/Frameworks/Python.framework
中的安装程序,您将在此处找到它的2.6site-packages
:苹果对它随OSX发布的Python版本做了一些修改。从OS X 10.5以后,系统python安装在:
/System/Library/Frameworks/Python.framework
苹果选择在每个版本的非标准
^{pr2}$./Extras
目录中包含一些额外的第三方软件包。它还为每个版本的site-packages
目录使用非标准位置。它们是在/Library/Python/
中创建的,因此用户安装的包不会修改/System/Library
中的任何内容。因此,对于苹果提供的python2.6,它的site-packages
目录是:可以认为是由
./Extras
中的包扩展的。在每个Python实例都有一个单独的}之间共享包。最明显的问题是,C编译器版本、OS X ABI(
site-packages
目录。即使是Python的同一个次要版本,即2.6,也不可能在不同实例的{MACOSX_DEPLOYMENT_TARGET
)、SDK版本和/或用于构建Python解释器的CPU体系结构以及随后由Distutils用来构建包含在第三方软件包中的C扩展模块的CPU架构之间经常存在差异。在在macosx10.6中,苹果提供的Python是使用gcc-4.2构建的,只针对osx10.6,它包括3个CPU架构(
i386
,x86_64
,和ppc
)。这个python.org网站Python2.6的安装程序也是为在旧系统上运行而构建的,因此目标是10.3及更高版本,使用gcc-4.0,并且只有32位(i386
和ppc
)。因此,一般来说,不能同时运行为一个Python构建的C扩展模块。在这意味着,通常情况下,您需要为每个Python安装所需的第三方软件包的单独副本,如果它们还没有包含在Python中。这包括基本项,如})。10.5+中的系统python包含
easy_install
(来自setuptools
或{easy_install
版本,它们的/usr/bin
版本。如果安装python.org网站Python,您需要为它安装一个单独的版本;默认情况下,easy_install
命令将安装在Python框架中的./bin
目录中;这是Distutils的默认位置。这就是为什么建议您将此目录添加到shell路径(和python.org网站Python2的安装程序默认情况下会自动执行)。在Issue4865引入的变更并不是一个很好的解决方案,可能会因为C扩展模块而失败。我不指望它在将来的版本中保留在Python中。在
同时安装python.org网站Python决不会破坏系统Python中的任何内容,因为它们是使用不同文件系统位置的完全独立的安装。唯一可能改变的是,当您键入一个特定的名称时,将调用哪个Python实例。主要由shell PATH环境变量的搜索顺序控制。如前所述python.org网站默认情况下,安装程序会更改顺序,但系统Python仍然可以使用其绝对路径
/usr/bin/python2.6
。或者您可以恢复对shell配置文件的更改,例如,.bash_profile
。在相关问题 更多 >
编程相关推荐