为什么我无法按照苹果的说法更改系统默认的Python?
在这个帮助页面上
http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/python.1.html
苹果公司说:
更改默认的Python版本
使用
% defaults write com.apple.versioner.python Version 2.5
将会让版本2.5成为用户默认的版本,当你运行python和pythonw命令时(versioner是用来选择版本的软件的内部名称)。
但这根本不管用!
tppllc-Mac-Pro:~ swirsky$ python --version
Python 2.7
tppllc-Mac-Pro:~ swirsky$ defaults write com.apple.versioner.python Version 2.5
tppllc-Mac-Pro:~ swirsky$ python --version
Python 2.7
而且让32位的python成为默认的切换也不行
64位支持
版本2.6支持64位执行(默认是开启的)。版本2.5只支持32位执行。
就像Python的版本一样,python命令可以在32位和64位执行之间选择(当两者都可用时)。使用:
% defaults write com.apple.versioner.python Prefer-32-Bit -bool yes
可以让32位执行成为用户默认(使用
/Library/Preferences/com.apple.versioner.python
会设置系统范围的默认)。环境变量VERSIONER_PYTHON_PREFER_32_BIT
也可以使用(优先级高于偏好文件):% export VERSIONER_PYTHON_PREFER_32_BIT=yes #
Bourne风格的shell或者
% setenv VERSIONER_PYTHON_PREFER_32_BIT yes #
C风格的shell
我现在陷入困境了。我想让wxpython运行。但是在苹果的Python 2.7上运行不了,因为没有64位的carbon支持,而wx的cocoa支持还没完成。
=== 更新 ===
感谢大家的帮助!谜团已经解开。有一件事让我困惑的是,我在我的笔记本电脑(最近的i5 MacBook Pro)上运行(32位)wxpython没有问题,但在我的台式机(最近的i7 Mac Pro)上却运行不了。
它们都有Python 2.7,我以为是一样的。但其实并不是!
Mac Pro有x86_64版本
tppllc-Mac-Pro:~ swirsky$ file `which python`
/Library/Frameworks/Python.framework/Versions/2.7/bin/python: Mach-O universal binary with 3 architectures
/Library/Frameworks/Python.framework/Versions/2.7/bin/python (for architecture i386): Mach-O executable i386
/Library/Frameworks/Python.framework/Versions/2.7/bin/python (for architecture ppc7400): Mach-O executable ppc
/Library/Frameworks/Python.framework/Versions/2.7/bin/python (for architecture x86_64): Mach-O 64-bit executable x86_64
而我的笔记本没有:
thrilllap-2:thrillscience swirsky$ file `which python`
/Library/Frameworks/Python.framework/Versions/2.7/bin/python: Mach-O universal binary with 2 architectures
/Library/Frameworks/Python.framework/Versions/2.7/bin/python (for architecture ppc): Mach-O executable ppc
/Library/Frameworks/Python.framework/Versions/2.7/bin/python (for architecture i386): Mach-O executable i386
我会在我的台式机上重新安装没有x86_64版本的那个,因为我现在不需要64位支持。
2 个回答
我觉得在 OS X 10.6 里自带的 python
版本是 2.6
。你在命令行看到的是 2.7,这说明你可能是通过其他方式安装了 2.7。(可能是用 macports、fink,或者直接编译的。)这些不是苹果官方提供的 python 通常不支持苹果的版本管理系统。你能运行以下命令吗?
$ which python
它显示的是 /usr/bin/python
吗?
defaults write com.apple.versioner.python
和 VERSIONER_PYTHON_PREFER_32_BIT
是苹果公司开发的设置,只适用于 OS X 10.6(Python 2.6.1)中自带的 /usr/bin/python
。更新一下:这也适用于 OS X 10.7 Lion。你可能是通过 python.org 的安装包安装了 Python 2.7。目前 python.org 有两个 2.7 的安装包,一个(适用于 10.5 及以上)同时支持 32 位和 64 位。另一个(适用于 10.3 及以上,包括 10.6)只支持 32 位。可以推测你安装的是第一个。如果想让它以 32 位模式运行,可以使用 arch
命令来调用它:
$ arch -i386 python2.7
或者,如果你总是想使用 32 位版本,可以用另一个安装包重新安装 2.7。需要注意的是,python.org 的 64 位安装包在 2.7 中是新的。不过不幸的是,它有一些问题,比如 Tkinter
以及使用它的程序(包括 IDLE
)在 OS X 10.6 上会出错。这个问题会在后续的维护更新中解决。如果你在 10.6 上需要这些功能,暂时还是用只支持 32 位的安装包吧。
你现在输入的 python
命令调用的是 2.7,很可能是因为 python.org 的安装包更新了你的登录配置文件,比如 .bash_profile
,把它的框架 bin 目录放在了你的 shell 搜索 PATH
的最前面。
$ echo $PATH
/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/bin: # ...
$ which python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python
$ /usr/bin/python
Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> ^D
$ python
Python 2.7 (r27:82508, Jul 3 2010, 21:12:11)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> ^D
$ python -c 'import sys;print("%x"%sys.maxint)'
7fffffffffffffff
$ arch -x86_64 python -c 'import sys;print("%x"%sys.maxint)'
7fffffffffffffff
$ arch -i386 python -c 'import sys;print("%x"%sys.maxint)'
7fffffff