Python en Linux: guía completa de instalación, entornos y automatización

📅 Actualizado en febrero 2026 ✍️ Ángel López 📊 Nivel: Avanzado ⏱️ 20 min de lectura

Python y Linux forman una de las combinaciones más poderosas del mundo de la tecnología. Prácticamente todas las distribuciones Linux incluyen Python preinstalado, y el propio sistema operativo depende de él para herramientas críticas como apt, yum o dnf. Si quieres llevar tu productividad en Linux al siguiente nivel — ya sea automatizando tareas repetitivas, procesando datos, desarrollando aplicaciones web o administrando servidores — dominar Python sobre Linux es una inversión que se rentabiliza desde el primer script.

🐍 Python y Linux: una historia de simbiosis

La relación entre Python y Linux es tan antigua como el propio lenguaje. Guido van Rossum creó Python durante las vacaciones de Navidad de 1989 en los Países Bajos, trabajando sobre un sistema Unix en el Centrum Wiskunde & Informatica (CWI). La primera versión pública, Python 0.9.0, se publicó en febrero de 1991 en el newsgroup alt.sources, distribuida como código fuente que se compilaba en sistemas Unix y, por extensión, en lo que pronto sería Linux.

Linus Torvalds publicó la primera versión del kernel Linux apenas cinco meses después, en agosto de 1991. Desde sus inicios, ambos proyectos compartieron la filosofía del software libre y el ecosistema Unix. Python se diseñó explícitamente para ser un lenguaje que «gustase a los hackers de Unix/C», como Van Rossum declaró en sus notas de diseño originales.

Pantalla de ordenador mostrando código Python en un editor de texto sobre un entorno Linux
Código Python en un entorno de desarrollo sobre Linux.
Foto: Pexels · Licencia libre

¿Por qué Python domina en Linux?

La simbiosis entre Python y Linux se explica por varios factores convergentes. En primer lugar, la filosofía compartida: ambos proyectos nacieron en el ecosistema Unix y adoptaron los principios del software libre desde el primer momento. Python se distribuye bajo la PSF License (compatible con GPL), lo que lo convierte en un ciudadano de primera clase en cualquier distribución Linux.

En segundo lugar, la integración profunda con el sistema operativo. Herramientas críticas de las distribuciones más populares están escritas en Python: el gestor de paquetes apt de Debian/Ubuntu, dnf de Fedora, el instalador Anaconda de RHEL, el sistema de administración YaST de openSUSE, y prácticamente todas las herramientas de GNOME Desktop. Eliminar Python de una distribución Linux moderna sería como quitar los cimientos de un edificio.

En tercer lugar, Python ofrece acceso nativo a las APIs del sistema: los módulos os, sys, subprocess, signal, socket y fcntl interactúan directamente con las llamadas al sistema POSIX, lo que hace que Python sea extraordinariamente potente como lenguaje de scripting para administración de sistemas.

📊 Python en números (2026): Python es el lenguaje de programación más popular del mundo según el índice TIOBE, con una cuota del 21,81%. Es el lenguaje más demandado en ofertas de empleo de DevOps, ciencia de datos, IA/ML y administración de sistemas Linux.

⚙️ Instalación y gestión de versiones

Python preinstalado: verificación inicial

Antes de instalar nada, comprueba qué versiones de Python ya tienes disponibles. Prácticamente todas las distribuciones modernas incluyen Python 3 de serie:

# Verificar versión de Python 3
            python3 --version
            # Python 3.12.3 (ejemplo en Ubuntu 24.04)

            # Verificar ubicación del intérprete
            which python3
            # /usr/bin/python3

            # Ver todas las versiones instaladas
            ls /usr/bin/python*
            # /usr/bin/python3  /usr/bin/python3.12

            # ¿Existe el comando "python" (sin el 3)?
            python --version 2>/dev/null || echo "No existe 'python' — usa 'python3'"
⚠️ Nunca desinstales el Python del sistema. Muchas herramientas críticas de tu distribución dependen de él. Si necesitas una versión diferente, instálala junto a la del sistema, nunca en lugar de ella. Comandos como sudo apt remove python3 pueden dejar tu sistema inoperativo.

Instalación por gestor de paquetes

Cada familia de distribuciones tiene su propio gestor de paquetes. Los comandos para instalar o actualizar Python son los siguientes:

# ── Debian / Ubuntu / Linux Mint ──
            sudo apt update
            sudo apt install python3 python3-pip python3-venv python3-dev

            # ── Fedora / RHEL 9+ / CentOS Stream ──
            sudo dnf install python3 python3-pip python3-devel

            # ── Arch Linux / Manjaro ──
            sudo pacman -S python python-pip

            # ── openSUSE ──
            sudo zypper install python3 python3-pip python3-devel

Múltiples versiones con deadsnakes PPA (Ubuntu)

Si necesitas una versión concreta de Python que no está en los repositorios oficiales de tu distribución, en Ubuntu puedes usar el PPA deadsnakes, mantenido por la comunidad:

# Añadir el PPA deadsnakes
            sudo add-apt-repository ppa:deadsnakes/ppa
            sudo apt update

            # Instalar Python 3.13 (o la versión que necesites)
            sudo apt install python3.13 python3.13-venv python3.13-dev

            # Verificar que coexisten ambas versiones
            python3.12 --version   # Python 3.12.3 (del sistema)
            python3.13 --version   # Python 3.13.1 (de deadsnakes)

Compilación desde el código fuente

Para el control total sobre la versión y las opciones de compilación, puedes compilar Python directamente desde el código fuente. Este método funciona en cualquier distribución Linux:

# 1. Instalar dependencias de compilación (Ubuntu/Debian)
            sudo apt install build-essential zlib1g-dev libncurses5-dev \
            libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev \
            libreadline-dev libffi-dev libbz2-dev liblzma-dev

            # 2. Descargar el código fuente
            cd /tmp
            wget https://www.python.org/ftp/python/3.13.1/Python-3.13.1.tgz
            tar -xzf Python-3.13.1.tgz
            cd Python-3.13.1

            # 3. Configurar con optimizaciones
            ./configure --enable-optimizations --with-lto --prefix=/usr/local

            # 4. Compilar (usar -j para paralelizar)
            make -j$(nproc)

            # 5. Instalar SIN sobrescribir el Python del sistema
            sudo make altinstall   # ⚠️ altinstall, NUNCA install

            # 6. Verificar
            python3.13 --version
💡 ¿Por qué altinstall? El target make install crea un enlace simbólico python3 que sobrescribiría el Python del sistema. Con altinstall solo se instala python3.13 (con número de versión), dejando intacto el Python que tu distribución necesita.

Gestión avanzada con pyenv

Para desarrolladores que trabajan con múltiples proyectos que requieren diferentes versiones de Python, pyenv es la herramienta de referencia. Automatiza la descarga, compilación e intercambio entre versiones:

# Instalar pyenv mediante curl
            curl https://pyenv.run | bash

            # Añadir a ~/.bashrc (o ~/.zshrc)
            echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
            echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
            echo 'eval "$(pyenv init -)"' >> ~/.bashrc
            source ~/.bashrc

            # Listar versiones disponibles
            pyenv install --list | grep "^  3\."

            # Instalar y activar una versión
            pyenv install 3.13.1
            pyenv global 3.13.1       # Establece como versión global
            pyenv local 3.12.3        # Establece versión por directorio
Métodos de instalación de Python en Linux 📦 Gestor de paquetes apt / dnf / pacman ✅ Más fácil ✅ Integrado con SO ✅ Actualizaciones auto ❌ Versión limitada ❌ Puede ir retrasada sudo apt install python3 Ideal para: principiantes y servidores de producción 🐊 deadsnakes PPA Solo Ubuntu / Debian ✅ Versiones recientes ✅ Fácil instalación ✅ Coexiste con sistema ❌ Solo Ubuntu/Debian ❌ PPA externo apt install python3.13 Ideal para: desarrolladores en Ubuntu/Debian 🔨 Compilar fuente Cualquier distribución ✅ Control total ✅ Optimizaciones LTO ✅ Cualquier versión ❌ Proceso manual ❌ Instalar dependencias make altinstall Ideal para: avanzados y entornos embebidos 🔄 pyenv Cualquier distribución ✅ Múltiples versiones ✅ Cambio instantáneo ✅ Por directorio ❌ Compila cada versión ❌ Requiere deps pyenv install 3.13 Ideal para: profesionales multiproyecto
Comparativa de los cuatro métodos principales de instalación de Python en Linux, con ventajas, desventajas y casos de uso recomendados.
Métodos de instalación de Python en Linux 📦 Gestor de paquetes apt / dnf / pacman ✅ Más fácil ✅ Integrado con SO ✅ Actualizaciones auto ❌ Versión limitada ❌ Puede ir retrasada sudo apt install python3 Ideal para: principiantes y servidores de producción 🐊 deadsnakes PPA Solo Ubuntu / Debian ✅ Versiones recientes ✅ Fácil instalación ✅ Coexiste con sistema ❌ Solo Ubuntu/Debian ❌ PPA externo apt install python3.13 Ideal para: desarrolladores en Ubuntu/Debian 🔨 Compilar fuente Cualquier distribución ✅ Control total ✅ Optimizaciones LTO ✅ Cualquier versión ❌ Proceso manual ❌ Instalar dependencias make altinstall Ideal para: avanzados y entornos embebidos 🔄 pyenv Cualquier distribución ✅ Múltiples versiones ✅ Cambio instantáneo ✅ Por directorio ❌ Compila cada versión ❌ Requiere deps pyenv install 3.13 Ideal para: profesionales multiproyecto
Comparativa de los cuatro métodos principales de instalación de Python en Linux, con ventajas, desventajas y casos de uso recomendados.

📦 Entornos virtuales: aislamiento profesional

Los entornos virtuales son la funcionalidad más importante para trabajar profesionalmente con Python en Linux. Un entorno virtual crea una copia aislada del intérprete de Python con su propio directorio de paquetes, permitiendo que cada proyecto tenga sus propias dependencias sin conflictos.

venv: el módulo estándar

Desde Python 3.3, el módulo venv viene incluido en la biblioteca estándar y es la forma recomendada oficialmente:

# Crear un entorno virtual
            python3 -m venv mi_proyecto_env

            # Activar el entorno
            source mi_proyecto_env/bin/activate

            # El prompt cambia para indicar que estás en el entorno
            (mi_proyecto_env) usuario@linux:~$

            # Verificar que python y pip apuntan al entorno
            which python3    # /home/usuario/mi_proyecto_env/bin/python3

            # Instalar paquetes (solo afectan a este entorno)
            pip install requests flask pandas

            # Desactivar el entorno
            deactivate

Flujo profesional con requirements.txt

Las dependencias de cada proyecto deben documentarse para reproducibilidad:

# Exportar las dependencias actuales
            pip freeze > requirements.txt

            # En otro equipo: reproducir el entorno
            python3 -m venv produccion_env
            source produccion_env/bin/activate
            pip install -r requirements.txt
💡 Buena práctica: Nombra siempre tus entornos venv/ o .venv/ y añádelos al .gitignore. Crea un alias en ~/.bashrc: alias activate='source ./venv/bin/activate'.

Poetry: gestión moderna de proyectos

Poetry combina entornos virtuales, gestión de dependencias y empaquetado en una sola herramienta con pyproject.toml:

# Instalar Poetry
            curl -sSL https://install.python-poetry.org | python3 -

            # Crear un nuevo proyecto
            poetry new mi_aplicacion && cd mi_aplicacion

            # Añadir dependencias
            poetry add flask requests
            poetry add --group dev pytest black mypy

            # Ejecutar dentro del entorno virtual
            poetry run python mi_aplicacion/main.py

🔧 pip y gestión de dependencias

pip es el gestor de paquetes estándar de Python. En Linux tiene particularidades importantes que debes conocer para evitar problemas con los paquetes del sistema.

Operaciones esenciales con pip

# Instalar, actualizar y desinstalar
            pip install nombre_paquete
            pip install django==5.1.4          # Versión específica
            pip install "flask>=3.0,<4.0"      # Rango de versiones
            pip install --upgrade requests     # Actualizar
            pip uninstall nombre_paquete

            # Información y diagnóstico
            pip list                           # Listar todos los paquetes
            pip show pandas                    # Info detallada de un paquete
            pip list --outdated                # Paquetes desactualizados
            pip freeze > requirements.txt      # Exportar dependencias
⚠️ PEP 668 y entornos gestionados externamente. Desde Python 3.11+, distribuciones como Ubuntu 23.04+ marcan el entorno del sistema como «externally managed». Si intentas pip install fuera de un entorno virtual, obtendrás un error. Esto es intencionado: protege los paquetes del sistema. Usa siempre un entorno virtual.

🖥️ Scripting de sistema con Python

Python es una alternativa extraordinariamente potente a Bash para scripting de sistema. Brilla cuando necesitas lógica compleja, manejo de datos estructurados, control de errores robusto o scripts que superen las 50-100 líneas.

Ejecutar comandos del sistema con subprocess

import subprocess

            # Forma moderna: subprocess.run()
            resultado = subprocess.run(
            ["ls", "-la", "/var/log"],
            capture_output=True,
            text=True,
            check=True
            )
            print(resultado.stdout)

            # Encadenar comandos con pipe
            ps = subprocess.run(["ps", "aux"], capture_output=True, text=True)
            grep = subprocess.run(
            ["grep", "python"],
            input=ps.stdout,
            capture_output=True, text=True
            )

            # Manejar errores correctamente
            try:
            subprocess.run(["systemctl", "status", "nginx"], check=True)
            except subprocess.CalledProcessError as e:
            print(f"Error (código {e.returncode}): {e.stderr}")

Gestión de archivos con pathlib

from pathlib import Path

            # Crear rutas de forma portable
            home = Path.home()
            proyecto = home / "proyectos" / "mi_app"
            proyecto.mkdir(parents=True, exist_ok=True)

            # Leer y escribir archivos
            config = proyecto / "config.json"
            config.write_text('{"debug": true}', encoding="utf-8")

            # Buscar archivos recursivamente
            logs = list(Path("/var/log").rglob("*.log"))
            print(f"Encontrados {len(logs)} archivos .log")

🤖 Automatización de tareas del sistema

Una de las aplicaciones más valiosas de Python en Linux es la automatización de tareas repetitivas: monitorización de recursos, gestión de logs, backups y notificaciones — todo con un control de errores que Bash no puede igualar.

Script de monitorización del sistema

#!/usr/bin/env python3
            """Monitor del sistema: CPU, memoria, disco."""

            import subprocess
            import json
            import datetime


            def obtener_memoria():
            """Información de memoria en GB."""
            with open("/proc/meminfo") as f:
            info = {}
            for linea in f:
            clave, valor = linea.split(":")
            info[clave.strip()] = int(valor.strip().split()[0])
            total = info["MemTotal"] / 1048576
            libre = info["MemAvailable"] / 1048576
            return {
            "total_gb": round(total, 2),
            "disponible_gb": round(libre, 2),
            "uso_pct": round((total - libre) / total * 100, 1)
            }


            def obtener_disco():
            """Uso de cada partición montada."""
            resultado = subprocess.run(
            ["df", "-h", "--output=target,size,used,avail,pcent"],
            capture_output=True, text=True
            )
            particiones = []
            for linea in resultado.stdout.strip().split("\n")[1:]:
            campos = linea.split()
            if len(campos) >= 5 and campos[0].startswith("/"):
            particiones.append({
            "punto_montaje": campos[0],
            "uso_pct": campos[4]
            })
            return particiones


            if __name__ == "__main__":
            informe = {
            "timestamp": datetime.datetime.now().isoformat(),
            "memoria": obtener_memoria(),
            "disco": obtener_disco()
            }
            print(json.dumps(informe, indent=2, ensure_ascii=False))
Terminal de Linux mostrando código de programación con sintaxis resaltada
Terminal de Linux con código: el entorno natural de Python para scripting.
Foto: Pexels · Licencia libre

Script de backup automatizado

#!/usr/bin/env python3
            """Backup incremental con rotación automática."""

            import subprocess
            import datetime
            import logging
            from pathlib import Path

            ORIGEN = Path("/home/usuario/documentos")
            DESTINO = Path("/mnt/backup")
            MAX_BACKUPS = 7

            logging.basicConfig(
            filename="/var/log/backup_python.log",
            level=logging.INFO,
            format="%(asctime)s [%(levelname)s] %(message)s"
            )


            def crear_backup():
            fecha = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
            archivo = DESTINO / f"backup_{fecha}.tar.gz"
            logging.info(f"Iniciando backup de {ORIGEN}")

            try:
            subprocess.run(
            ["tar", "-czf", str(archivo), "-C", str(ORIGEN.parent), ORIGEN.name],
            check=True, capture_output=True
            )
            tamano = archivo.stat().st_size / (1024 * 1024)
            logging.info(f"Backup completado: {tamano:.1f} MB")
            except subprocess.CalledProcessError as e:
            logging.error(f"Error: {e.stderr.decode()}")
            return

            # Rotación: eliminar backups antiguos
            backups = sorted(DESTINO.glob("backup_*.tar.gz"))
            while len(backups) > MAX_BACKUPS:
            backups.pop(0).unlink()


            if __name__ == "__main__":
            crear_backup()
📅 Programar con cron: 0 2 * * * /usr/bin/python3 /home/usuario/scripts/backup.py

💻 Entorno de desarrollo profesional

Linux es la plataforma donde la configuración de un entorno Python profesional resulta más natural. Los tres editores más populares son VS Code (con la extensión Python de Microsoft), PyCharm Community (IDE completo y gratuito) y Neovim con LSP (para trabajo en terminal/SSH).

Herramientas de calidad de código

# Instalar las herramientas esenciales
            pip install black ruff mypy pytest

            # BLACK: Formateo automático (opinionado)
            black mi_script.py

            # RUFF: Linter ultrarrápido (reemplaza flake8, isort)
            ruff check --fix src/

            # MYPY: Verificación de tipos estáticos
            mypy mi_modulo.py

            # PYTEST: Testing con cobertura
            pytest tests/ -v --cov=src

📊 Python para ciencia de datos en Linux

Linux es la plataforma de referencia para ciencia de datos con Python: mejor rendimiento en E/S, compilación nativa de extensiones C/Fortran, soporte GPU vía CUDA, y compatibilidad con entornos de producción.

Stack científico esencial

# Instalar el stack completo
            pip install numpy pandas matplotlib seaborn scikit-learn jupyter
            sudo apt install libopenblas-dev liblapack-dev gfortran
# Ejemplo: análisis rápido de datos
            import pandas as pd
            import matplotlib.pyplot as plt

            df = pd.read_csv("/var/log/system_metrics.csv")
            print(df.describe())
            print(f"Registros: {len(df):,}")

            fig, axes = plt.subplots(1, 2, figsize=(12, 5))
            df["cpu_percent"].hist(ax=axes[0], bins=50, color="#2563EB")
            axes[0].set_title("Distribución uso CPU")
            df["memory_percent"].plot(ax=axes[1], color="#7C3AED")
            axes[1].set_title("Uso memoria en el tiempo")
            plt.tight_layout()
            plt.savefig("informe_sistema.png", dpi=150)

Jupyter Notebook permite combinar código, texto formateado, ecuaciones y visualizaciones en un mismo documento interactivo. Es la herramienta preferida para exploración de datos, prototipado y presentación de resultados:

# Instalar Jupyter
            pip install jupyterlab

            # Iniciar el servidor (abre el navegador automáticamente)
            jupyter lab --port=8888

            # Para acceso remoto (servidor sin GUI)
            jupyter lab --ip=0.0.0.0 --no-browser --port=8888
            # Luego conectar desde tu navegador: http://ip-servidor:8888

🌐 Desarrollo web con Python en Linux

Python es una plataforma excepcional para el desarrollo web, con frameworks que van desde lo minimalista hasta lo empresarial. Linux es el entorno natural de despliegue de aplicaciones web Python — la inmensa mayoría de servidores en producción ejecutan Linux.

Flask: microframework minimalista

# app.py — Aplicación Flask mínima
            from flask import Flask, jsonify, request

            app = Flask(__name__)

            @app.route("/")
            def index():
            return jsonify({"mensaje": "Hola desde Flask en Linux"})

            @app.route("/estado")
            def estado():
            import platform
            return jsonify({
            "sistema": platform.system(),
            "python": platform.python_version(),
            "kernel": platform.release()
            })

            if __name__ == "__main__":
            app.run(host="0.0.0.0", port=5000, debug=True)
# Ejecutar la aplicación
            python3 app.py

            # Para producción, usar Gunicorn
            pip install gunicorn
            gunicorn -w 4 -b 0.0.0.0:5000 app:app

Django: el framework completo

# Crear un proyecto Django completo
            pip install django
            django-admin startproject mi_sitio
            cd mi_sitio

            # Crear una aplicación dentro del proyecto
            python3 manage.py startapp blog

            # Crear las tablas en la base de datos
            python3 manage.py migrate

            # Crear un superusuario para el panel de administración
            python3 manage.py createsuperuser

            # Iniciar el servidor de desarrollo
            python3 manage.py runserver 0.0.0.0:8000

FastAPI: la API moderna y rápida

# main.py — API con FastAPI + validación automática
            from fastapi import FastAPI
            from pydantic import BaseModel

            app = FastAPI(title="Mi API Linux")

            class Tarea(BaseModel):
            titulo: str
            completada: bool = False

            tareas = []

            @app.post("/tareas/")
            def crear_tarea(tarea: Tarea):
            tareas.append(tarea)
            return {"mensaje": "Tarea creada", "total": len(tareas)}

            @app.get("/tareas/")
            def listar_tareas():
            return tareas
# Ejecutar con uvicorn (servidor ASGI)
            pip install fastapi uvicorn
            uvicorn main:app --host 0.0.0.0 --port 8000 --reload

            # Documentación interactiva automática en:
            # http://localhost:8000/docs      (Swagger UI)
            # http://localhost:8000/redoc     (ReDoc)
Ecosistema Python en Linux: áreas de aplicación 🐍 Python en Linux ⚙️ Scripting subprocess, os pathlib, shutil 🌐 Web Flask, Django FastAPI, Gunicorn 📊 Ciencia de datos NumPy, pandas matplotlib, Jupyter 🚀 DevOps / CI/CD Ansible, Fabric Docker SDK, boto3 🧠 IA / Machine Learning TensorFlow, PyTorch scikit-learn, CUDA 🧪 Testing / QA pytest, tox Selenium, coverage 🔌 Redes / Seguridad scapy, paramiko socket, requests 🔄 Automatización cron + Python watchdog, schedule
Mapa del ecosistema Python en Linux: ocho grandes áreas de aplicación con sus bibliotecas y herramientas principales.
Ecosistema Python en Linux: áreas de aplicación 🐍 Python en Linux ⚙️ Scripting subprocess, os pathlib, shutil 🌐 Web Flask, Django FastAPI, Gunicorn 📊 Ciencia de datos NumPy, pandas matplotlib, Jupyter 🚀 DevOps / CI/CD Ansible, Fabric Docker SDK, boto3 🧠 IA / Machine Learning TensorFlow, PyTorch scikit-learn, CUDA 🧪 Testing / QA pytest, tox Selenium, coverage 🔌 Redes / Seguridad scapy, paramiko socket, requests 🔄 Automatización cron + Python watchdog, schedule
Mapa del ecosistema Python en Linux: ocho grandes áreas de aplicación con sus bibliotecas y herramientas principales.

⚡ Rendimiento y optimización

Python en Linux ofrece ventajas de rendimiento respecto a otras plataformas, pero también tiene limitaciones conocidas que conviene entender para escribir código eficiente.

¿Por qué Python va más rápido en Linux?

Las operaciones de entrada/salida en Linux son más eficientes gracias a llamadas al sistema como epoll, sendfile y io_uring. El sistema de archivos ext4/btrfs maneja mejor los archivos pequeños y la creación/eliminación de ficheros temporales. La gestión de procesos con fork() es más ligera que CreateProcess() de Windows. Y muchas bibliotecas científicas (NumPy, SciPy) se compilan con optimizaciones BLAS/LAPACK nativas que en Windows suelen necesitar configuración adicional.

Perfilado y optimización

# Medir tiempo de ejecución con timeit
            import timeit

            # Comparar dos enfoques
            t1 = timeit.timeit('sum(range(1000000))', number=100)
            t2 = timeit.timeit('sum(i for i in range(1000000))', number=100)
            print(f"range directo: {t1:.3f}s")
            print(f"generator:     {t2:.3f}s")

            # Perfilado detallado con cProfile
            import cProfile

            def funcion_lenta():
            datos = [i**2 for i in range(100000)]
            return sorted(datos, reverse=True)

            cProfile.run('funcion_lenta()')
# Perfilado desde la terminal
            python3 -m cProfile -s cumtime mi_script.py

            # Perfilado de memoria
            pip install memory_profiler
            python3 -m memory_profiler mi_script.py

            # Perfilado línea a línea
            pip install line_profiler
            kernprof -l -v mi_script.py

✏️ Ejercicios prácticos resueltos

Ejercicio 1: Monitor de espacio en disco (Nivel básico)

Crea un script Python que muestre las particiones con más del 80% de uso y envíe una alerta a un archivo de log.

Ver solución
#!/usr/bin/env python3
            """Monitor de espacio en disco con alertas."""

            import subprocess
            import logging
            from datetime import datetime

            logging.basicConfig(
            filename="/tmp/disk_alert.log",
            level=logging.WARNING,
            format="%(asctime)s %(message)s"
            )

            UMBRAL = 80

            resultado = subprocess.run(
            ["df", "-h", "--output=target,pcent"],
            capture_output=True, text=True
            )

            alertas = 0
            for linea in resultado.stdout.strip().split("\n")[1:]:
            partes = linea.split()
            if len(partes) == 2:
            punto, pct = partes[0], int(partes[1].rstrip("%"))
            if pct >= UMBRAL:
            msg = f"⚠️ {punto} al {pct}% de capacidad"
            logging.warning(msg)
            print(msg)
            alertas += 1

            if alertas == 0:
            print("✅ Todas las particiones por debajo del umbral")

Ejercicio 2: Organizador de descargas (Nivel intermedio)

Escribe un script que organice automáticamente los archivos de ~/Descargas en subcarpetas según su extensión (imágenes, documentos, vídeos, etc.).

Ver solución
#!/usr/bin/env python3
            """Organizador automático de archivos por extensión."""

            from pathlib import Path
            import shutil

            DESCARGAS = Path.home() / "Descargas"

            CATEGORIAS = {
            "Imágenes":    {".jpg", ".jpeg", ".png", ".gif", ".webp", ".svg"},
            "Documentos":  {".pdf", ".doc", ".docx", ".odt", ".txt", ".xlsx"},
            "Vídeos":      {".mp4", ".mkv", ".avi", ".mov", ".webm"},
            "Música":      {".mp3", ".flac", ".ogg", ".wav"},
            "Comprimidos": {".zip", ".tar", ".gz", ".7z", ".rar"},
            "Código":      {".py", ".js", ".html", ".css", ".sh", ".java"},
            }

            movidos = 0
            for archivo in DESCARGAS.iterdir():
            if not archivo.is_file():
            continue

            ext = archivo.suffix.lower()
            destino = "Otros"
            for categoria, extensiones in CATEGORIAS.items():
            if ext in extensiones:
            destino = categoria
            break

            carpeta = DESCARGAS / destino
            carpeta.mkdir(exist_ok=True)

            destino_final = carpeta / archivo.name
            if destino_final.exists():
            destino_final = carpeta / f"{archivo.stem}_copia{archivo.suffix}"

            shutil.move(str(archivo), str(destino_final))
            print(f"  {archivo.name} → {destino}/")
            movidos += 1

            print(f"\n✅ {movidos} archivos organizados")

Ejercicio 3: API REST con persistencia (Nivel avanzado)

Crea una API REST con FastAPI que gestione una lista de tareas (CRUD completo) usando SQLite como base de datos, desplegable en Linux con uvicorn.

Ver solución
#!/usr/bin/env python3
            """API de tareas con FastAPI + SQLite."""

            import sqlite3
            from contextlib import contextmanager
            from fastapi import FastAPI, HTTPException
            from pydantic import BaseModel
            from typing import Optional

            DB_PATH = "tareas.db"
            app = FastAPI(title="Tareas API")

            @contextmanager
            def get_db():
            conn = sqlite3.connect(DB_PATH)
            conn.row_factory = sqlite3.Row
            try:
            yield conn
            finally:
            conn.close()

            # Crear tabla al arrancar
            with get_db() as db:
            db.execute("""
            CREATE TABLE IF NOT EXISTS tareas (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            titulo TEXT NOT NULL,
            completada INTEGER DEFAULT 0
            )
            """)
            db.commit()

            class TareaIn(BaseModel):
            titulo: str
            completada: bool = False

            @app.get("/tareas")
            def listar():
            with get_db() as db:
            rows = db.execute("SELECT * FROM tareas").fetchall()
            return [{"id": r["id"], "titulo": r["titulo"], "completada": bool(r["completada"])} for r in rows]

            @app.post("/tareas", status_code=201)
            def crear(tarea: TareaIn):
            with get_db() as db:
            cur = db.execute("INSERT INTO tareas (titulo, completada) VALUES (?,?)",
            (tarea.titulo, int(tarea.completada)))
            db.commit()
            return {"id": cur.lastrowid, "titulo": tarea.titulo}

            @app.delete("/tareas/{id}")
            def eliminar(id: int):
            with get_db() as db:
            affected = db.execute("DELETE FROM tareas WHERE id=?", (id,)).rowcount
            db.commit()
            if not affected:
            raise HTTPException(404, "Tarea no encontrada")
            return {"eliminada": id}

            # Ejecutar: uvicorn tareas_api:app --host 0.0.0.0 --port 8000

⚠️ Errores frecuentes y buenas prácticas

Error 1: Desinstalar el Python del sistema. Nunca ejecutes sudo apt remove python3. Herramientas críticas del sistema (apt, dnf, gnome-terminal) dependen de él. Si necesitas otra versión, instálala junto a la existente.

Error 2: Instalar paquetes globalmente con pip. Usar sudo pip install contamina la instalación del sistema y puede romper herramientas. Usa siempre un entorno virtual. Si el sistema te lo impide (PEP 668), es porque te está protegiendo.

Error 3: Confundir python con python3. En muchas distribuciones, python no existe o apunta a Python 2. Usa siempre python3 explícitamente, o verifica con python --version antes de usar el comando corto.

Error 4: No fijar versiones en requirements.txt. Un pip freeze > requirements.txt con versiones exactas garantiza reproducibilidad. Sin versiones fijadas, una actualización de una dependencia puede romper tu proyecto meses después.

Error 5: Usar os.system() en vez de subprocess.run(). os.system() es legacy: no captura la salida, no maneja errores correctamente y es vulnerable a inyección de comandos. subprocess.run() es la forma moderna y segura.

Error 6: No usar shebang correcto. Siempre empieza tus scripts con #!/usr/bin/env python3 (no #!/usr/bin/python3) para que el sistema busque Python en el PATH y funcione también dentro de entornos virtuales.

💡 Regla de oro: Si tu script tiene más de 50 líneas y hace algo importante, añade manejo de errores con try/except, logging con el módulo logging, y argumentos de línea de comandos con argparse. Estos tres elementos transforman un script rápido en una herramienta profesional.

❓ Preguntas frecuentes sobre Python en Linux: guía completa de instalación, entornos y automatización

Las dudas más comunes respondidas de forma clara y directa.

La mayoría de distribuciones Linux incluyen Python preinstalado. Verifica con python3 --version. Para instalar o actualizar: en Ubuntu/Debian usa sudo apt install python3 python3-pip python3-venv, en Fedora usa sudo dnf install python3, en Arch usa sudo pacman -S python. Para versiones específicas, usa el PPA deadsnakes (Ubuntu) o compila desde fuente con ./configure && make altinstall.
Un entorno virtual es un directorio aislado con su propia instalación de Python y paquetes. Es esencial porque permite tener diferentes dependencias para cada proyecto sin conflictos, evita contaminar el sistema y hace tus proyectos reproducibles. Créalo con python3 -m venv mi_env y actívalo con source mi_env/bin/activate.
En distribuciones modernas, pip puede apuntar a Python 2 (si está instalado) y pip3 apunta a Python 3. Como Python 2 ya no recibe soporte, la recomendación es usar siempre pip3 o, mejor aún, python3 -m pip para asegurarte de usar el pip asociado a tu versión correcta de Python 3.
Sí. Puedes instalar múltiples versiones usando el PPA deadsnakes en Ubuntu, compilando desde fuente con make altinstall (para no sobrescribir la del sistema), o con pyenv que automatiza la gestión de múltiples versiones. Cada versión se invoca con su número: python3.12, python3.13, etc.
En general sí. El sistema de archivos de Linux es más eficiente para E/S, la gestión de procesos es más ligera (fork vs CreateProcess), y las bibliotecas científicas se compilan con optimizaciones nativas (BLAS/LAPACK). Para desarrollo y producción, Linux es la plataforma preferida por la comunidad Python.
Usa subprocess para ejecutar comandos, pathlib y shutil para archivos, y logging para registrar operaciones. Programa la ejecución con cron (crontab -e) o con un timer de systemd. Añade manejo de errores con try/except para que los scripts sean robustos en producción.
Usa Bash para tareas simples: mover archivos, encadenar comandos, administración rápida. Usa Python cuando necesites lógica compleja, manejo de datos estructurados (JSON, CSV, APIs), control de errores robusto, o cuando el script supere las 50-100 líneas. Ambos se complementan: muchos profesionales usan Bash para la orquestación y Python para la lógica.
Valora este artículo

💬 Foro de discusión

¿Tienes dudas sobre Python en Linux: guía completa de instalación, entornos y automatización? Comparte tu pregunta con la comunidad.

¿Tienes cuenta? o comenta como invitado ↓

Todavía no hay mensajes. ¡Sé el primero en participar!

🚀 ¿Quieres dominar Linux profesionalmente?
Cursos bonificados por FUNDAE para empresas — formación 100% subvencionada
Ver cursos de Linux →