2

我的设置是:2.6.1 python(苹果默认,雪豹),virtualenv,并使用 virtualenvwrapper

在环境之外,一切都以 32 位运行,这很好。但是对于一个新项目,我将处理需要 django 1.3 和大量依赖项,所以我制作了一个 virtualenv。

我已经成功地安装了所有东西,除了 mysql-python(通过 pip)得到“mach -o wrong architecture”的错误。我已经在 virtualenv 中使用“import sys;sys.maxint”检查了我的 python 解释器,并且 python 以 64 位运行。

我已经通过“defaults write com.apple.versioner.python Prefer-32-Bit -bool yes”将系统范围内的python设置为32位运行

有谁知道为什么会在 virtualenv 内部发生这种情况?

4

1 回答 1

8

Apple 用来Prefer-32-bit在 OS X 10.6 中为系统 Python 实现的大部分“魔法”都在/usr/bin/python其中调用真正的 Python 解释器,这些解释器在/usr/bin/python2.6和符号链接/usr/bin/python2.5virtualenv将真正的解释器复制到 virtualenvbin目录中,从而Prefer-32-bit绕过处理。

在确保 32 位操作的选项中:

  1. 使用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
    
  2. 用于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
    
  3. 安装和使用更新的仅 32 位 Python 2.6 或 2.7(安装程序可从python.org 获得

于 2011-07-07T06:55:27.483 回答