Skip to main content

Python-first auto-optimizer that rustifies hotspots (skeleton repo)

Project description

PyRust

PyPI version PyPI status License: MIT

Acelera tu código Python automáticamente con Rust.

PyRust es una herramienta que identifica los cuellos de botella de tu proyecto y los "rustifica" automáticamente, generando extensiones nativas seguras y eficientes sin que tengas que escribir una sola línea de Rust.

📚 Documentación: https://pyrust-dev.github.io/pyrust/ 🗒️ Notas de publicación: https://github.com/pyrust-dev/pyrust/releases

🚀 Aceleración Automática (pyrust auto)

La joya de la corona de PyRust es el comando auto. Con una sola ejecución, PyRust orquesta todo el proceso de optimización:

  1. Perfilado: Ejecuta tu código y detecta las funciones más lentas (hotspots).
  2. Análisis: Verifica qué funciones son seguras de convertir a Rust (sin efectos secundarios peligrosos).
  3. Transpilación: Genera código Rust optimizado equivalente a tu Python.
  4. Compilación: Crea extensiones nativas usando PyO3 y Maturin.
  5. Inyección Segura: Modifica tu código para usar la versión rápida, manteniendo la original como respaldo.

Uso básico

Simplemente ve a la raíz de tu proyecto y ejecuta:

pyrust auto .

¿Qué ocurre con mi código?

PyRust es extremadamente cuidadoso con tu código fuente:

  • Backups automáticos: Antes de tocar nada, crea copias de seguridad (.py.bak).
  • Inyección Híbrida: No borra tu código Python. Inyecta un mecanismo de carga inteligente:
# Ejemplo de lo que PyRust inyecta en tu archivo:
try:
    # Intenta importar la versión acelerada en Rust
    from pyrust_extensions.mi_modulo_rust import funcion_lenta as funcion_lenta
except ImportError:
    # Si falla algo (ej. en otra máquina sin compilar), usa la original
    funcion_lenta = _py_funcion_lenta

# Tu función original se renombra y se mantiene segura
def _py_funcion_lenta(...):
    ...
  • Soporte Avanzado: Funciona con funciones globales, métodos de clase y métodos estáticos, preservando la semántica de self y cls.

Índice

Instalación

pip install pyrust

Requisitos:

  • Python 3.10+
  • (Opcional) Rust 1.70+ si deseas compilar desde el código fuente.

Otras Herramientas

Si prefieres tener control manual sobre el proceso, PyRust expone cada paso como una herramienta independiente.

Perfilado Manual

Localiza los puntos lentos de tu código sin modificarlo.

pyrust-profile mi_proyecto --limit 5

Análisis de Compatibilidad

Descubre qué partes de tu código son candidatas a ser rustificadas. PyRust analiza el AST y te dice qué funciones son FULL (totalmente convertibles), PARTIAL o NO (requieren cambios).

pyrust-analyze mi_proyecto --limit 3

API de Runtime

Para usuarios avanzados que desean cargar extensiones dinámicamente o hacer hot-swap en tiempo de ejecución sin reiniciar el proceso.

from pyrust.runtime import reload_extension

# Carga y compila una extensión al vuelo
result = reload_extension("mi_extension", source="ruta/al/archivo.py")
print(result.loaded.module.mi_funcion_rapida(10))

Seguridad y Robustez

PyRust está diseñado para ser seguro por defecto:

  • Límites de Recursos: El compilador rechaza archivos excesivamente grandes (DoS protection).
  • Transpilación Segura: El generador Rust valida tipos estrictamente y evita inyecciones.
  • Protección contra Carreras: Sistema de caché con bloqueos de archivo (filelock) para entornos concurrentes.
  • Validación de Integridad: Verificación de firmas SHA256 en los binarios cargados.

Compatibilidad

Componente Versión Soportada
Python 3.10+
Rust 1.70+ (Edición 2021)
Plataformas Linux (x86_64/aarch64), Windows (x86_64), macOS (x86_64/arm64)

Desarrollo

Para contribuir a PyRust:

# Crear entorno virtual
python -m venv .venv
source .venv/bin/activate  # o .venv\Scripts\activate en Windows

# Instalar dependencias de desarrollo
pip install -e ".[dev]"

# Ejecutar tests
pytest

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyrust_native-0.0.5.tar.gz (1.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyrust_native-0.0.5-cp311-cp311-win_amd64.whl (1.6 MB view details)

Uploaded CPython 3.11Windows x86-64

File details

Details for the file pyrust_native-0.0.5.tar.gz.

File metadata

  • Download URL: pyrust_native-0.0.5.tar.gz
  • Upload date:
  • Size: 1.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for pyrust_native-0.0.5.tar.gz
Algorithm Hash digest
SHA256 cafbc9c62d51c61b062eea69dd6652e4247bf1bd99659cd214eb0dcadfc245b8
MD5 0b328b505ef6df1c9d7db043a65d0eba
BLAKE2b-256 1d55884baea636f2be988dffbabd55d0e2ec84d99fad85f69052351294140227

See more details on using hashes here.

File details

Details for the file pyrust_native-0.0.5-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for pyrust_native-0.0.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 56b403402ffe440d8df18ceb145b535eee8e55f8894b7cbc682d05213bdf7c38
MD5 e15cfd77924b3b55ac4405c6bc9b6d77
BLAKE2b-256 0e01d59873e945618755102314d3c4bffffd853c5a488e811d40beb8946ff971

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page