Python-first auto-optimizer that rustifies hotspots (skeleton repo)
Project description
PyRust
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:
- Perfilado: Ejecuta tu código y detecta las funciones más lentas (hotspots).
- Análisis: Verifica qué funciones son seguras de convertir a Rust (sin efectos secundarios peligrosos).
- Transpilación: Genera código Rust optimizado equivalente a tu Python.
- Compilación: Crea extensiones nativas usando PyO3 y Maturin.
- 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
selfycls.
Í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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cafbc9c62d51c61b062eea69dd6652e4247bf1bd99659cd214eb0dcadfc245b8
|
|
| MD5 |
0b328b505ef6df1c9d7db043a65d0eba
|
|
| BLAKE2b-256 |
1d55884baea636f2be988dffbabd55d0e2ec84d99fad85f69052351294140227
|
File details
Details for the file pyrust_native-0.0.5-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: pyrust_native-0.0.5-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 1.6 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56b403402ffe440d8df18ceb145b535eee8e55f8894b7cbc682d05213bdf7c38
|
|
| MD5 |
e15cfd77924b3b55ac4405c6bc9b6d77
|
|
| BLAKE2b-256 |
0e01d59873e945618755102314d3c4bffffd853c5a488e811d40beb8946ff971
|