当我创建virtualenv时,即使已经在OSX中设置为32位,python也会以64位运行

ken*_*nok 2 python macos virtualenv mysql-python 32bit-64bit

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

在环境之外,一切都以32位运行,这很好.但是有了一个新项目,我将继续研究需要django 1.3和大量的依赖项,所以我做了一个virtualenv.

我已经设法安装好一切,除了mysql-python(通过pip)得到"mach -o错误架构"的错误.我用virtualenv中的"import sys; sys.maxint"检查了我的python解释器,python以64位运行.

我已经设置了systemwide for python以32位运行"defaults write com.apple.versioner.python Prefer-32-Bit -bool yes"

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

Ned*_*ily 8

Apple用于Prefer-32-bit在OS X 10.6中为Pythons系统实现它们的大部分"魔力" 都在/usr/bin/python其中调用真正的Python解释器,这些解释器符号链接/usr/bin/python2.6/usr/bin/python2.5. virtualenv将真正的解释器复制到virtualenv bin目录中,以便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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 用于lipo从通用二进制文件中仅提取32位arch.

    $ 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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 安装并使用较新的32位Python 2.6或2.7(python.org提供的安装程序)