Как использовать модуль platform для диагностики окружения

Раздел: Основы Python -> Работа с модулями

Основные возможности модуля 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

Модуль platform в Python - comments

En
Platform module python (python)