Как заставить Python быть 32-битным на Snow Leopard и другие 32-битные / 64-битные вопросы - PullRequest
36 голосов
/ 18 января 2010

Когда я запускаю следующее из оболочки 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-битную версию.Итак, два вопроса:

  1. Откуда мне это знать?

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

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

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

Ответы [ 7 ]

30 голосов
/ 18 января 2010
  1. Вы можете многое узнать о версии Python, которую вы используете, с помощью модуля platform (модуль sys также имеет несколько простых помощников)

  2. В Mac OS X вы можете запустить «толстый двоичный файл» с выбранной вами архитектурой, например,

    arch -i386 / usr / bin / python

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

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

24 голосов
/ 18 января 2010

http://www.jaharmi.com/2009/08/29/python_32_bit_execution_on_snow_leopard

$ defaults write com.apple.versioner.python Prefer-32-Bit -bool yes

19 голосов
/ 17 июня 2010

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

ответ Даниэльсмита работает для меня, когда я не использую 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
6 голосов
/ 01 июля 2011

Ответ принят. Но я думаю, что третий вопрос до сих пор остается без ответа. Я нашел, что это был интересный вопрос, и некоторые исследования сделали то же самое. Вот ответ, который я нашел на другом 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 сентября 2009 года в 4:23

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

0 голосов
/ 15 января 2016

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

/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() не всегда является хорошим индикатором.Для этого 32-битного процесса показывается «64-бит».

0 голосов
/ 08 августа 2013

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

arch -i386

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

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

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

0 голосов
/ 07 ноября 2012

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

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

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

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

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

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'
...