Когда я создаю virtualenv, python работает в 64-битном режиме, даже если в OSX уже установлен 32-битный - PullRequest
2 голосов
/ 06 июля 2011

Моя настройка: 2.6.1 Python (Apple по умолчанию, снежный барс), virtualenv и использование virtualenvwrapper

Вне среды все работает в 32-битном режиме, что нормально.Но с новым проектом я собираюсь работать над потребностями django 1.3 и тоннами зависимостей, поэтому я создал virtualenv.

Мне удалось установить все хорошо, кроме mysql-python (через pip)получает ошибку "Mach -o неправильная архитектура".Я проверил мой интерпретатор Python с помощью «import sys; sys.maxint» внутри virtualenv, и python работает в 64-битном режиме.

Я уже установил общесистемный режим для запуска Python в 32-битном режиме через «по умолчанию»напишите com.apple.versioner.python Prefer-32-Bit -bool yes "

Кто-нибудь знает, почему это происходит внутри virtualenv?

1 Ответ

8 голосов
/ 07 июля 2011

Большая часть "магии", которую Apple использовала для реализации своих Prefer-32-bit для системы Pythons в OS X 10.6, содержится в /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
    
  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 )

...