How do I force Python to be 32-bit on Snow Leopard and other 32-bit/64-bit questions

When I run the following from a bash shell on my Mac:

$ file /usr/bin/python

I get the following three lines:

/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

this would seem to indicate that Python has been compiled for all three architectures or something like that? I believe, based on some errors I had while trying to setup MySQL, that the version I'm using is the 64-bit version. So two questions:

  1. How would I have known that?

  2. How could I change Python to be 32-bit instead? Something less drastic than re-compile with different compile settings?

  3. Why does arch from a bash shell return i386 which would seem to indicate I'm not in "64-bit mode" when I know based on my processor I'm running a 64-bit Mac?

Sorry these are probably all newbie questions, the whole 32/64-bit thing is frustrating the crap out of me and I'm sure there are some commands/tools that would make this easier.


Solution 1:

  1. You can find out a lot about the Python version you're running via the platform module (the sys module also has a few simple helpers)

  2. On Mac OS X, you can run a "fat binary" with your chosen architecture with, for example,

    arch -i386 /usr/bin/python

I do not recommend altering /usr/lib/python itself (with the lipo command) -- you could easily make your system unusable by tampering with system files. Maybe installing a separate Python from python.org (for application purposes) while leaving the system Python alone is an acceptable strategy to you -- it's definitely safer than altering system files!-)

As for your third question, hmmm, this one's a stumper to me -- and definitely a question for superuser.com (as well as completely unrelated to Python, it also seems completely unrelated to programming;-).

Solution 2:

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

Solution 3:

Fix for use with virtualenv on Snow Leopard

danielrsmith's answer works for me when I am not using virtualenv, but virtualenv makes a copy of the python executable which causes it not to work:

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

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

because this is a copy of python, I used lipo on it to remove the 64-bit architecture. This allows me to use 32-bit python 2.6 with 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

Solution 4:

The answer has been accepted. But I think the 3rd question is still unanswered. I found it to be an interesting question and so did some research for the same. Here is the answer I found in another SO forum -

SnowLeopard runs 32-bit system software and applications on 32-bit Intel machines, and 64-bit system software and 32-bit and 64-bit applications on 64-bit Intel machines. The desktop version of Snow Leopard boots a 32-bit kernel for reasons of kext and driver compatibility, but all user space runs 64-bit. Mac OS X Server boots into a 64-bit kernel. Core 2 Duo is a 64-bit machine. Try $ sysctl hw.cpu64bit_capable or sysctl hw.optional.x86_64 to verify that you have a 64-bit cpu. arch will always show i386 on Intel hardware in both Leopard and Snow Leopard. – cdespinosa Sep 22 '09 at 4:23

Original link - Mac OSX 10.6 compiler: a puzzling experience with 32 vs 64 bit