Как использовать модуль platform для диагностики окружения
Основные возможности модуля platform
Модуль platform позволяет получить сведения о платформе, на которой выполняется скрипт: операционной системе, версии Python, архитектуре процессора и других параметрах. Это полезно для кросс-платформенной проверки совместимости, диагностики окружения и адаптации кода.
Как одним вызовом получить полную строку с информацией о системе?
Функция platform.platform() возвращает единую строку, объединяющую данные об ОС, версии Python и архитектуре. Это самый универсальный способ быстро узнать окружение.
import platform
info = platform.platform()
print(info)
Python module attributes (атрибуты модуля в python)
Linux-5.15.0-86-generic-x86_64-with-glibc2.35
Python module version (версия модуля python)
Параметры aliased (True/False) и terse (True/False) позволяют управлять форматом вывода.
Типичная ошибка:
Если модуль не импортирован, возникает NameError. Всегда следует начинать с import platform.
Решение:
Добавить импорт в начало скрипта.
Какая операционная система используется?
Функция platform.system() возвращает название ОС (Linux, Windows, Darwin и т.д.).
import platform
print(platform.system())
Python cpp module (взаимодействие python с модулями c++)
Linux
Python module cv2 (модуль cv2 (opencv) в python)
Возможная проблема:
На некоторых редких платформах может вернуться пустая строка или нестандартное имя. Для надёжности лучше использовать platform.uname().
Какая версия операционной системы?
platform.release() выдаёт номер релиза ядра или версии ОС, а platform.version() – более подробную строку.
import platform
print("Release:", platform.release())
print("Version:", platform.version())
Python encodings module (модуль encodings в python)
Release: 5.15.0-86-generic Version: #96-Ubuntu SMP Wed Sep 20 12:00:00 UTC 2023
Platform module python (модуль platform в python)
Особенности:
Формат version() сильно зависит от ОС. На Windows это может быть строка вида “10.0.19045”, а на macOS – “Darwin Kernel Version 23.1.0”. Не стоит полагаться на конкретный шаблон без проверки.
Как узнать архитектуру процессора и платформы?
platform.processor() возвращает строку с названием процессора (часто пустую), platform.machine() – архитектуру (x86_64, ARM).
import platform
print("Processor:", platform.processor())
print("Machine:", platform.machine())
Python string module (модуль string в python)
Processor: x86_64 Machine: x86_64
Module sys python (модуль sys в python)
Типичная ошибка:
processor() на многих Linux-системах возвращает пустую строку, если не установлен пакет dmidecode или аналоги. В таком случае следует обращаться к platform.uname().processor.
Какая версия Python используется?
platform.python_version() возвращает строку с версией интерпретатора, platform.python_version_tuple() – кортеж (major, minor, patch).
import platform
print("Python version:", platform.python_version())
print("Python version tuple:", platform.python_version_tuple())
Python tkinter module (модуль tkinter в python)
Python version: 3.10.12
Python version tuple: ('3', '10', '12')
Python types module (модуль types в python)
Примечание:
Эти функции не требуют доступа к системе, они работают стабильно всегда.
Как получить структурированную информацию о системе?
Функция platform.uname() возвращает именованный кортеж с полями: system, node, release, version, machine, processor.
import platform
uname = platform.uname()
print(uname)
print("System:", uname.system)
print("Node:", uname.node)
print("Release:", uname.release)
print("Version:", uname.version)
print("Machine:", uname.machine)
print("Processor:", uname.processor)
Python typing module (модуль typing в python)
uname_result(system='Linux', node='myhost', release='5.15.0-86-generic', version='#96-Ubuntu SMP Wed Sep 20 12:00:00 UTC 2023', machine='x86_64', processor='x86_64') System: Linux Node: myhost Release: 5.15.0-86-generic Version: #96-Ubuntu SMP Wed Sep 20 12:00:00 UTC 2023 Machine: x86_64 Processor: x86_64
Python module windows (модуль windows для python)
Ошибка совместимости:
На очень старых версиях Python (младше 3.3) uname() может выдавать меньше полей. Рекомендуется использовать Python 3.6+.
Как определить битность Python и архитектуру исполняемого файла?
Функция platform.architecture() возвращает кортеж (битность, формат исполняемого файла).
import platform
arch = platform.architecture()
print("Architecture:", arch)
print("Bits:", arch[0])
print("Executable format:", arch[1])
Python module path (путь к модулю python)
Architecture: ('64bit', 'ELF')
Bits: 64bit
Executable format: ELF
Важно:
Результат зависит от того, как был собран сам Python, а не от процессора. Для реальной архитектуры ОС используйте platform.machine().
Расширенные примеры работы с модулем platform
В этом разделе приведены более сложные сценарии использования модуля platform для адаптации кода к разным окружениям.
Проверка операционной системы для условного выполнения кода
import platform
import sys
system = platform.system()
if system == "Windows":
print("Запуск на Windows. Используется обратная косая черта.")
path = "C:\\Users\\User\\file.txt"
elif system == "Linux":
print("Запуск на Linux. Используется прямая косая черта.")
path = "/home/user/file.txt"
elif system == "Darwin":
print("Запуск на macOS.")
path = "/Users/user/file.txt"
else:
print(f"Неизвестная ОС: {system}")
sys.exit(1)
print("Выбран путь:", path)
Запуск на Linux. Используется прямая косая черта. Выбран путь: /home/user/file.txt
Получение детальной информации в виде словаря
import platform
uname = platform.uname()
details = {
"system": uname.system,
"node": uname.node,
"release": uname.release,
"version": uname.version,
"machine": uname.machine,
"processor": uname.processor,
"python_version": platform.python_version(),
"python_implementation": platform.python_implementation(),
}
print("Детальное описание платформы:")
for key, value in details.items():
print(f"{key}: {value}")
Детальное описание платформы: system: Linux node: myhost release: 5.15.0-86-generic version: #96-Ubuntu SMP Wed Sep 20 12:00:00 UTC 2023 machine: x86_64 processor: x86_64 python_version: 3.10.12 python_implementation: CPython
Сравнение версий Python для проверки совместимости библиотеки
import platform
from packaging.version import Version # требуется pip install packaging
current = Version(platform.python_version())
required = Version("3.8.0")
if current >= required:
print(f"Версия Python {current} подходит (требуется {required})")
else:
print(f"Версия Python {current} устарела, требуется {required}")
Версия Python 3.10.12 подходит (требуется 3.8.0)
Определение типа интерпретатора (CPython, PyPy, Jython)
import platform
impl = platform.python_implementation()
if impl == "CPython":
print("Стандартный интерпретатор CPython.")
elif impl == "PyPy":
print("PyPy - быстрая реализация Python.")
elif impl == "Jython":
print("Jython - Java-реализация.")
else:
print(f"Неизвестная реализация: {impl}")
Стандартный интерпретатор CPython.
Использование параметров platform.platform() для разных форматов вывода
import platform
print("Полный (по умолчанию):")
print(platform.platform())
print("\nС псевдонимами (aliased=True):")
print(platform.platform(aliased=True))
print("\nКраткий (terse=True):")
print(platform.platform(terse=True))
print("\nКраткий + псевдонимы:")
print(platform.platform(aliased=True, terse=True))
Полный (по умолчанию): Linux-5.15.0-86-generic-x86_64-with-glibc2.35 С псевдонимами (aliased=True): Linux-5.15.0-86-generic-x86_64-with-glibc2.35 Краткий (terse=True): Linux-5.15.0-86-generic-x86_64 Краткий + псевдонимы: Linux-5.15.0-86-generic-x86_64
Примечание:
Параметр aliased на Linux обычно не меняет вывод, но на macOS может заменять “Darwin” на “macOS”. Terse убирает информацию о libc.
Получение списка доступных функций модуля через dir()
import platform
# Вывод всех публичных имён модуля (кроме служебных)
functions = [name for name in dir(platform) if not name.startswith('_')]
print("Функции модуля platform:")
for f in sorted(functions):
print(f" {f}")
Функции модуля platform: architecture java_ver libc_ver machine node platform processor python_branch python_build python_compiler python_implementation python_revision python_version python_version_tuple release system system_alias uname version win32_edition win32_is_iot win32_ver