Cómo ejecutar código Python (.py) en Linux Ubuntu y Linux CentOS. Mostramos varios ejemplos de ejecución de «programas» Python en entornos Linux. Indicamos cómo instalar la última versión de Python en Linux Ubuntu y Linux CentOS. Cómo ejecutar programas Python con librerías en Linux (instalando con pip). Ejemplo de script Python que obtiene información del PC: versión de Linux, CPU, RAM, discos duros, interfaces de red, etc..
- Requisitos para ejecutar programas Python en Linux.
- Instalar pip de Python en Linux Ubuntu.
- Ejecutar programa Python en Linux Ubuntu.
- Ejecutar programa Python que requiere de librerías adicionales.
Requisitos para ejecutar programas Python en Linux
El único requisito es disponer de Python instalado en el equipo Linux. En el caso de las distribuciones Ubuntu, por ejemplo en la versión 21, Python ya viene instalado en su versión 3.9.7, por lo que no hay que hacer nada.
Escribiendo el comando siguiente sabremos la versión exacta de Python que tenemos instalada:
1 |
python3 --version |
Para Linux Ubuntu 21 nos devolverá:
Python 3.9.7
En el caso de Linux CentOS, para CentOS 7, viene instalada la versión 2.7.5.
Instalar la última versión de Python en Linux Ubuntu
Para instalar la última versión de Python en un equipo Linux Ubuntu, en primer lugar actualizaremos el paquete esencial que incluye bcc y otras dependencias necesarias para Python, para ello ejecutaremos el comando:
1 |
apt-get install build-essential |
A continuación, desde la carpeta /usr/src:
1 |
cd /usr/src |
Descargaremos el comprimido con la última versión de Python, desde su web oficial, con el comando:
1 |
wget https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz |
Descomprimiremos el fichero descargado con:
1 |
tar -xf Python-3.9.10.tgz |
Accederemos a la carpeta creada con:
1 |
cd Python-3.9.10 |
Ejecutaremos el script de configuración con:
1 |
./configure --enable-optimizations |
En el caso de no disponer de los paquetes esenciales correctos (build-essential), el comando anterior nos mostrará estos errores:
Con el error:
1 2 3 4 5 6 7 8 9 10 11 12 |
checking build system type... x86_64-pc-linux-gnu checking host system type... x86_64-pc-linux-gnu checking for python3.9... python3.9 checking for --enable-universalsdk... no checking for --with-universal-archs... no checking MACHDEP... "linux" checking for gcc... no checking for cc... no checking for cl.exe... no configure: error: in `/tmp/Python-3.9.10': configure: error: no acceptable C compiler found in $PATH See `config.log' for more details |
Que se solucionan, como hemos comentado al principio, instalando build-essential.
Compilamos Python con:
1 |
make -j 12 |
Este proceso puede tardar varios minutos, porque compilará todos los ficheros de Python.
En caso de no existir «make» lo instalaremos con el comando:
1 |
sudo apt-get install make |
Tras concluir la compilación, instalaremos Python con el comando:
1 |
sudo make altinstall |
Tras la instalación, agregaremos el path del nuevo Python, para ello ejecutaremos el comando:
1 |
ln -s /opt/python3/bin/python3.9 /usr/bin/python3.9 |
Y ahora ya podremos comprobar que disponemos de la última versión de Python ejecutando:
1 |
python3.9 --version |
Nos devolverá:
Python 3.9.10
Instalar la última versión de Python en Linux CentOS 7
Para el caso de Linux CentOS, el proceso es similar, teniendo en cuenta que el instalador en CentOS es yum. En primer lugar instalaremos los paquetes dependientes con:
1 |
yum install gcc |
1 |
yum install openssl-devel |
Nos posicionaremos en la carpeta /usr/src:
1 |
cd /usr/src |
Descargaremos el comprimido con la última versión de Python, que podemos consultar en su web oficial:
1 |
wget https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tgz |
Descomprimiremos el fichero descargado:
1 |
tar -xf Python-3.9.10.tgz |
Accederemos a la carpeta del paquete descomprimido:
1 |
cd Python-3.9.10 |
Ejecutamos script de configuración de Python:
1 |
./configure --prefix=/opt/python3 |
Compilamos (este proceso tardará varios minutos dado que compila todos los ficheros de Python):
1 |
make altinstall |
Y, por último, establecemos el nuevo Python en la variable PATH para que sea accesible desde el equipo:
1 |
ln -s /opt/python3/bin/python3.9 /usr/bin/python3.9 |
Ya tendremos disponible la última versión de Python en CentOS. Para comprobarlo ejecutaremos
1 |
python3.9 --version |
Que nos devolverá:
Python 3.9.10
Instalar pip de Python en Linux Ubuntu
Si queremos disponer de la herramienta pip de Python en Linux, para instalar paquetes/librerías/módulos para Python, ejecutaremos el siguiente comando para Linux Ubuntu:
1 |
sudo apt install python3-pip |
Para Linux CentOS ejecutaremos:
1 |
yum install python3-pip |
Ejecutar programa Python en Linux Ubuntu
Para ejecutar un programa Python (.py) en Linux, en primer lugar deberemos disponer del programa/script de Python en fichero con extensión .py, por ejemplo:
persona.py
En el ejemplo anterior tendremos el contenido siguiente en Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
from datetime import date # Para obtener el año actual # Definimos una clase Persona class Persona: # Definimos los atributos de la clase nombre = '' apellidos = '' sexo = '' edad = 0 ciudad = '' # Definimos un "constructor" para la clase que recibirá el nombre de la persona def __init__(self, nombre): self.nombre = nombre #Definimos los "setters" def setNombre(self, nombre): self.nombre = nombre def setApellidos(self, apellidos): self.apellidos = apellidos def setSexo(self, sexo): self.sexo = sexo def setEdad(self, edad): self.edad = edad def setCiudad(self, ciudad): self.ciudad = ciudad #Definimos los "getters" def getNombre(self): return self.nombre def getApellidos(self): return self.apellidos def getSexo(self): return self.sexo def getEdad(self): return self.edad def getCiudad(self): return self.ciudad def getApellidos(self): return self.apellidos # Ejemplo de método que devuelve el año de nacimiento en función de la edad def añoNacimiento (self): # Obtenemos la fecha actual fechaActual = date.today() # Obtenemos el año de la fecha actual año = fechaActual.year # Calculamos el año de nacimiento restando al año actual la edad de la persona añoNacimiento = año - self.edad return añoNacimiento #Definimos un método en la clase para mostrar todos los datos de la persona por pantalla def mostrarDatos(self): print('El nombre de la persona es: ' + self.nombre) print('La edad de la persona es: ' + str(self.edad)) print('El sexo de la persona es: ' + self.sexo) print('La ciudad de la persona es: ' + self.ciudad) # Método para asignar el nombre completo a partir de los apellidos y el nombre def generarNombreCompleto (self): global nombreCompleto nombreCompleto = self.apellidos + ', ' + self.nombre #Fuera de la clase, definimos un objeto "ciudadano" de la clase Persona #Le pasamos el nombre al constructor de la clase ciudadano = Persona("Alonso Javier") # Con los setters establecemos los datos del ciudadano ciudadano.setApellidos('Lucas Sánchez') ciudadano.setCiudad('Murcia') ciudadano.setEdad(46) ciudadano.setSexo('Hombre') # Usamos el método de la clase que muestra los datos de la persona por pantalla ciudadano.mostrarDatos() # Usamos los setters y algún método de la clase para mostrar # algunos datos del objeto ciudadano de la clase Persona print('El ciudadano ' + ciudadano.getNombre() + ' vive en ' + ciudadano.getCiudad() + ', nació en el año ' + str(ciudadano.añoNacimiento())) # Llamamos al método que obtiene el nombre completo en la clase ciudadano.generarNombreCompleto(); # Ejemplo de uso de variable global declarada en la clase Persona # Para mostrar que no es necesario usar el nombre del objeto para usarla print('El nombre completo es: ' + nombreCompleto) # Declaramos un segundo objeto de la clase Persona # para mostrar cómo trabajar con varios objetos de la misma clase informatico = Persona("Vicenta Tomasa") informatico.setApellidos('Buendía Fuenlabrada') informatico.setCiudad('Madrid') informatico.setEdad(34) informatico.setSexo('Mujer') #Datos del objeto informático print('Datos del informático:') informatico.mostrarDatos() #Datos del objeto ciudadano print('Datos del ciudadano:') ciudadano.mostrarDatos() # Si llamamos al método generarNombreCompleto y mostramos # Al ser variable global, tomará el valor de la última vez que fue llamada # Aquí seguirá mostrando los datos del objeto "ciudadano" print('El nombre completo del informático es: ' + nombreCompleto) informatico.generarNombreCompleto() print('El nombre completo del informático es: ' + nombreCompleto) ciudadano.generarNombreCompleto() print('El nombre completo del ciudadano es: ' + nombreCompleto) |
Para ejecutarlo usaremos el siguiente comando:
1 |
python3.9 persona.py |
Se ejecutará la aplicación mostrando el resultado:
Ejecutar programa Python que requiere de librerías adicionales
Si queremos ejecutar un programa Python que use librerías externas, antes de ejecutarlo las instalaremos con pip. Por ejemplo, para una aplicación Python que obtiene datos del equipo (CPU, adaptadores de red, RAM, …) requerirá de la librería psutil, que se instala con el siguiente comando:
1 |
pip install psutil |
Una vez instalada, podremos ejecutar el programa Python que la use:
python3.9 inPC.py
En el caso del script Python anterior, al ejecutarse, obtendrá información del equipo Linux y la mostrará por pantalla:
El código Python del script inPC.py es:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# Importamos los módulos requeridos import platform from datetime import datetime import psutil import os # Información básica del equipo print("\n---Información básica---") print("* Arquitectura: {0}".format(platform.architecture()[0])) print("* Versión {0}, Release: {1}".format(platform.version(), platform.release())) print("* Sistema: {0}, plataforma: {1}".format(platform.system(), platform.platform())) print("* Nombre: {0}".format(platform.node())) # print("* Procesador:",platform.processor()) # De la librería psutil obtenemos la fecha y hora de arranque del equipo if platform.system() == "Linux": fecha_arranque = datetime.fromtimestamp(psutil.boot_time()) with open("/proc/uptime", "r") as f: uptime = f.read().split(" ")[0].strip() uptime = int(float(uptime)) uptime_hours = uptime // 3600 uptime_minutes = (uptime % 3600) // 60 print("* Fecha arranque: {0}, horas arrancado: {1}".format(fecha_arranque, str(uptime_hours) + ":" + str(uptime_minutes))) # Número de procesos en ejecución if platform.system() == "Linux": numProcesos = [] for subdir in os.listdir('/proc'): if subdir.isdigit(): numProcesos.append(subdir) print("* Número de procesos: {0}".format(len(numProcesos))) # Información de CPU print("\n---CPU---") print("* Cores físicos: {0}, cores totales {1}".format(psutil.cpu_count(logical=False), psutil.cpu_count(logical=True))) # Frecuenca CPU en Mhz cpu_frequency = psutil.cpu_freq() print(f"* Frecuencia: {cpu_frequency.current:.2f}Mhz") # Modelo de procesador if platform.system() == "Linux": with open("/proc/cpuinfo", "r") as f: file_info = f.readlines() cpuinfo = [x.strip().split(":")[1] for x in file_info if "model name" in x] for index, item in enumerate(cpuinfo): print("* Procesador " + str(index) + " : " + item) # Para convertir bytes en Gigabytes def bytes_to_GB(bytes): gb = bytes/(1024*1024*1024) gb = round(gb, 2) return gb # Memoria RAM virtual_memory = psutil.virtual_memory() print("\n---RAM total:", bytes_to_GB(virtual_memory.total), "Gb") # Discos duros disk_partitions = psutil.disk_partitions() print("\n---HD---") # Información de cada partición for partition in disk_partitions: disk_usage = psutil.disk_usage(partition.mountpoint) print("* {0}, total espacio: {1}".format(partition.device, bytes_to_GB(disk_usage.total), "GB")) # print("* Sistema de ficheros: ", partition.fstype) # print("Montaje: ", partition.mountpoint) # Interfaces de red if_addrs = psutil.net_if_addrs() print("\n---Interfaces de red---") for interface_name, interface_addresses in if_addrs.items(): for address in interface_addresses: if interface_name != "lo" and address.address != "": if str(address.family) == 'AddressFamily.AF_INET': print(f"Interfaz:", interface_name) print("IP:", address.address) # print("* Subred: ", address.netmask) # print("* Broadcast: ", address.broadcast) # elif str(address.family) == 'AddressFamily.AF_PACKET': #print("MAC:", address.address) # print("* Subred: ", address.netmask) # print("* Broadcast: ",address.broadcast) |