为什么我无法按照苹果的说法更改系统默认的Python?

8 投票
2 回答
10432 浏览
提问于 2025-04-16 03:39

在这个帮助页面上

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 个回答

3

我觉得在 OS X 10.6 里自带的 python 版本是 2.6。你在命令行看到的是 2.7,这说明你可能是通过其他方式安装了 2.7。(可能是用 macports、fink,或者直接编译的。)这些不是苹果官方提供的 python 通常不支持苹果的版本管理系统。你能运行以下命令吗?

$ which python

它显示的是 /usr/bin/python 吗?

12

defaults write com.apple.versioner.pythonVERSIONER_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

撰写回答