Can python.org releases play nice with Apple framework builds?
(对缺乏或正确链接的高级道歉;系统不允许我添加两个以上。)
不幸的是,我已经学会了很难在Mac OS X中使用默认的Python安装(特别是10.6.8)。
使用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版本比Apple提供的版本更加成熟(非常适合开发),但是已经破坏了核心系统功能(这对其他一切都很糟糕。)到目前为止最明显的休息时间尝试运行namebench(https://code.google.com/p/namebench/),Blink(http://icanblink.com/)和Mercurial(https://www.mercurial-scm.org/ )。从我可以收集的信息来看,它是由路径决定的。
在默认安装中,路径应类似于此问题中概述的内容。相反,我看起来像这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | $ /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(是否在OSX SL上预装了PyObjC?)而且Mercurial找不到它的模块(在/Library/Python/2.6中)
Python错误跟踪器中的问题#4865部分解决了这个特殊问题,此问题已针对2.7及更高版本进行了修复。但是因为它是"功能请求而不是错误修复",所以没有被反向移植到2.5和2.6。即便如此,看看已提交的修复程序(http://hg.python.org/lookup/r70778),我不确定它是否解决了对"Extras"目录缺少引用的问题。
我知道我可以通过手动更改site.py来手动添加Python的路径。我也可以使用PYTHONPATH环境变量。我不想通过改变site.py来造成任何进一步的破坏,并且更改PYTHONPATH仅对使用我的用户帐户从shell运行的脚本/应用程序有效。
我是否可以使用这些更新版本的Python来引用与默认框架安装相同的路径?如果是这样,最好的方法是什么?如果没有,是否有可以回滚到系统默认值的方法?
您误解了Python安装在OS X上的工作方式。每个Python实例都有自己的
1 | /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/ |
Apple对OS X版本附带的Python版本进行了一些修改。从OS X 10.5开始,系统Pythons安装在:
Apple选择在每个版本的非标准
1 | /Library/Python/2.6/site-packages |
可以认为已经被
每个Python实例都有一个单独的
在Mac OS X 10.6中,Apple提供的Python使用gcc-4.2构建,仅针对OSX 10.6,包括3个CPU架构(
这意味着,通常,您需要为每个Python安装所需的第三方软件包的单独副本,如果它们尚未包含在该Python中。这包括基本项目,如
Issue4865引入的更改并不是一个很好的解决方案,可能会因C扩展模块而失败。我不会依赖它在未来的版本中保留在Python中。
另外,安装python.org Python决不会破坏系统Python中的任何内容,因为它们是使用不同文件系统位置的完全独立安装。唯一可能改变的是在键入特定名称时调用哪个Python实例。这主要由shell PATH环境变量的搜索顺序控制。如上所述,默认情况下,python.org安装程序会更改该顺序,但使用其绝对路径
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | $ 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 |