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:
How would I have known that?
How could I change Python to be 32-bit instead? Something less drastic than re-compile with different compile settings?
Why does
arch
from a bash shell returni386
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:
You can find out a lot about the Python version you're running via the
platform
module (thesys
module also has a few simple helpers)-
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