Skip to main content

SincPro Python Compiler

Una herramienta simple y efectiva para compilar proyectos Python (.py → .pyc) y distribuir código compilado de forma segura.

🎯 Propósito

  • Compilar archivos .py a .pyc para distribución segura del código
  • Copiar archivos no-Python tal como están (XML, JS, TXT, etc.)
  • Excluir archivos específicos según el tipo de proyecto
  • Ocultar código fuente para distribución a clientes

⚡ Instalación

pip install sincpro-py-compiler

O desde el código fuente:

git clone https://github.com/Sincpro-SRL/sincpro_py_compiler.git
cd sincpro_py_compiler
poetry install

🚀 Uso Rápido

Comandos básicos

# Compilar proyecto básico
sincpro-compile ./mi_proyecto

# Especificar directorio de salida
sincpro-compile ./mi_proyecto -o ./compilado

# Usar template para Django
sincpro-compile ./mi_django_app -t django

# Usar template para Odoo
sincpro-compile ./mi_addon_odoo -t odoo

# Ver templates disponibles
sincpro-compile --list-templates

🔒 Protección del Código Compilado (Nuevo Feature)

SincPro Python Compiler ahora incluye funcionalidades de seguridad para proteger tu código compilado mediante compresión con contraseña o encriptación simple. Esto es especialmente útil para la distribución comercial donde necesitas una licencia/contraseña para acceder al código.

Compresión con Contraseña

# Compilar y comprimir con contraseña
sincpro-compile ./mi_proyecto --compress --password "mi_licencia_comercial"

# Resultado: mi_proyecto_compilado.zip (protegido)

Encriptación Simple

# Compilar y encriptar con contraseña
sincpro-compile ./mi_proyecto --encrypt --password "clave_secreta"

# Resultado: mi_proyecto_compilado.enc (encriptado)

Desproteger Código

Para usar código protegido, utiliza el comando de desprotección:

# Descomprimir código protegido
sincpro-decrypt ./codigo_protegido.zip --password "mi_licencia_comercial" -o ./codigo_desprotegido

# Desencriptar código protegido  
sincpro-decrypt ./codigo_protegido.enc --password "clave_secreta" -o ./codigo_desprotegido

Ventajas de la Protección

  • Distribución Segura: El código compilado no puede ser accedido sin la contraseña/licencia
  • Control de Licencias: Cada cliente necesita su propia contraseña para ejecutar el código
  • Protección Comercial: Impide el acceso casual al código .pyc
  • Flexibilidad: Elige entre compresión (más compatible) o encriptación (más segura)

📦 Copias fieles por template (Nuevo Feature)

A partir de la versión actual, SincPro Python Compiler permite definir archivos y carpetas que serán copiados fielmente (sin compilar ni excluir) según el template seleccionado.

Por ejemplo, en el template odoo, los siguientes archivos y carpetas se copian tal cual al directorio de salida:

  • __manifest__.py
  • __openerp__.py
  • static/
  • data/
  • demo/
  • security/

Esto es útil para mantener la integridad de archivos requeridos por Odoo y otros frameworks, evitando su compilación o exclusión.

Opciones avanzadas de copia fiel

Puedes definir archivos y carpetas adicionales para copiar fielmente usando la opción:

sincpro-compile ./mi_proyecto --copy-faithful-file mi_copias_fieles.txt

El archivo debe contener un patrón por línea, por ejemplo:

# Copias fieles personalizadas
config.json
assets/
logo.png

Estos patrones se suman a los definidos por el template seleccionado.

Copia fiel usando patrones directos

Además de usar archivos de patrones, puedes pasar patrones directos o una lista separada por comas con la opción:

sincpro-compile ./mi_addon_odoo --copy-faithful-file __manifest__.py -o ./dist

O múltiples patrones:

sincpro-compile ./mi_addon_odoo --copy-faithful-file "__manifest__.py,config.json,logo.png" -o ./dist

Esto copiará fielmente los archivos y carpetas indicados, sin necesidad de crear un archivo de patrones.

También puedes seguir usando archivos de texto o archivos Python (.py) con la variable COPY_FAITHFUL_PATTERNS para definir múltiples patrones.

Ejemplo de uso

sincpro-compile ./mi_addon_odoo -t odoo

En este caso, los archivos .py se compilan a .pyc, los archivos definidos como "copias fieles" se copian tal cual, y el resto se excluye según el template.

Puedes personalizar los templates o agregar tus propios patrones en la carpeta resources/exclude_patterns/.

Uso con diferentes tipos de proyecto

Proyecto Python básico

sincpro-compile ./mi_app -t basic

Proyecto Django

sincpro-compile ./mi_django_project -t django -o ./dist

Addon Odoo

sincpro-compile ./mi_addon -t odoo -o ./compilado

📋 Templates Disponibles

basic - Proyecto Python básico

Excluye:

  • __pycache__/, *.pyc
  • .git/, .venv/, venv/, env/
  • Archivos de log y temporales
  • Archivos de configuración de IDEs

django - Proyecto Django

Incluye exclusiones básicas más:

  • migrations/
  • static/, media/
  • db.sqlite3

odoo - Addon Odoo

Incluye exclusiones básicas más:

  • __manifest__.py, __openerp__.py
  • static/, data/, demo/
  • security/

🔧 Opciones Avanzadas

Archivo de exclusiones personalizado

Crea un archivo con patrones de exclusión (uno por línea):

# Mi archivo de exclusiones personalizadas
*.log
temp/
config/secret.py
docs/

Úsalo con:

sincpro-compile ./proyecto -e mi_exclusiones.txt

Opciones del CLI

sincpro-compile [directorio] [opciones]

Opciones:
  -o, --output DIR          Directorio de salida (default: ./compiled)
  -t, --template TEMPLATE   Template: basic, django, odoo (default: basic)
  -e, --exclude-file FILE   Archivo personalizado de exclusiones
  --list-templates         Mostrar templates disponibles
  -v, --verbose           Mostrar información detallada
  -h, --help              Mostrar ayuda

💡 Ejemplos Prácticos

Distribuir una aplicación Python

# Compilar y generar distribución limpia
sincpro-compile ./mi_app -o ./dist -t basic

Preparar addon Odoo para cliente

# Compilar addon excluyendo manifests y archivos de datos
sincpro-compile ./mi_addon -t odoo -o ./cliente_dist

Proyecto Django para producción

# Compilar excluyendo migraciones y archivos estáticos
sincpro-compile ./mi_web -t django -o ./produccion

🛠 Uso Programático

from sincpro_py_compiler.infrastructure.python_compiler import PythonCompiler

# Crear instancia del compilador
compiler = PythonCompiler()

# Compilar proyecto
success = compiler.compile_project(
    source_dir="./mi_proyecto",
    output_dir="./compilado",
    template="basic"
)

if success:
    print("¡Compilación exitosa!")

📁 Estructura de Salida

El compilador mantiene la estructura original del proyecto:

mi_proyecto/
├── app.py
├── utils.py
├── config.xml
└── static/
    └── style.css

# Después de compilar:
compilado/
├── app.pyc          # Compilado
├── utils.pyc        # Compilado  
├── config.xml       # Copiado tal como está
└── static/
    └── style.css    # Copiado tal como está

⚠️ Limitaciones

  • Solo compila archivos .py a .pyc
  • No es cifrado ni ofuscación avanzada
  • Los archivos .pyc pueden ser descompilados
  • Para protección avanzada considerar PyArmor

🤝 Contribuir

  1. Fork el repositorio
  2. Crea una rama para tu feature
  3. Realiza tus cambios
  4. Envía un Pull Request

� Documentación

�📄 Licencia

MIT License - ver archivo LICENSE para detalles.

🏢 Empresa

Desarrollado por Sincpro SRL para distribución segura de código Python.

Metadata

Release files for sincpro-py-compiler 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sincpro-py-compiler 0.2.1
File Size Uploaded
sincpro_py_compiler-0.2.1.tar.gz 18.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sincpro-py-compiler 0.2.1
File Interpreter ABI Platform
sincpro_py_compiler-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 44.0 kB

Release files / sincpro_py_compiler-0.2.1.tar.gz

Download URL sincpro_py_compiler-0.2.1.tar.gz
Size 18.8 kB
Tags Source
SHA-256 checksum
How to use checksums
aeb50c0503373e814fcf283461c7b9f43bf7bac69e12f5fced3228afdca8613a
BLAKE2b-256 checksum
How to use checksums
169a0c39926be4da2cf8ba07d29dbbefde067918381535b3eb7fd939610b4fc0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.4 CPython/3.12.11 Linux/6.11.0-1018-azure

Release files / sincpro_py_compiler-0.2.1-py3-none-any.whl

Download URL sincpro_py_compiler-0.2.1-py3-none-any.whl
Size 25.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
be01e34ce5a67c67a06fc4455d74962488432eb4dd3c327eac61faea54a99f83
BLAKE2b-256 checksum
How to use checksums
5d9e3c0659dfcec8101dbc85f7a5f0e6cf06e07ff5c5f2c9e00b59b3aea6063e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.4 CPython/3.12.11 Linux/6.11.0-1018-azure

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page