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

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

Запись от iamvic размещена 09.12.2020 в 14:02
Показов 10467 Комментарии 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 вне форума
 
Новые блоги и статьи
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru