platform no Python: informações do sistema

Publicado em: 09/08/2026
Tempo de leitura: 7 minutos
Monitor e rede representando informações de sistema com platform no Python

Aplicações multiplataforma, instaladores, diagnósticos e ferramentas de suporte frequentemente precisam identificar o sistema operacional, a arquitetura, a implementação do Python e detalhes do ambiente. O módulo platform no Python reúne funções portáveis para consultar essas informações sem depender diretamente de comandos externos específicos de cada sistema.

O módulo é útil para relatórios, seleção de binários, coleta de contexto de erros e compatibilidade. Entretanto, muitos valores são destinados a humanos, podem variar de formato e não devem ser usados como uma API rígida de decisão. Neste guia você aprenderá a diferenciar informações descritivas de identificadores estáveis, consultar Linux, Windows, macOS, iOS e Android e evitar detecção frágil.

O conteúdo complementa nossos artigos sobre sysconfig, types, symtable, zoneinfo e py_compile.

Uma visão geral rápida

import platform

print(platform.system())
print(platform.release())
print(platform.machine())
print(platform.python_implementation())
print(platform.python_version())

Essas funções devolvem strings. Quando uma informação não pode ser determinada, algumas podem retornar string vazia. Valide o resultado antes de incorporá-lo a uma decisão.

platform.system()

system() retorna um nome geral do sistema, como Linux, Windows, Darwin, Android, iOS ou iPadOS.

sistema = platform.system()
if sistema == "Windows":
    print("ambiente Windows")

Use a comparação apenas quando sua aplicação realmente precisa de comportamento específico. Prefira recursos e detecção de capacidades a grandes blocos condicionais por sistema.

release e version

release() informa a release do sistema ou kernel. version() devolve uma descrição adicional que pode conter build, data ou informações específicas do fornecedor.

print(platform.release())
print(platform.version())

Esses valores não possuem formato universal. Não faça split() esperando a mesma estrutura em todos os sistemas.

platform.platform()

descricao = platform.platform()
print(descricao)

A função produz uma string legível com o máximo de informações úteis. O próprio contrato permite diferenças de formato entre plataformas e versões.

Use-a em logs e telas de suporte. Não persista a string como identificador estável nem a analise para extrair arquitetura ou versão; use funções específicas.

Modo terse e aliases

print(platform.platform(terse=True))
print(platform.platform(aliased=True))

terse=True reduz a descrição. aliased=True pode transformar nomes históricos em nomes comuns, como Solaris. Essas opções afetam apresentação, não capacidade.

uname portável

info = platform.uname()
print(info.system)
print(info.node)
print(info.release)
print(info.version)
print(info.machine)
print(info.processor)

O retorno é uma namedtuple. Campos indisponíveis viram strings vazias. O processador é resolvido de forma tardia, reduzindo trabalho quando o campo não é usado.

Nome de rede do computador

node() tenta devolver o nome de rede da máquina.

host = platform.node()

Esse valor pode não ser FQDN, pode mudar em containers e pode revelar informação sensível. Não o use como identidade, segredo, autorização ou chave única.

Arquitetura da máquina

machine() retorna nomes como x86_64, AMD64, arm64 ou valores específicos do sistema.

maquina = platform.machine().lower()

Casing e nomenclatura variam. Para escolher um artefato, normalize apenas conforme uma tabela explícita e teste todas as arquiteturas suportadas.

Arquitetura do executável

bits, linkage = platform.architecture()

A função tenta informar a arquitetura do executável Python, como 32 ou 64 bits, e o formato de ligação. Em Unix pode depender do comando file. Em macOS, executáveis universais podem conter mais de uma arquitetura.

Para saber se o interpretador atual usa ponteiros de 64 bits, a documentação recomenda considerar sys.maxsize > 2**32.

Nome do processador

processor() tenta obter um nome real do processador.

cpu = platform.processor()

Muitos ambientes retornam string vazia ou o mesmo valor de machine(). Não trate a ausência como erro fatal e não use o texto para detectar recursos de CPU de baixo nível.

Implementação do Python

implementacao = platform.python_implementation()

Resultados comuns incluem CPython, PyPy, Jython e IronPython. Código que depende de detalhes internos pode verificar a implementação, mas a preferência deve ser testar a capacidade necessária.

Versão do Python

texto = platform.python_version()
tupla = platform.python_version_tuple()

A string sempre contém major, minor e patch. A tupla contém strings, não inteiros. Para comparações, use sys.version_info ou ferramentas apropriadas de versionamento.

Compilador e build do Python

print(platform.python_compiler())
print(platform.python_build())

Essas informações ajudam a diagnosticar extensões nativas e builds customizados. Elas não substituem sysconfig para flags, ABI e caminhos de compilação.

Branch e revisão

python_branch() e python_revision() podem fornecer metadados de controle de versão da implementação.

Builds distribuídos podem não incluir valores úteis. Trate-os como diagnóstico opcional.

Distribuição Linux com os-release

Em Linux, freedesktop_os_release() lê o padrão os-release.

try:
    distro = platform.freedesktop_os_release()
except OSError:
    distro = {}

print(distro.get("ID"))
print(distro.get("VERSION_ID"))

Para lógica de programa, use ID, ID_LIKE, VERSION_ID e VARIANT_ID. Campos como PRETTY_NAME são destinados à apresentação.

ID_LIKE

Uma distribuição derivada pode indicar famílias relacionadas em ID_LIKE.

familias = distro.get("ID_LIKE", "").split()

A relação ajuda a selecionar instruções, mas não prova compatibilidade binária. Confirme o gerenciador de pacotes e a presença real de dependências.

Informações do Windows

release, version, service_pack, product_type = platform.win32_ver()
edicao = platform.win32_edition()
iot = platform.win32_is_iot()

Valores podem ser vazios ou None. Edições futuras não conhecidas pelo seu código devem ser tratadas sem falha.

Informações do macOS

release, version_info, machine = platform.mac_ver()

O resultado inclui versão do macOS e arquitetura quando disponíveis. Não confunda a versão do macOS com a versão do kernel Darwin.

Informações do iOS e iPadOS

ios_ver() retorna sistema, release, modelo e indicador de simulador.

if hasattr(platform, "ios_ver"):
    info = platform.ios_ver()

Em código multiplataforma, proteja APIs específicas e teste em dispositivos e simuladores.

Informações do Android

Desde Python 3.13, android_ver() pode informar versão, API level, fabricante, modelo, dispositivo e se o ambiente é emulador.

if hasattr(platform, "android_ver"):
    android = platform.android_ver()

O API level em execução é diferente do nível contra o qual o Python foi compilado. Escolha a fonte correta para a decisão.

libc em Unix

biblioteca, versao = platform.libc_ver()

A função examina símbolos do executável e possui limitações. Ela é mais adequada a diagnósticos do que a políticas críticas de compatibilidade.

Kernel versus sistema visível

Em Android, platform.system() pode devolver Android, enquanto o kernel é Linux. Em iOS, o nome visível difere do kernel Darwin.

Use os.uname() quando precisar do kernel em plataformas que o suportam, e platform para a identidade visível da plataforma.

Containers

Dentro de um container, o kernel normalmente é o do host, enquanto arquivos como /etc/os-release descrevem a imagem. Isso significa que release do kernel e distribuição podem representar camadas diferentes.

Não use apenas uma função para decidir capacidades. Verifique arquivos, comandos, permissões e recursos reais.

Virtualização

O módulo não oferece detecção universal de VM, container ou hypervisor. Tentar deduzir isso por strings de fabricante produz falsos positivos.

Quando a distinção for importante, use sinais específicos do seu ambiente de implantação.

Invalidar o cache

No Python 3.14, invalidate_caches() limpa informações internas como dados de uname().

if hasattr(platform, "invalidate_caches"):
    platform.invalidate_caches()

Isso pode ser útil se o hostname mudar externamente. Normalmente os dados do sistema permanecem estáveis durante o processo.

Relatório de suporte

def relatorio():
    info = platform.uname()
    return {
        "system": info.system,
        "release": info.release,
        "machine": info.machine,
        "python": platform.python_version(),
        "implementation": platform.python_implementation(),
    }

Colete apenas o necessário. Hostname, versões detalhadas e caminhos podem ser sensíveis em tickets públicos.

Decisões por capacidade

Em vez de verificar “é Linux?”, pergunte se a função, módulo, comando ou arquivo necessário está disponível.

if hasattr(os, "fork"):
    usar_modelo_fork()

Esse desenho suporta melhor variantes, containers e implementações alternativas.

Escolha de binários

Para selecionar wheels e artefatos, use padrões de packaging e tags de compatibilidade, não uma concatenação caseira de system() e machine().

Arquitetura, ABI, implementação e versão precisam ser consideradas em conjunto.

Testes

Mocke funções do módulo para testar branches, mas também execute CI nas plataformas reais. Inclua strings vazias, novas edições, aliases inesperados e nomes de arquitetura alternativos.

Erros frequentes

  • Analisar a string de platform.platform().
  • Usar hostname como identidade.
  • Presumir casing fixo em machine().
  • Comparar versões como strings.
  • Confundir kernel e sistema visível.
  • Supondo que distribuição prova capacidade.
  • Expor relatório completo publicamente.
  • Falhar quando uma informação volta vazia.

Boas práticas

  • Use funções específicas para cada campo.
  • Trate strings vazias e valores desconhecidos.
  • Prefira detecção de capacidade.
  • Use os-release para distribuição Linux.
  • Use tags de packaging para artefatos.
  • Minimize dados em telemetria.
  • Teste sistemas e arquiteturas reais.
  • Invalide caches somente quando necessário.

Conclusão

O módulo platform no Python reúne informações portáveis sobre sistema operacional, arquitetura, implementação e versão do Python. Ele é excelente para diagnóstico, relatórios e adaptação cuidadosa.

Os valores variam e muitos são descritivos. Evite analisar strings humanas ou transformar identificação em autorização. Combine platform com sysconfig, packaging e detecção de capacidades. Consulte a documentação oficial de platform e a especificação os-release para identificação de distribuições Linux.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Conteúdo do artigo

    Artigos relacionados

    Teclado internacional representando números, moedas e datas com locale no Python
    Python Avançado
    Foto de perfil de Leandro Hirt da Academify

    locale no Python: números, moedas e datas

    Aprenda locale no Python para formatar e interpretar números, moedas, datas e ordenação cultural sem erros de concorrência.

    Ler mais

    Tempo de leitura: 8 minutos
    09/08/2026
    Código e compilador representando caminhos e variáveis de build com sysconfig no Python
    Python Avançado
    Foto de perfil de Leandro Hirt da Academify

    sysconfig no Python: caminhos e build

    Aprenda sysconfig no Python para descobrir caminhos de instalação, variáveis de build, headers, virtualenvs e plataformas com segurança.

    Ler mais

    Tempo de leitura: 7 minutos
    09/08/2026
    Disco rígido representando arquivos mapeados em memória com mmap no Python
    Python Avançado
    Foto de perfil de Leandro Hirt da Academify

    mmap no Python: arquivos em memória

    Aprenda mmap no Python para mapear arquivos em memória, pesquisar bytes, compartilhar dados e escolher leitura, escrita ou copy-on-write.

    Ler mais

    Tempo de leitura: 7 minutos
    09/08/2026
    Código-fonte representando tokens e constantes do parser com o módulo token no Python
    Python Avançado
    Foto de perfil de Leandro Hirt da Academify

    token no Python: constantes do parser

    Aprenda token no Python para interpretar tipos léxicos, operadores exatos, f-strings, t-strings e árvores sintáticas por versão.

    Ler mais

    Tempo de leitura: 8 minutos
    07/08/2026
    Código-fonte representando palavras reservadas e soft keywords no Python
    Python Avançado
    Foto de perfil de Leandro Hirt da Academify

    keyword no Python: palavras reservadas

    Aprenda keyword no Python para validar identificadores, palavras reservadas e soft keywords conforme a versão do interpretador.

    Ler mais

    Tempo de leitura: 7 minutos
    07/08/2026
    Arquitetura de software representando classes abstratas com abc no Python
    Python Avançado
    Foto de perfil de Leandro Hirt da Academify

    abc no Python: classes abstratas

    Aprenda abc no Python para criar classes abstratas, métodos obrigatórios, subclasses virtuais e contratos de runtime.

    Ler mais

    Tempo de leitura: 6 minutos
    06/08/2026