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.







