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

4 投票
2 回答
7451 浏览
提问于 2025-04-16 01:00

我在用 --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(雪豹系统)是通用版本,但它没有获取到 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 个回答

1

好的,做这个的时候一定要非常小心,因为这需要其他东西也都是64位的。如果突然发现mod_python不工作了,那你就得重新编译apache。还有你所有的python模块,比如tkinter/tix。如果你和我一样用的是10.5版本,那就别去碰这个,还是用32位的吧。

如果你还不知道http://www.macports.org/,那记得它是你的好帮手哦。:-)

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。

撰写回答