Как узнать разрядность python 32 или 64
Перейти к содержимому

Как узнать разрядность python 32 или 64

  • автор:

Выбираем разрядность Python3 для Linux

Здесь все очень просто, ставим интерпретатор Python в соответствии с «религией» UNIX. Какая разрядность у оперативной системы, такой ставим и Python.

Например, если система Linux стоит 64-бита, то и Python выбираем 64-бита. Аналогично, если у Вас 32-битная система Linux, соответственно и Python будем ставить 32-битный.

Как узнать какая разрядность оперативной системы в linux на примере Ubuntu:

Узнать разрядность ОС Linux Ubuntu можно различными способами. Приведу два наиболее распространенных способа, не требующих установки дополнительного программного обеспечения:

# Команда терминала `uname` с флагом `-m` ~$ uname -m # Консольная команда `arch` аналогична команде `uname -m`. ~$ arch

Обе команды работают и выводят аналогичную информацию. После запуска любой их них в окне терминала отобразится разрядность операционной системы:

  • 32-битная (i686 или i386)
  • 64-битная (x86_64).
  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Выбираем разрядность Python3 для Windows
  • Установка Python3 на ОС Windows
  • Установка Python3 на Ubuntu (Debian) из репозиториев
  • Выбираем разрядность Python3 для Linux
  • Установка Python 3.x из исходников на ОС Linux
  • Запуск и использование интерпретатора Python
  • Установка и использование PyPy3, совместимость с Python3
  • Когда следует переходить на новую версию Python

Выбираем разрядность Python3 для Windows

По опыту, использование 32-разрядной версии более безотказно. Если вы не работаете над приложениями, которые интенсивно используют память (в основном научные вычисления, которые используют более 2 ГБ памяти), Вам лучше использовать 32-разрядные версии Python.

Почему лучше использовать 32-разрядные версии Python для Windows:

  • приложение будет использовать меньше памяти;
  • меньше проблем с использованием COM (так как вы находитесь в Windows);
  • приложение использует DLL, они, скорее всего, также 32-разрядные. Python 64-бит не может загрузить 32-бит библиотеки без некоторых тяжелых хаков.
  • приложение использует библиотеки DLL, которые Вы компилируете самостоятельно, Вам придется скомпилировать их в 64-бит, что обычно сложнее сделать (особенно при использовании MinGW в Windows).
  • будете использовать PyInstaller или py2exe (а их Вы будете использовать). Эти инструменты будут генерировать исполняемые файлы с той же битностью интерпретатора Python, который установлен в системе.

64-битная версия позволяет одному процессу использовать больше ОЗУ, чем 32-битная. Вы можете обнаружить, что объем памяти удваивается в зависимости от того, что вы храните в ОЗУ (целые числа, в частности).

Пример «на пальцах»:

если ваше приложение потребляет > 2 ГБ ОЗУ в 32 битном интерпретаторе и вы переключитесь на 64 битный интерпретатор Python, то обнаружите, что ваше приложение теперь требует > 4 ГБ ОЗУ.

  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Выбираем разрядность Python3 для Windows
  • Установка Python3 на ОС Windows
  • Установка Python3 на Ubuntu (Debian) из репозиториев
  • Выбираем разрядность Python3 для Linux
  • Установка Python 3.x из исходников на ОС Linux
  • Запуск и использование интерпретатора Python
  • Установка и использование PyPy3, совместимость с Python3
  • Когда следует переходить на новую версию Python

К вопросу определения разрядности Python и Windows

В некоторых случаях определения разрядности Python недостаточно для принятия решения без выяснения
разрядности Windows, на которой он работает. 32-битный Python на 64-битной Windows — не редкость.
И вроде бы решения известны, но вот не чувствовал я в себе уверенности, применяя их.
Хотя в VirtualBox всё выглядело хорошо, но возможности проверить на реальном железе не было.

А тут как раз и подвернулась такая возможность. На подходящем железе c Intel Core 2 Duo сначала была
развёрнута Win7(32bit), затем — Win7(64bit). Ну и Python 3.8.6 (32bit/64bit).

Из надёрганного в Интернете по этой теме был слеплен скриптик для сбора данных.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
import ctypes print('ctypes.sizeof(ctypes.c_void_p) * 8 =', ctypes.sizeof(ctypes.c_void_p) * 8) print('') import os print('os.name =', os.name) print('') import platform print('platform.architecture() =', platform.architecture()) print('platform.machine() =', platform.machine()) print('platform.processor() =', platform.processor()) print('platform.system() =', platform.system()) print('platform.uname() =', platform.uname()) print('platform.win32_ver() =', platform.win32_ver()) print('platform.win32_edition() =', platform.win32_edition()) print('') import struct print('struct.calcsize("P") * 8 =', struct.calcsize('P') * 8) print('') import sys print('hex(sys.maxsize) =', hex(sys.maxsize)) print('(sys.maxsize > 0x100000000) is', sys.maxsize > 0x100000000) print('sys.platform =', sys.platform) print('sys.version() =', sys.version) print('sys.winver =', sys.winver) print('') import winreg key_reg = 'SOFTWARE\\Wow6432Node' is_exist = False try: reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) k = winreg.OpenKey(reg, key_reg) k.Close() is_exist = True except: pass print('HKEY_LOCAL_MACHINE\\ is exist?'.format(key_reg), is_exist)

И пускачи для Win64, поскольку питоны там ставились без ланчера и добавления путей в PATH.

@ECHO OFF SETLOCAL SET PATH=C:\Program Files (x86)\Python38-32\Scripts\;C:\Program Files (x86)\Python38-32\;%PATH% python.exe %* ENDLOCAL
@ECHO OFF SETLOCAL SET PATH=C:\Program Files\Python38\Scripts\;C:\Program Files\Python38\;%PATH% python.exe %* ENDLOCAL

И всё это было прогнано сначала на Win32, а затем на Win64.

Windows 7 (32bit), Python 3.8.6 (32bit):

C:\Tools>win_check.py ctypes.sizeof(ctypes.c_void_p) * 8 = 32 os.name = nt platform.architecture() = ('32bit', 'WindowsPE') platform.machine() = x86 platform.processor() = x86 Family 6 Model 15 Stepping 11, GenuineIntel platform.uname() = uname_result(system='Windows', node='usr-win32', release='7', version='6.1.7601', machine='x86', processor='x86 Family 6 Model 15 Stepping 11, GenuineIntel') platform.win32_ver() = ('7', '6.1.7601', 'SP1', 'Multiprocessor Free') platform.win32_edition() = Professional struct.calcsize("P") * 8 = 32 hex(sys.maxsize) = 0x7fffffff (sys.maxsize > 0x100000000) is False sys.platform = win32 sys.version() = 3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:37:30) [MSC v.1927 32 bit (Intel)] sys.winver = 3.8-32 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node is exist? True

Windows 7 (64bit), Python 3.8.6 (32bit):

C:\Tools>py32 win_check.py ctypes.sizeof(ctypes.c_void_p) * 8 = 32 os.name = nt platform.architecture() = ('32bit', 'WindowsPE') platform.machine() = AMD64 platform.processor() = Intel64 Family 6 Model 15 Stepping 11, GenuineIntel platform.uname() = uname_result(system='Windows', node='usr-win64', release='7', version='6.1.7601', machine='AMD64', processor='Intel64 Family 6 Model 15 Stepping 11, GenuineIntel') platform.win32_ver() = ('7', '6.1.7601', 'SP1', 'Multiprocessor Free') platform.win32_edition() = Professional struct.calcsize("P") * 8 = 32 hex(sys.maxsize) = 0x7fffffff (sys.maxsize > 0x100000000) is False sys.platform = win32 sys.version() = 3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:37:30) [MSC v.1927 32 bit (Intel)] sys.winver = 3.8-32 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node is exist? True

Windows 7 (64bit), Python 3.8.6 (64bit):

C:\Tools>py64 win_check.py ctypes.sizeof(ctypes.c_void_p) * 8 = 64 os.name = nt platform.architecture() = ('64bit', 'WindowsPE') platform.machine() = AMD64 platform.processor() = Intel64 Family 6 Model 15 Stepping 11, GenuineIntel platform.uname() = uname_result(system='Windows', node='usr-win64', release='7', version='6.1.7601', machine='AMD64', processor='Intel64 Family 6 Model 15 Stepping 11, GenuineIntel') platform.win32_ver() = ('7', '6.1.7601', 'SP1', 'Multiprocessor Free') platform.win32_edition() = Professional struct.calcsize("P") * 8 = 64 hex(sys.maxsize) = 0x7fffffffffffffff (sys.maxsize > 0x100000000) is True sys.platform = win32 sys.version() = 3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53) [MSC v.1927 64 bit (AMD64)] sys.winver = 3.8 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node is exist? True

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

1 2 3 4 5 6 7 8
if sys.platform == 'win32' and platform.machine() == 'x86': print('Windows (32bit) and Python (32bit)') elif sys.platform == 'win32' and sys.maxsize > 0x100000000: print('Windows (64bit) and Python (64bit)') elif sys.platform == 'win32': print('Windows (64bit) and Python (32bit)') else: print('This is NOT Windows. ')

Python. Как узнать имя и разрядность дистрибутива?

Здесь, правда, только информация о ядре и разрядности. Узнать дистр вряд ли можно из самой программы. Да и не нужно это.

provaton ★★★★★
( 09.12.12 16:28:34 MSK )
Ответ на: комментарий от provaton 09.12.12 16:28:34 MSK
WiseAlex ★
( 09.12.12 16:29:32 MSK ) автор топика
Ответ на: комментарий от WiseAlex 09.12.12 16:29:32 MSK

А зачем тебе это вообще надо?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *