如何在Snow Leopard上强制使用32位Python及其他32位/64位问题

37 投票
7 回答
41548 浏览
提问于 2025-04-15 18:10

当我在我的Mac上从bash终端运行以下命令时:

$ file /usr/bin/python

我得到了以下三行输出:

/usr/bin/python (for architecture x86_64):  Mach-O 64-bit executable x86_64
/usr/bin/python (for architecture i386):    Mach-O executable i386
/usr/bin/python (for architecture ppc7400): Mach-O executable ppc

这似乎表明Python是为所有三种架构编译的,或者类似的意思?根据我在设置MySQL时遇到的一些错误,我相信我使用的版本是64位的。那么我有两个问题:

  1. 我怎么知道这一点呢?

  2. 我怎么能把Python改成32位的呢?有没有比重新编译更简单的方法?

  3. 为什么在bash终端中运行arch命令返回i386,这似乎表明我不是在“64位模式”下,而我知道我的处理器是64位的Mac?

抱歉,这些问题可能都是新手问题,32位和64位的事情让我很困惑,我相信有一些命令或工具可以让这个过程更简单。

7 个回答

19

在Snow Leopard上与virtualenv一起使用的解决办法

danielrsmith的回答对我在不使用virtualenv时有效,但使用virtualenv后,它会复制一个python可执行文件,这就导致它无法正常工作:

$ which python
/Users/cogg/.virtualenvs/tweakeats/bin/python

$ python
[...]
>>> import sys
>>> sys.maxint
9223372036854775807

因为这是一个python的复制品,所以我用lipo工具去掉了64位的架构。这样我就可以在virtualenv中使用32位的python 2.6了:

$ lipo -info /Users/cogg/.virtualenvs/tweakeats/bin/python
Architectures in the fat file: /Users/cogg/.virtualenvs/tweakeats/bin/python are: x86_64 i386 ppc7400
$ mv /Users/cogg/.virtualenvs/tweakeats/bin/python /Users/cogg/.virtualenvs/tweakeats/bin/python.old
$ lipo -remove x86_64 /Users/cogg/.virtualenvs/tweakeats/bin/python.old -output /Users/cogg/.virtualenvs/tweakeats/bin/python
$ python
[...]
>>> import sys
>>> sys.maxint
2147483647
24

这是一个关于如何在Mac电脑上让Python以32位模式运行的说明。你可以通过访问这个链接了解更多信息:http://www.jaharmi.com/2009/08/29/python_32_bit_execution_on_snow_leopard

如果你想让Python使用32位版本,可以在终端里输入这行代码:$ defaults write com.apple.versioner.python Prefer-32-Bit -bool yes

30
  1. 你可以通过 platform 模块来了解你正在使用的 Python 版本(sys 模块也有一些简单的帮助工具)。

  2. 在 Mac OS X 上,你可以运行一个“胖二进制文件”,选择你想要的架构,比如说,

    arch -i386 /usr/bin/python

建议你去修改 /usr/lib/python 这个文件夹(使用 lipo 命令)——这样做很可能会让你的系统变得无法使用,因为你在动系统文件。也许你可以考虑从 python.org 安装一个单独的 Python 版本(用于应用程序),而不去碰系统自带的 Python,这样的做法会更安全!-)

至于你的第三个问题,嗯,这个我就不知道了——这确实是个难题,建议去 superuser.com 问问(而且这问题似乎和 Python 完全无关,也和编程没什么关系;-)。

撰写回答