instalar ejecutar actualizar python linux

python - ejecutar - Compruebe el nombre de la distribución de Linux



instalar python en debian 9 (8)

Dos opciones para ti:

  1. Use la plataforma de importación platform.linux_distribution () # Algo así como (''Ubuntu'', ''9.10'', ''karmic'')

  2. O simplemente puedes leer el contenido de / etc / debian_version ("squeeze / sid") o / etc / lsb-release que daría:

    DISTRIB_ID=Ubunt DISTRIB_RELEASE=9.10 DISTRIB_CODENAME=karmic DISTRIB_DESCRIPTION="Ubuntu 9.10"

Tengo que obtener el nombre de distribución de Linux de un script de Python. Hay un método dist en el módulo de plataforma:

import platform platform.dist()

Pero bajo mi Arch Linux vuelve:

>>> platform.dist() ('''', '''', '''')

¿Por qué? ¿Cómo puedo obtener el nombre?

PD. Tengo que comprobar si la distribución está basada en Debian.

Actualización: Encontré aquí el sitio de Python , que dist () está en desuso desde 2.6.

>>> platform.linux_distribution() ('''', '''', '''')


Esto es lo que encontré:

platform.linux_distribution

Intenta determinar el nombre del nombre de distribución del sistema operativo Linux.

Dice que platform.dist está en desuso desde la versión 2.6, tiene que usar platform.linux_distribution en Python 2 (pero también está en desuso en Python 3.5).


Esto me funcionó bajo Ubuntu y Manjaro:

def get_distro(): """ Name of your Linux distro (in lowercase). """ with open("/etc/issue") as f: return f.read().lower().split()[0]


Esto me funciona en Ubuntu:

(''Ubuntu'', ''10.04'', ''lucid'')

Luego usé strace para averiguar qué está haciendo exactamente el módulo de la plataforma para encontrar la distribución, y es esta parte:

open("/etc/lsb-release", O_RDONLY|O_LARGEFILE) = 3 fstat64(3, {st_mode=S_IFREG|0644, st_size=102, ...}) = 0 fstat64(3, {st_mode=S_IFREG|0644, st_size=102, ...}) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb76b1000 read(3, "DISTRIB_ID=Ubuntu/nDISTRIB_RELEAS"..., 8192) = 102 read(3, "", 4096) = 0 read(3, "", 8192) = 0 close(3) = 0

Por lo tanto, hay /etc/lsb-release contiene esta información, que viene del paquete Debian base-files de Ubuntu.


Funciona aqui Y no, Arch Linux no está basado en Debian.

>>> import platform >>> platform.dist() (''SuSE'', ''11.2'', ''x86_64'')

Por lo tanto, Python no sabe cómo obtener la información de la versión de Arch Linux, y ha codificado en busca de / etc / redhat-release y / etc / SuSE-release.

platform.dist () es una función obsoleta. Deberías usar platform.linux_distribution ()

En realidad, en mi sistema produce un resultado diferente:

>>> platform.linux_distribution() (''openSUSE '', ''11.2'', ''x86_64'')

platform.linux_distribution () busca en los archivos / etc que contienen "release" o "version" como una cadena. También se ve en el archivo de versión estándar de LSB. Si al final eso no funcionó, recurre a una función _dist_try_harder que intenta obtener la información de otros lugares.

Por lo tanto, depende de Arch Linux proporcionar una información de lanzamiento de LSB estándar o parchear Python para usar su "camino".


La razón por la cual platform.linux_distribution no identifica algunas distribuciones se debe a la forma no estandarizada en que las distribuciones proporcionan información relacionada con la versión sobre ellas mismas.

He escrito un paquete llamado distro (ahora usado por pip ) que apunta a reemplazar distro.linux_distribution . Funciona en muchas distribuciones que pueden devolver tuplas extrañas o vacías al usar la platform .

https://github.com/nir0s/distro ( distro , en pypi)

Proporciona una API mucho más elaborada para recuperar información relacionada con la distribución.

$ python Python 2.7.12 (default, Nov 7 2016, 11:55:55) [GCC 6.2.1 20160830] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import distro >>> distro.linux_distribution() (u''Antergos Linux'', '''', u''ARCHCODE'')

Por cierto, platform.linux_distribution se eliminará en Python 3.7.


Probablemente tendrás que recurrir a:

if platform.linux_distribution() == ('''', '''', ''''): # do something specific to look for Arch

o siempre puede aumentar lib / python2.6 / platform.py y enviar sus cambios.


Python 2 no detecta correctamente Arch Linux. Esto se solucionó en Python 3.3+, pero nunca se realizó una copia de seguridad de Python 2. Aquí hay un par de informes de errores oficiales:

https://bugs.python.org/issue20454
https://bugs.python.org/issue11678

Una solución para este problema en Python 2 es bastante simple. Solo debe indicar al módulo de plataforma que "arch" es una distribución compatible:

>>> import platform >>> platform.linux_distribution(supported_dists=platform._supported_dists + (''arch'',)) (''arch'', '''', '''')

Tenga en cuenta que Arch Linux es una versión móvil, por lo que no tiene una versión o id.

El argumento support_dists está documentado here , aunque no encuentro la documentación muy clara. No desea sobrescribir las _supported_dists porque entonces su código solo funcionará en Arch Linux. Quieres añadirla a la tupla.

De hecho, si imprime el valor de platform._supported_dists , verá que la única diferencia entre Python 2.7.12 y Python 3.5.1 es la adición de (''arch'', ''mageia'') . Dato curioso: también puede agregar ''system'' para la detección de la plataforma en Amazon Linux.