37

当我从 Mac 上的 bash shell 运行以下命令时:

$ 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. 当我基于我的处理器知道我正在运行 64 位 Mac 时,为什么arch从 bash shell 返回i386似乎表明我不在“64 位模式”?

抱歉,这些可能都是新手问题,整个 32/64 位的东西让我很沮丧,我相信有一些命令/工具可以让这更容易。

4

7 回答 7

30
  1. 您可以通过该模块找到很多关于您正在运行的 Python 版本的信息platform(该sys模块还有一些简单的助手)

  2. 在 Mac OS X 上,您可以使用您选择的架构运行“胖二进制”,例如,

    拱 -i386 /usr/bin/python

建议更改 /usr/lib/python 本身(使用lipo命令)——您可以通过篡改系统文件轻松使系统无法使用。也许从 python.org 安装一个单独的 Python(出于应用程序的目的),同时让系统 Python 单独运行对你来说是一种可以接受的策略——这绝对比更改系统文件更安全!-)

至于你的第三个问题,嗯,这对我来说是一个障碍——而且绝对是 superuser.com 的一个问题(与 Python 完全无关,它似乎也与编程完全无关;-)。

于 2010-01-18T19:21:54.400 回答
24

http://www.jaharmi.com/2009/08/29/python_32_bit_execution_on_snow_leopard

$ defaults write com.apple.versioner.python Prefer-32-Bit -bool yes

于 2010-01-18T19:18:13.440 回答
19

修复了在 Snow Leopard 上与 virtualenv 一起使用的问题

当我不使用 virtualenv 时,danielrsmith 的答案对我有用,但是 virtualenv 会复制 python 可执行文件,导致它无法工作:

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

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

因为这是python的副本,所以我在上面使用了lipo来移除64位架构。这使我可以将 32 位 python 2.6 与 virtualenv 一起使用:

$ 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
于 2010-06-17T05:33:01.847 回答
6

答案已被接受。但我认为第三个问题仍然没有答案。我发现这是一个有趣的问题,因此也进行了一些研究。这是我在另一个 SO 论坛中找到的答案 -

SnowLeopard 在 32 位 Intel 机器上运行 32 位系统软件和应用程序,在 64 位 Intel 机器上运行 64 位系统软件和 32 位和 64 位应用程序。出于 kext 和驱动程序兼容性的原因,Snow Leopard 的桌面版本启动 32 位内核,但所有用户空间都运行 64 位。Mac OS X Server 引导至 64 位内核。Core 2 Duo 是 64 位机器。尝试 $ sysctl hw.cpu64bit_capable 或 sysctl hw.optional.x86_64 来验证您是否拥有 64 位 CPU。arch 将始终在 Leopard 和 Snow Leopard 的 Intel 硬件上显示 i386。– cdespinosa 2009 年 9 月 22 日在 4:23

原始链接 - Mac OSX 10.6 编译器:32 位与 64 位的令人费解的体验

于 2011-07-01T18:10:21.177 回答
0

第三个问题与 32 / 64 位内核有关

仅仅因为您拥有支持 64 位的操作系统和支持 64 位的 CPU 处理器,并不意味着您正在 Mac OSX 中启动 64 位内核

如果您从工厂购买了带有 10.6 雪豹的 Mac,那么它默认以 32 位模式发货

您必须编辑系统设置以启动 64 位模式

(不确定对 10.7 或 10.8 的更改,因为我使用的最新版本是 snow leo,但我相信它们可能会在出厂默认情况下启动 64 位内核)

10.6 - 从终端运行命令:

 :*sudo nvram boot-args="arch=x86_64"

或者

10.6 - 从终端运行命令:

sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.Boot 'Kernel Flags' 'arch=x86_64'
于 2012-11-07T17:15:06.130 回答
0

我尝试了许多不同的方法来执行 Skype4Py 测试脚本,使用,

arch -i386

最终起作用的是查看声称的 64 位版本 python 的段错误路径并将其放入我的头文件中:#!/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app /内容/MacOS/Python

在我将此行放在顶部并向我的文件添加执行权限后,我可以使用 arch -i386 skype.py

它会毫无问题地运行。

于 2013-08-08T15:58:50.570 回答
0

经过大量的反复试验,我自己尝试了上面的一些建议,我偶然发现了以下符号链接:

/usr/local/bin/python2-32

指向:

/Library/Frameworks/Python.framework/Versions/2.7/bin/python2-32

我观察到,当我运行这个 Python 时,它以 32 位模式启动(与 相比/Library/Frameworks/Python.framework/Versions/2.7/bin/python2)。这可以在活动监视器中观察到。

注意:正如其他人在其他地方指出的那样,platform.architecture()并不总是一个好的指标。它显示此 32 位进程的“64 位”。

于 2016-01-15T16:07:50.653 回答