The platform module provides portable access to system information. Detect OS, architecture, and Python version without shell commands.
Quick Overview
import platform
# One-liner system summary
print(platform.platform())
# 'macOS-14.0-arm64-arm-64bit'
# 'Linux-5.4.0-x86_64-with-glibc2.31'
# 'Windows-10-10.0.19041-SP0'Operating System
import platform
# OS name
platform.system()
# 'Darwin', 'Linux', 'Windows'
# OS release version
platform.release()
# '14.0', '5.4.0-generic', '10'
# OS version details
platform.version()
# 'Darwin Kernel Version 23.0.0...'Machine Architecture
import platform
# Machine type
platform.machine()
# 'arm64', 'x86_64', 'AMD64'
# Processor
platform.processor()
# 'arm', 'x86_64', 'Intel64 Family 6...'
# Architecture
platform.architecture()
# ('64bit', '')Python Information
import platform
# Python version string
platform.python_version()
# '3.12.0'
# Version tuple
platform.python_version_tuple()
# ('3', '12', '0')
# Implementation
platform.python_implementation()
# 'CPython', 'PyPy', 'Jython'
# Compiler
platform.python_compiler()
# 'Clang 15.0.0'
# Build info
platform.python_build()
# ('main', 'Oct 2 2023 12:31:55')Node and Network
import platform
# Hostname
platform.node()
# 'my-laptop.local'
# uname (all info at once)
info = platform.uname()
print(info.system) # 'Darwin'
print(info.node) # 'my-laptop.local'
print(info.release) # '14.0'
print(info.version) # 'Darwin Kernel Version...'
print(info.machine) # 'arm64'Practical Examples
Cross-Platform Code
import platform
def get_config_dir():
system = platform.system()
if system == 'Windows':
return os.environ.get('APPDATA', '')
elif system == 'Darwin':
return os.path.expanduser('~/Library/Application Support')
else: # Linux and others
return os.environ.get('XDG_CONFIG_HOME', os.path.expanduser('~/.config'))Feature Detection
import platform
def supports_feature():
"""Check if platform supports our feature."""
system = platform.system()
if system == 'Linux':
return True
elif system == 'Darwin':
# Check macOS version
version = tuple(map(int, platform.mac_ver()[0].split('.')))
return version >= (10, 15) # Catalina or later
elif system == 'Windows':
return platform.release() >= '10'
return FalseSystem Requirements Check
import platform
import sys
def check_requirements():
errors = []
# Check Python version
py_version = tuple(map(int, platform.python_version_tuple()))
if py_version < (3, 9):
errors.append(f"Python 3.9+ required, got {platform.python_version()}")
# Check architecture
if platform.machine() not in ('x86_64', 'AMD64', 'arm64'):
errors.append(f"Unsupported architecture: {platform.machine()}")
# Check OS
if platform.system() not in ('Linux', 'Darwin', 'Windows'):
errors.append(f"Unsupported OS: {platform.system()}")
return errors
errors = check_requirements()
if errors:
print("Requirements not met:")
for e in errors:
print(f" - {e}")
sys.exit(1)Debug Info Banner
import platform
def print_debug_info():
print("=" * 50)
print("System Information")
print("=" * 50)
print(f"Platform: {platform.platform()}")
print(f"System: {platform.system()} {platform.release()}")
print(f"Machine: {platform.machine()}")
print(f"Python: {platform.python_version()}")
print(f"Compiler: {platform.python_compiler()}")
print(f"Node: {platform.node()}")
print("=" * 50)Install Script
import platform
import subprocess
def install_dependencies():
system = platform.system()
if system == 'Darwin':
subprocess.run(['brew', 'install', 'libmagic'])
elif system == 'Linux':
# Detect distro
if 'Ubuntu' in platform.version() or 'Debian' in platform.version():
subprocess.run(['apt-get', 'install', '-y', 'libmagic1'])
elif 'Fedora' in platform.version():
subprocess.run(['dnf', 'install', '-y', 'file-libs'])
elif system == 'Windows':
print("Install libmagic manually on Windows")OS-Specific Functions
import platform
# macOS
if platform.system() == 'Darwin':
mac_ver = platform.mac_ver()
print(f"macOS {mac_ver[0]}") # '14.0'
# Linux
if platform.system() == 'Linux':
# freedesktop.org os-release
try:
import distro # pip install distro
print(distro.name()) # 'Ubuntu'
except ImportError:
pass
# Windows
if platform.system() == 'Windows':
win_ver = platform.win32_ver()
print(f"Windows {win_ver[0]}") # '10'Quick Reference
import platform
# System
platform.system() # 'Linux', 'Darwin', 'Windows'
platform.release() # OS release version
platform.version() # Detailed version
platform.platform() # Full platform string
# Machine
platform.machine() # 'x86_64', 'arm64'
platform.processor() # Processor info
platform.architecture() # ('64bit', '')
# Python
platform.python_version() # '3.12.0'
platform.python_version_tuple() # ('3', '12', '0')
platform.python_implementation() # 'CPython'
# All at once
platform.uname() # Named tuple with all info
# OS-specific
platform.mac_ver() # macOS version tuple
platform.win32_ver() # Windows version tupleplatform gives you clean, portable system detection. No more parsing shell command output.
React to this post: