Форум программистов, компьютерный форум, киберфорум
iamvic
Войти
Регистрация
Восстановить пароль
Путевые заметки в процессе познания Python и PyQt/PySide.
Помни - только тег CODE не портит код добавлением пробела в начало пустой строки.

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

Запись от iamvic размещена 09.12.2020 в 14:02
Показов 10654 Комментарии 2
Метки python, python 3, windows

Чтоб самому не забыть и не потерять, положу-ка это в блог.

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

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

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

win_check.py:
Python
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\\{!s} is exist?'.format(key_reg), is_exist)
И пускачи для Win64, поскольку питоны там ставились без ланчера и добавления путей в PATH.

py32.cmd:
Code
1
2
3
4
5
6
7
8
@ECHO OFF
 
SETLOCAL
 
SET PATH=C:\Program Files (x86)\Python38-32\Scripts\;C:\Program Files (x86)\Python38-32\;%PATH%
python.exe %*
 
ENDLOCAL
py64.cmd:
Code
1
2
3
4
5
6
7
8
@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):
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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):
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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):
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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 вроде бы
напрашивается соблюдение таких необходимых и достаточных условий:
Python
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!!!')
Windows 8 и 10 под рукой не было, поэтому Python 3.9.x не проверить.
Метки python, python 3, windows
Размещено в Памятка
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 2
Комментарии
  1. Старый комментарий
    Аватар для Welemir1
    3.9 на вин 7 уже не встает и 32 разрядные версии канули с его выходом в лету, так что скоро 64 бит онли!
    Запись от Welemir1 размещена 10.12.2020 в 13:13 Welemir1 вне форума
  2. Старый комментарий
    Цитата Сообщение от Welemir1
    3.9 на вин 7 уже не встает и 32 разрядные версии канули с его выходом в лету, так что скоро 64 бит онли!
    А если в будущее смотреть с оптимизмом, то, наверное, не за горами и 128-разрядные процессоры.
    И эта проблема снова встанет в полный рост .
    Запись от iamvic размещена 10.12.2020 в 19:55 iamvic вне форума
 
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru