创建虚拟环境时,Python在OSX中仍然以64位运行,而已设置为32位
我的环境设置是:2.6.1 版本的 Python(这是苹果默认的,适用于雪豹系统),我使用了 virtualenv,并且还用了 virtualenvwrapper。
在这个环境外面,一切都在 32 位下运行,这没问题。但是我有一个新项目需要用到 Django 1.3 和很多依赖,所以我创建了一个 virtualenv。
我已经成功安装了所有东西,除了 mysql-python(通过 pip 安装)出现了一个错误,提示“mach -o wrong architecture”。我在 virtualenv 里用“import sys; sys.maxint”检查了我的 Python 解释器,发现它在 64 位下运行。
我已经通过“defaults write com.apple.versioner.python Prefer-32-Bit -bool yes”设置了系统级别的 Python 运行在 32 位。
有没有人知道为什么在 virtualenv 里会出现这个问题?
1 个回答
苹果在 OS X 10.6 中实现他们的 Prefer-32-bit
功能时,很多“魔法”都藏在 /usr/bin/python
这个文件里。这个文件会调用真正的 Python 解释器,而这些解释器的快捷方式则放在 /usr/bin/python2.6
和 /usr/bin/python2.5
。而 virtualenv
会把真正的解释器复制到虚拟环境的 bin
目录中,这样就可以绕过 Prefer-32-bit
的处理了。
为了确保使用 32 位操作,有以下几种选择:
使用
arch
命令来启动解释器。$ virtualenv -p /usr/bin/python2.6 ./p $ ./p/bin/python -c 'import sys;print(sys.maxsize)' 9223372036854775807 $ arch -i386 ./p/bin/python -c 'import sys;print(sys.maxsize)' 2147483647
使用
lipo
从通用二进制文件中提取出 32 位的部分。$ file ./p/bin/python ./p/bin/python: Mach-O universal binary with 3 architectures ./p/bin/python (for architecture x86_64): Mach-O 64-bit executable x86_64 ./p/bin/python (for architecture i386): Mach-O executable i386 ./p/bin/python (for architecture ppc7400): Mach-O executable ppc $ cp ./p/bin/python ./p/bin/python-universal $ lipo ./p/bin/python-universal -thin i386 -output ./p/bin/python $ file ./p/bin/python ./p/bin/python: Mach-O executable i386 $ ./p/bin/python -c 'import sys;print(sys.maxsize)' 2147483647
安装并使用更新的仅支持 32 位的 Python 2.6 或 2.7(可以从 python.org 下载安装包)。