Подтвердить что ты не робот

Как заставить Python быть 32-бит на Snow Leopard и другие 32-битные/64-битные вопросы

Когда я запускаю следующее из оболочки bash на моем Mac:

$ file /usr/bin/python

Я получаю следующие три строки:

/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

это, по-видимому, указывает на то, что Python был скомпилирован для всех трех архитектур или что-то в этом роде? Я полагаю, основываясь на некоторых ошибках, которые я испытывал при попытке настроить MySQL, что версия, которую я использую, - это 64-разрядная версия. Итак, два вопроса:

  • Как бы я знал это?

  • Как я могу изменить Python на 32-битный? Что-то менее решительное, чем повторная компиляция с различными настройками компиляции?

  • Почему arch из оболочки bash возвращает i386, которая, по-видимому, указывает, что я не в "64-разрядном режиме", когда я знаю, на основе моего процессора, я запускаю 64 -битный Mac?

Извините, что это, вероятно, все вопросы новичка, вся 32/64-битная вещь расстраивает дерьмо из меня, и я уверен, что есть некоторые команды/инструменты, которые упростили бы это.

4b9b3361

Ответ 1

  • Вы можете многое узнать о версии Python, которую вы используете через модуль platform (модуль sys также имеет несколько простых помощников)

  • В Mac OS X вы можете запустить "жирный бинарный" с выбранной вами архитектурой, например,

    arch -i386/usr/bin/python

Я не рекомендую изменить /usr/lib/python сам (с помощью команды lipo) - вы можете легко сделать вашу систему непригодной для использования, взломав системные файлы. Возможно, установка отдельного Python из python.org(для приложений) при выходе из системы Python сама по себе является приемлемой для вас стратегией - это определенно безопаснее, чем изменение системных файлов! -)

Что касается вашего третьего вопроса, хммм, этот для меня - и определенно вопрос для superuser.com(а также совершенно не связанный с Python, он также кажется совершенно не связанным с программированием;).

Ответ 3

Исправить для использования с virtualenv на Snow Leopard

Ответ danielrsmith работает для меня, когда я не использую virtualenv, но virtualenv делает копию исполняемого файла python, из-за чего он не работает:

$ which python
/Users/cogg/.virtualenvs/tweakeats/bin/python

$ python
[...]
>>> import sys
>>> sys.maxint
9223372036854775807

потому что это копия python, я использовал lipo для удаления 64-битной архитектуры. Это позволяет мне использовать 32-битный python 2.6 с 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

Ответ 4

Ответ принят. Но я думаю, что третий вопрос все еще остается без ответа. Я нашел, что это интересный вопрос, так же как и некоторые исследования. Вот ответ, который я нашел в другом форуме SO -

SnowLeopard запускает 32-разрядное системное программное обеспечение и приложения на 32-разрядных компьютерах Intel, а также 64-разрядное системное программное обеспечение и 32-разрядные и 64-разрядные приложения на 64-разрядных компьютерах Intel. Настольная версия Snow Leopard загружает 32-битное ядро ​​по соображениям совместимости kext и драйверов, но все пространство пользователя работает 64-разрядным. Mac OS X Server загружается в 64-битное ядро. Core 2 Duo - это 64-разрядная машина. Попробуйте $sysctl hw.cpu64bit_capable или sysctl hw.optional.x86_64, чтобы убедиться, что у вас 64-разрядный процессор. arch всегда будет отображать i386 на оборудовании Intel как в Leopard, так и в Snow Leopard. - cdespinosa 22.09.2009 в 4:23

Оригинальная ссылка - Mac OSX 10.6 компилятор: загадочный опыт с 32 и 64 бит

Ответ 5

Третий вопрос связан с 32/64-битным ядром

только потому, что у вас 64-разрядная ОС и 64-битный процессор процессора не означает, что вы загружаете 64-битное ядро ​​в Mac OSX

Если у вас есть Mac с 10.6 снежным барсом на нем из factory, то он по умолчанию отправлен в 32-битный режим

вам нужно будет отредактировать системные настройки для загрузки 64-битного режима

(не уверен в изменениях 10.7 или 10.8, поскольку последнее, что я использую, - снежный лев, но я считаю, что они могут загружать 64-битное ядро ​​с помощью factory -default)

10.6 - с терминала запустите команду:

 :*sudo nvram boot-args="arch=x86_64"

ИЛИ

10.6 - с терминала запустите команду:

sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.Boot 'Kernel Flags' 'arch=x86_64'

Ответ 6

Я пробовал много разных способов выполнить тест Skype4Py script, используя

arch -i386

Что работало в конце концов, рассматривался путь segfault для заявленной 64-битной версии python и помещался в мой заголовочный файл:   #!/System/Library/Frameworks/Python.framework/Версии/2,7/Ресурсы/Python.app/Содержание/MacOS/Python

После того, как я поместил эту строку вверху и добавил права на выполнение для моего файла, я мог бы использовать,   arch -i386 skype.py

И он будет работать без проблем.

Ответ 7

После огромного количества проб и ошибок, которые я сам пробовал некоторые из приведенных выше предложений, я наткнулся на следующую символическую ссылку:

/usr/local/bin/python2-32

указывая на:

/Library/Frameworks/Python.framework/Versions/2.7/bin/python2-32

И я замечаю, что когда я запускаю этот Python, он запускается в 32-битном режиме (в отличие от /Library/Frameworks/Python.framework/Versions/2.7/bin/python2). Это можно наблюдать в Activity Monitor.

Примечание: как указывали другие в другом месте, platform.architecture() не всегда является хорошим индикатором. Он показывает "64-бит" для этого 32-битного процесса.