如何在Snow Leopard和其他32位/ 64位问题上强制Python为32位

Bia*_*cki 36 python osx-snow-leopard 32bit-64bit

当我从Mac上的bash shell运行以下代码时:

$ file /usr/bin/python
Run Code Online (Sandbox Code Playgroud)

我得到以下三行:

/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
Run Code Online (Sandbox Code Playgroud)

这似乎表明Python已经针对所有三种架构进行了编译或类似的东西?我相信,基于我在尝试设置MySQL时遇到的一些错误,我使用的版本是64位版本.所以有两个问题:

  1. 我怎么知道的?

  2. 我怎么能把Python改成32位呢?用不同的编译设置重新编译的东西不那么激烈?

  3. 为什么arch从bash shell返回i386,这似乎表明我不是在"64位模式",当我知道基于我的处理器我运行的是64位Mac?

对不起,这些可能都是新手问题,整个32/64位的东西令我感到沮丧,我确信有一些命令/工具可以让这更容易.

Ale*_*lli 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完全无关,它似乎与编程完全无关;-).

  • 虽然`arch -i386 filename`通常会做正确的事情,但在10.6`arch -i386/usr/bin/python`仍将以64位模式运行Python(如果可能的话).使用`export VERSIONER_PYTHON_PREFER_32_BIT = yes`(参见Apple的`man 1 python`)或`arch -i386/usr/bin/python2.6`. (24认同)
  • 请注意,VERSIONER_PYTHON_PREFER_32_BIT环境变量是Apple在OS X 10.6(`/ usr/bin/python`)中提供的Python 2.6的一项功能.它对其他Pythons没有影响,比如python.org安装程序安装的那些. (7认同)

dan*_*ith 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

  • 那,或者使用`man 1 python`中描述的`VERSIONER_PYTHON_PREFER_32_BIT`环境变量. (6认同)
  • 完善.适用于Mac OS X Mavericks 10.9 (2认同)

cog*_*ogg 19

修复与Snow Leopard上的virtualenv一起使用

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

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

$ python
[...]
>>> import sys
>>> sys.maxint
9223372036854775807
Run Code Online (Sandbox Code Playgroud)

因为这是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
Run Code Online (Sandbox Code Playgroud)


Sum*_*mod 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的英特尔硬件上显示i386. - cdespinosa 09年9月22日4:23

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