python.org发布的版本能很好地处理Apple框架构建吗?
(对于缺少或正确的链接深表歉意;系统不允许我添加两个以上的链接。) 不幸的是,我学到了一个很难的方法,那就是不要在MacOSX(特别是10.6.8)中干扰默认的Python安装 在使用python.org安装程序2.6.6()和2.5.4()之后,我有了比Apple提供的python版本更成熟的python版本(这对于开发来说是非常好的),但破坏了核心系统功能(这对其他任何东西都不好)。到目前为止,最明显的中断是在尝试运行namebench()、Blink()时和Mercurial()。从我所能收集到的信息来看,这是一条小路 在默认安装中,路径应该类似于中概述的路径。相反,我的是这样的:python.org发布的版本能很好地处理Apple框架构建吗?,python,macos,pyobjc,Python,Macos,Pyobjc,(对于缺少或正确的链接深表歉意;系统不允许我添加两个以上的链接。) 不幸的是,我学到了一个很难的方法,那就是不要在MacOSX(特别是10.6.8)中干扰默认的Python安装 在使用python.org安装程序2.6.6()和2.5.4()之后,我有了比Apple提供的python版本更成熟的python版本(这对于开发来说是非常好的),但破坏了核心系统功能(这对其他任何东西都不好)。到目前为止,最明显的中断是在尝试运行namebench()、Blink()时和Mercurial()。从我所能
$ /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版。)
问题似乎是不包括:
- /Library/Python/2.6/site-packages/*.egg
- /Library/Python/2.6/site-packages
- /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6
- /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/Python
我可以让这些较新版本的Python引用与默认框架安装相同的路径吗?如果是这样,最好的方法是什么?如果没有,是否有一种可接受的回滚到系统默认值的方法?您误解了Python安装在OS X上的工作方式。每个Python实例都有自己的
站点包
目录。框架安装程序的标准位置位于框架内的/lib/pythonx.y/site packages
。因此,对于安装到/Library/Frameworks/python.framework
中的python.org安装程序,您可以在这里找到它的2.6站点包
:
/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/
苹果对OSX发行版附带的Python版本进行了一些修改。从OS X 10.5开始,系统python安装在:
/System/Library/Frameworks/Python.framework
苹果选择在每个版本的非标准/Extras
目录中包含一些额外的第三方软件包。它还为每个版本的站点包
目录使用非标准位置。它们是在/Library/Python/
中创建的,大概是为了让用户安装的软件包不会修改/System/Library
中的任何内容。因此,对于苹果提供的Python 2.6,其站点包
目录为:
/Library/Python/2.6/site-packages
并且可以被认为是由/Extras
中的包扩展的
每个Python实例都有一个单独的站点包
目录。跨不同实例的站点包
共享包,即使是相同的Python次要版本(即2.6版),也是不可能的。最明显的问题是,C编译器版本、OS X ABI(MACOSX_DEPLOYMENT_TARGET
)、SDK版本和/或用于构建Python解释器的CPU体系结构(Distutils随后使用它们来构建第三方包中包含的C扩展模块)之间往往存在差异
在Mac OS X 10.6中,苹果提供的Python是使用gcc-4.2构建的,仅针对OSX 10.6,包括3种CPU架构(i386
、x86\u 64
和ppc
)。python 2.6的python.org安装程序也是为在较旧的系统上运行而构建的,因此目标为10.3及更高版本,使用gcc-4.0,并且仅32位(i386
和ppc
)。因此,一般来说,您不能将为一个Python构建的C扩展模块与另一个Python一起运行
这意味着,一般来说,您需要为每个Python安装所需的第三方软件包的单独副本,如果它们尚未包含在该Python中的话。这包括一些基本项目,如easy\u install
(来自setuptools
或Distribute
)。10.5+中的系统python在/usr/bin
中为它们提供了easy\u-install
版本。如果你安装了一个python.org python,你需要为它安装一个单独的版本;默认情况下,easy\u install
命令将安装在Python框架中的/bin
目录中;这是Distutils的默认位置。这就是为什么建议您将此目录添加到shell路径(默认情况下,python 2的python.org安装程序会自动执行此操作)
Issue4865引入的更改并不是一个很好的解决方案,使用C扩展模块可能会失败。在未来的版本中,我不会依赖于它仍保留在Python中
另外,安装python.org python不会破坏python系统中的任何东西,因为它们是完全独立的安装,使用不同的文件系统位置。唯一可能发生变化的是,当您键入特定名称时,将调用哪个Python实例。这主要由shell PATH环境变量的搜索顺序控制。如前所述,python.org安装程序默认为
$ echo $PATH
/Library/Frameworks/Python.framework/Versions/2.6/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
$ which python python2.6
/Library/Frameworks/Python.framework/Versions/2.6/bin/python
/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6
$ python -V
Python 2.6.6
$ python2.6 -V
Python 2.6.6
$ /usr/bin/python -V
Python 2.6.1
$ /usr/bin/python2.6 -V
Python 2.6.1
#
# remove python.org Python 2.6 from PATH
#
$ export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
$ which python python2.6
/usr/bin/python
/usr/bin/python2.6
$ python -V
Python 2.6.1
$ python2.6 -V
Python 2.6.1