如何在Mac OS X上强制使用64位Python?

4

在使用--arch x86_64选项编译sip时,我遇到了以下错误。

prosseek:siplib smcho$ python -c 'import sip; print sip'
Traceback (most recent call last):
  File "", line 1, in 
ImportError: dlopen(./sip.so, 2): no suitable image found.  Did find:
        ./sip.so: mach-o, but wrong architecture

我发现预编译的Mac OS X python(snow leopard)是通用的,并且没有获取到64位库。我猜它运行在32位模式下。

file /usr/bin/python 
/usr/bin/python: Mach-O universal binary with 3 architectures
/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
prosseek:siplib smcho$ file sip.so
sip.so: Mach-O 64-bit bundle x86_64

我怎样才能强制python以64位模式运行呢?当我在Textmate上运行相同的代码时,没有问题。所以,我认为Textmate无论如何都应该在64位模式下运行。

新增

  • 这个链接展示了如何识别我正在运行的Python是32位还是64位。我已经检查过我的Python是32位。
  • 这个链接 展示了如何制作32/64位Python,但对我不起作用。
2个回答

6

尝试使用 arch(1),并提供特定版本的Python:

arch -x86_64 /usr/bin/python2.6

实际上,系统应该为您选择第一个合适的架构。如下:
$ file /usr/bin/python2.5
/usr/bin/python2.5: Mach-O universal binary with 2 architectures
/usr/bin/python2.5 (for architecture i386): Mach-O executable i386
/usr/bin/python2.5 (for architecture ppc7400):  Mach-O executable ppc

$ file /usr/bin/python2.6
/usr/bin/python2.6: Mach-O universal binary with 3 architectures
/usr/bin/python2.6 (for architecture x86_64):   Mach-O 64-bit executable x86_64
/usr/bin/python2.6 (for architecture i386): Mach-O executable i386
/usr/bin/python2.6 (for architecture ppc7400):  Mach-O executable ppc

如果python选择了2.5版本,那么你就不能使用64位版本,但是如果它选择了2.6版本,则应该自动选择x86_64变体,如下所述。如果是前者,请尝试获取python_select并将版本更改为2.6。

不应该在10.6中这样做,因为Python 2.6和3.0默认为64位,而2.5仅提供32位。@prosseek,您使用的是哪个版本的Mac OS X? - Jon Shier
我使用的是10.6.4版本,而arch -x86_64对我来说不起作用。我添加了更多的注释。 - prosseek
@Kenny:很奇怪,但它默认使用i386而不是x86_64。 - prosseek
2
虽然当前在10.6中使用由苹果提供的python2.6时可以工作,但请注意,这仅适用于在/usr/bin中使用特定版本路径 - 如上所述。应注意,Apple文档中控制此项的方式不同,并且将来可能会更改。文档方式涉及使用python命令,要么设置VERSIONER_PYTHON_PREFER_32_BIT环境变量,要么更改默认的plist。有关更多信息,请参见man 1 python。此外,对于其他python,例如MacPorts或python.org安装程序python,在2.7(或3.2)之前的python中简单的“arch”方法将无法工作。 - Ned Deily

1

好的,在你做这个之前一定要非常小心,因为它需要其他的东西也是64位的。突然间,如果mod_python不能工作,那么你就需要重新编译apache。然后还有你所有的Python模块,像tkinter/tix。如果你和我一样在10.5版本上,不要冒险去尝试,就用32位的吧。

而且如果你不知道http://www.macports.org/,那就记住它是你的朋友。:-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接