Skip to main content

Herramienta simple para compilar proyectos Python (.py → .pyc) y distribuir código compilado con protección por contraseña

Project description

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.

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

sincpro_py_compiler-0.2.1.tar.gz (18.8 kB view details)

Uploaded Source

Built Distribution

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

sincpro_py_compiler-0.2.1-py3-none-any.whl (25.2 kB view details)

Uploaded Python 3

File details

Details for the file sincpro_py_compiler-0.2.1.tar.gz.

File metadata

  • Download URL: sincpro_py_compiler-0.2.1.tar.gz
  • Upload date:
  • Size: 18.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.4 CPython/3.12.11 Linux/6.11.0-1018-azure

File hashes

Hashes for sincpro_py_compiler-0.2.1.tar.gz
Algorithm Hash digest
SHA256 aeb50c0503373e814fcf283461c7b9f43bf7bac69e12f5fced3228afdca8613a
MD5 9a775720cc3dcf40d4fbd94ef01fcb46
BLAKE2b-256 169a0c39926be4da2cf8ba07d29dbbefde067918381535b3eb7fd939610b4fc0

See more details on using hashes here.

File details

Details for the file sincpro_py_compiler-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: sincpro_py_compiler-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 25.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.4 CPython/3.12.11 Linux/6.11.0-1018-azure

File hashes

Hashes for sincpro_py_compiler-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 be01e34ce5a67c67a06fc4455d74962488432eb4dd3c327eac61faea54a99f83
MD5 f5f5cdfb7bf76c6135f90426529af741
BLAKE2b-256 5d9e3c0659dfcec8101dbc85f7a5f0e6cf06e07ff5c5f2c9e00b59b3aea6063e

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