Ответ 1
Для Python 2.6 и выше вы можете использовать sys.maxsize
как документально зарегистрированный здесь:
import sys
is_64bits = sys.maxsize > 2**32
ОБНОВЛЕНИЕ: Я замечаю, что я действительно не ответил на поставленный вопрос. Хотя вышеприведенный тест точно скажет вам, работает ли интерпретатор в 32-разрядной или 64-битной архитектуре, он не отвечает и не может ответить на вопрос о том, что представляет собой полный набор архитектур, которые этот интерпретатор был создан для и может работать. Как было отмечено в этом вопросе, это важно, например, для универсальных исполняемых файлов Mac OS X, где один исполняемый файл может содержать код для нескольких архитектур. Один из способов ответить на этот вопрос - использовать команду file
операционной системы. В большинстве систем он будет сообщать о поддерживаемых архитектурах исполняемого файла. Здесь, как это сделать в одной строке из командной строки оболочки в большинстве систем:
file -L $(python -c 'import sys; print(sys.executable)')
Используя систему Python по умолчанию для OS X 10.6, выход:
/usr/bin/python: Mach-O universal binary with 3 architectures
/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
В одной системе Linux:
/usr/bin/python: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, stripped
Кстати, здесь пример того, почему platform
не является надежным для этой цели. Снова используя систему Python на OS X 10.6:
$ arch -x86_64 /usr/bin/python2.6 -c 'import sys,platform; print platform.architecture()[0], sys.maxsize > 2**32'
64bit True
$ arch -i386 /usr/bin/python2.6 -c 'import sys,platform; print platform.architecture()[0], sys.maxsize > 2**32'
64bit False