Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python.org发布的版本能很好地处理Apple框架构建吗?_Python_Macos_Pyobjc - Fatal编程技术网

python.org发布的版本能很好地处理Apple框架构建吗?

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()。从我所能

(对于缺少或正确的链接深表歉意;系统不允许我添加两个以上的链接。)

不幸的是,我学到了一个很难的方法,那就是不要在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
这解释了为什么Blink和namebench找不到PyObjC(),而Mercurial找不到它的模块(在/Library/Python/2.6中)

PythonBug tracker中的问题部分解决了这个特殊的问题,这个问题已经在2.7版和更高版本中修复。但因为它是“一个功能请求,而不是一个错误修复”,所以没有被移植到2.5和2.6。即使如此,看看提交的补丁(),我也不确定它是否解决了缺少对“Extras”目录的引用的问题

我知道我可以通过手动更改site.py来手动向Python添加路径。我还可以使用PYTHONPATH环境变量。我不希望通过修改site.py造成任何进一步的损害,而对PYTHONPATH的修改只对使用我的用户帐户从shell运行的脚本/应用程序有效


我可以让这些较新版本的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