# 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
```bash
pip install sincpro-py-compiler
```
O desde el código fuente:
```bash
git clone https://github.com/Sincpro-SRL/sincpro_py_compiler.git
cd sincpro_py_compiler
poetry install
```
## 🚀 Uso Rápido
### Comandos básicos
```bash
# 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
```bash
# Compilar y comprimir con contraseña
sincpro-compile ./mi_proyecto --compress --password "mi_licencia_comercial"
# Resultado: mi_proyecto_compilado.zip (protegido)
```
#### Encriptación Simple
```bash
# 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:
```bash
# 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:
```bash
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:
```bash
sincpro-compile ./mi_addon_odoo --copy-faithful-file __manifest__.py -o ./dist
```
O múltiples patrones:
```bash
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
```bash
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
```bash
sincpro-compile ./mi_app -t basic
```
#### Proyecto Django
```bash
sincpro-compile ./mi_django_project -t django -o ./dist
```
#### Addon Odoo
```bash
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):
```text
# Mi archivo de exclusiones personalizadas
*.log
temp/
config/secret.py
docs/
```
Úsalo con:
```bash
sincpro-compile ./proyecto -e mi_exclusiones.txt
```
### Opciones del CLI
```bash
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
```bash
# Compilar y generar distribución limpia
sincpro-compile ./mi_app -o ./dist -t basic
```
### Preparar addon Odoo para cliente
```bash
# Compilar addon excluyendo manifests y archivos de datos
sincpro-compile ./mi_addon -t odoo -o ./cliente_dist
```
### Proyecto Django para producción
```bash
# Compilar excluyendo migraciones y archivos estáticos
sincpro-compile ./mi_web -t django -o ./produccion
```
## 🛠 Uso Programático
```python
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
- **[Arquitectura del Sistema](docs/ARCHITECTURE.md)** - Detalles técnicos y diseño
- **[Guía de Deployment](docs/DEPLOYMENT.md)** - Instrucciones de lanzamiento e instalación
- **[Tests](tests/)** - Suite de tests completa con casos de uso reales
## �📄 Licencia
MIT License - ver archivo LICENSE para detalles.
## 🏢 Empresa
Desarrollado por **Sincpro SRL** para distribución segura de código Python.
Raw data
{
"_id": null,
"home_page": "https://github.com/Sincpro-SRL/sincpro_py_compiler",
"name": "sincpro-py-compiler",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.10",
"maintainer_email": null,
"keywords": "python, compiler, pyc, build, packaging, distribution, security, encryption, password-protection",
"author": "Sincpro SRL",
"author_email": "dev@sincpro.com",
"download_url": "https://files.pythonhosted.org/packages/16/9a/0c39926be4da2cf8ba07d29dbbefde067918381535b3eb7fd939610b4fc0/sincpro_py_compiler-0.2.1.tar.gz",
"platform": null,
"description": "# SincPro Python Compiler\n\nUna herramienta simple y efectiva para compilar proyectos Python (.py \u2192 .pyc) y distribuir c\u00f3digo compilado de forma segura.\n\n## \ud83c\udfaf Prop\u00f3sito\n\n- **Compilar archivos .py a .pyc** para distribuci\u00f3n segura del c\u00f3digo\n- **Copiar archivos no-Python tal como est\u00e1n** (XML, JS, TXT, etc.)\n- **Excluir archivos espec\u00edficos** seg\u00fan el tipo de proyecto\n- **Ocultar c\u00f3digo fuente** para distribuci\u00f3n a clientes\n\n## \u26a1 Instalaci\u00f3n\n\n```bash\npip install sincpro-py-compiler\n```\n\nO desde el c\u00f3digo fuente:\n\n```bash\ngit clone https://github.com/Sincpro-SRL/sincpro_py_compiler.git\ncd sincpro_py_compiler\npoetry install\n```\n\n## \ud83d\ude80 Uso R\u00e1pido\n\n### Comandos b\u00e1sicos\n\n```bash\n# Compilar proyecto b\u00e1sico\nsincpro-compile ./mi_proyecto\n\n# Especificar directorio de salida\nsincpro-compile ./mi_proyecto -o ./compilado\n\n# Usar template para Django\nsincpro-compile ./mi_django_app -t django\n\n# Usar template para Odoo\nsincpro-compile ./mi_addon_odoo -t odoo\n\n# Ver templates disponibles\nsincpro-compile --list-templates\n```\n\n### \ud83d\udd12 Protecci\u00f3n del C\u00f3digo Compilado (Nuevo Feature)\n\n**SincPro Python Compiler** ahora incluye funcionalidades de seguridad para proteger tu c\u00f3digo compilado mediante compresi\u00f3n con contrase\u00f1a o encriptaci\u00f3n simple. Esto es especialmente \u00fatil para la distribuci\u00f3n comercial donde necesitas una licencia/contrase\u00f1a para acceder al c\u00f3digo.\n\n#### Compresi\u00f3n con Contrase\u00f1a\n\n```bash\n# Compilar y comprimir con contrase\u00f1a\nsincpro-compile ./mi_proyecto --compress --password \"mi_licencia_comercial\"\n\n# Resultado: mi_proyecto_compilado.zip (protegido)\n```\n\n#### Encriptaci\u00f3n Simple\n\n```bash\n# Compilar y encriptar con contrase\u00f1a\nsincpro-compile ./mi_proyecto --encrypt --password \"clave_secreta\"\n\n# Resultado: mi_proyecto_compilado.enc (encriptado)\n```\n\n#### Desproteger C\u00f3digo\n\nPara usar c\u00f3digo protegido, utiliza el comando de desprotecci\u00f3n:\n\n```bash\n# Descomprimir c\u00f3digo protegido\nsincpro-decrypt ./codigo_protegido.zip --password \"mi_licencia_comercial\" -o ./codigo_desprotegido\n\n# Desencriptar c\u00f3digo protegido \nsincpro-decrypt ./codigo_protegido.enc --password \"clave_secreta\" -o ./codigo_desprotegido\n```\n\n#### Ventajas de la Protecci\u00f3n\n\n- **Distribuci\u00f3n Segura**: El c\u00f3digo compilado no puede ser accedido sin la contrase\u00f1a/licencia\n- **Control de Licencias**: Cada cliente necesita su propia contrase\u00f1a para ejecutar el c\u00f3digo\n- **Protecci\u00f3n Comercial**: Impide el acceso casual al c\u00f3digo .pyc\n- **Flexibilidad**: Elige entre compresi\u00f3n (m\u00e1s compatible) o encriptaci\u00f3n (m\u00e1s segura)\n\n### \ud83d\udce6 Copias fieles por template (Nuevo Feature)\n\nA partir de la versi\u00f3n actual, SincPro Python Compiler permite definir archivos y carpetas que ser\u00e1n **copiados fielmente** (sin compilar ni excluir) seg\u00fan el template seleccionado.\n\nPor ejemplo, en el template `odoo`, los siguientes archivos y carpetas se copian tal cual al directorio de salida:\n\n- `__manifest__.py`\n- `__openerp__.py`\n- `static/`\n- `data/`\n- `demo/`\n- `security/`\n\nEsto es \u00fatil para mantener la integridad de archivos requeridos por Odoo y otros frameworks, evitando su compilaci\u00f3n o exclusi\u00f3n.\n\n### Opciones avanzadas de copia fiel\n\nPuedes definir archivos y carpetas adicionales para copiar fielmente usando la opci\u00f3n:\n\n```bash\nsincpro-compile ./mi_proyecto --copy-faithful-file mi_copias_fieles.txt\n```\n\nEl archivo debe contener un patr\u00f3n por l\u00ednea, por ejemplo:\n\n```\n# Copias fieles personalizadas\nconfig.json\nassets/\nlogo.png\n```\n\nEstos patrones se suman a los definidos por el template seleccionado.\n\n### Copia fiel usando patrones directos\n\nAdem\u00e1s de usar archivos de patrones, puedes pasar patrones directos o una lista separada por comas con la opci\u00f3n:\n\n```bash\nsincpro-compile ./mi_addon_odoo --copy-faithful-file __manifest__.py -o ./dist\n```\n\nO m\u00faltiples patrones:\n\n```bash\nsincpro-compile ./mi_addon_odoo --copy-faithful-file \"__manifest__.py,config.json,logo.png\" -o ./dist\n```\n\nEsto copiar\u00e1 fielmente los archivos y carpetas indicados, sin necesidad de crear un archivo de patrones.\n\nTambi\u00e9n puedes seguir usando archivos de texto o archivos Python (.py) con la variable `COPY_FAITHFUL_PATTERNS` para definir m\u00faltiples patrones.\n\n### Ejemplo de uso\n\n```bash\nsincpro-compile ./mi_addon_odoo -t odoo\n```\n\nEn 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\u00fan el template.\n\nPuedes personalizar los templates o agregar tus propios patrones en la carpeta `resources/exclude_patterns/`.\n\n### Uso con diferentes tipos de proyecto\n\n#### Proyecto Python b\u00e1sico\n\n```bash\nsincpro-compile ./mi_app -t basic\n```\n\n#### Proyecto Django\n\n```bash\nsincpro-compile ./mi_django_project -t django -o ./dist\n```\n\n#### Addon Odoo\n\n```bash\nsincpro-compile ./mi_addon -t odoo -o ./compilado\n```\n\n## \ud83d\udccb Templates Disponibles\n\n### `basic` - Proyecto Python b\u00e1sico\n\nExcluye:\n\n- `__pycache__/`, `*.pyc`\n- `.git/`, `.venv/`, `venv/`, `env/`\n- Archivos de log y temporales\n- Archivos de configuraci\u00f3n de IDEs\n\n### `django` - Proyecto Django\n\nIncluye exclusiones b\u00e1sicas m\u00e1s:\n\n- `migrations/`\n- `static/`, `media/`\n- `db.sqlite3`\n\n### `odoo` - Addon Odoo\n\nIncluye exclusiones b\u00e1sicas m\u00e1s:\n\n- `__manifest__.py`, `__openerp__.py`\n- `static/`, `data/`, `demo/`\n- `security/`\n\n## \ud83d\udd27 Opciones Avanzadas\n\n### Archivo de exclusiones personalizado\n\nCrea un archivo con patrones de exclusi\u00f3n (uno por l\u00ednea):\n\n```text\n# Mi archivo de exclusiones personalizadas\n*.log\ntemp/\nconfig/secret.py\ndocs/\n```\n\n\u00dasalo con:\n\n```bash\nsincpro-compile ./proyecto -e mi_exclusiones.txt\n```\n\n### Opciones del CLI\n\n```bash\nsincpro-compile [directorio] [opciones]\n\nOpciones:\n -o, --output DIR Directorio de salida (default: ./compiled)\n -t, --template TEMPLATE Template: basic, django, odoo (default: basic)\n -e, --exclude-file FILE Archivo personalizado de exclusiones\n --list-templates Mostrar templates disponibles\n -v, --verbose Mostrar informaci\u00f3n detallada\n -h, --help Mostrar ayuda\n```\n\n## \ud83d\udca1 Ejemplos Pr\u00e1cticos\n\n### Distribuir una aplicaci\u00f3n Python\n\n```bash\n# Compilar y generar distribuci\u00f3n limpia\nsincpro-compile ./mi_app -o ./dist -t basic\n```\n\n### Preparar addon Odoo para cliente\n\n```bash\n# Compilar addon excluyendo manifests y archivos de datos\nsincpro-compile ./mi_addon -t odoo -o ./cliente_dist\n```\n\n### Proyecto Django para producci\u00f3n\n\n```bash\n# Compilar excluyendo migraciones y archivos est\u00e1ticos\nsincpro-compile ./mi_web -t django -o ./produccion\n```\n\n## \ud83d\udee0 Uso Program\u00e1tico\n\n```python\nfrom sincpro_py_compiler.infrastructure.python_compiler import PythonCompiler\n\n# Crear instancia del compilador\ncompiler = PythonCompiler()\n\n# Compilar proyecto\nsuccess = compiler.compile_project(\n source_dir=\"./mi_proyecto\",\n output_dir=\"./compilado\",\n template=\"basic\"\n)\n\nif success:\n print(\"\u00a1Compilaci\u00f3n exitosa!\")\n```\n\n## \ud83d\udcc1 Estructura de Salida\n\nEl compilador mantiene la estructura original del proyecto:\n\n```\nmi_proyecto/\n\u251c\u2500\u2500 app.py\n\u251c\u2500\u2500 utils.py\n\u251c\u2500\u2500 config.xml\n\u2514\u2500\u2500 static/\n \u2514\u2500\u2500 style.css\n\n# Despu\u00e9s de compilar:\ncompilado/\n\u251c\u2500\u2500 app.pyc # Compilado\n\u251c\u2500\u2500 utils.pyc # Compilado \n\u251c\u2500\u2500 config.xml # Copiado tal como est\u00e1\n\u2514\u2500\u2500 static/\n \u2514\u2500\u2500 style.css # Copiado tal como est\u00e1\n```\n\n## \u26a0\ufe0f Limitaciones\n\n- Solo compila archivos `.py` a `.pyc`\n- No es cifrado ni ofuscaci\u00f3n avanzada\n- Los archivos `.pyc` pueden ser descompilados\n- Para protecci\u00f3n avanzada considerar PyArmor\n\n## \ud83e\udd1d Contribuir\n\n1. Fork el repositorio\n2. Crea una rama para tu feature\n3. Realiza tus cambios\n4. Env\u00eda un Pull Request\n\n## \ufffd Documentaci\u00f3n\n\n- **[Arquitectura del Sistema](docs/ARCHITECTURE.md)** - Detalles t\u00e9cnicos y dise\u00f1o\n- **[Gu\u00eda de Deployment](docs/DEPLOYMENT.md)** - Instrucciones de lanzamiento e instalaci\u00f3n\n- **[Tests](tests/)** - Suite de tests completa con casos de uso reales\n\n## \ufffd\ud83d\udcc4 Licencia\n\nMIT License - ver archivo LICENSE para detalles.\n\n## \ud83c\udfe2 Empresa\n\nDesarrollado por **Sincpro SRL** para distribuci\u00f3n segura de c\u00f3digo Python.\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Herramienta simple para compilar proyectos Python (.py \u2192 .pyc) y distribuir c\u00f3digo compilado con protecci\u00f3n por contrase\u00f1a",
"version": "0.2.1",
"project_urls": {
"Documentation": "https://github.com/Sincpro-SRL/sincpro_py_compiler/tree/main/docs",
"Homepage": "https://github.com/Sincpro-SRL/sincpro_py_compiler",
"Repository": "https://github.com/Sincpro-SRL/sincpro_py_compiler"
},
"split_keywords": [
"python",
" compiler",
" pyc",
" build",
" packaging",
" distribution",
" security",
" encryption",
" password-protection"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "5d9e3c0659dfcec8101dbc85f7a5f0e6cf06e07ff5c5f2c9e00b59b3aea6063e",
"md5": "f5f5cdfb7bf76c6135f90426529af741",
"sha256": "be01e34ce5a67c67a06fc4455d74962488432eb4dd3c327eac61faea54a99f83"
},
"downloads": -1,
"filename": "sincpro_py_compiler-0.2.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f5f5cdfb7bf76c6135f90426529af741",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.10",
"size": 25171,
"upload_time": "2025-08-31T05:26:05",
"upload_time_iso_8601": "2025-08-31T05:26:05.815785Z",
"url": "https://files.pythonhosted.org/packages/5d/9e/3c0659dfcec8101dbc85f7a5f0e6cf06e07ff5c5f2c9e00b59b3aea6063e/sincpro_py_compiler-0.2.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "169a0c39926be4da2cf8ba07d29dbbefde067918381535b3eb7fd939610b4fc0",
"md5": "9a775720cc3dcf40d4fbd94ef01fcb46",
"sha256": "aeb50c0503373e814fcf283461c7b9f43bf7bac69e12f5fced3228afdca8613a"
},
"downloads": -1,
"filename": "sincpro_py_compiler-0.2.1.tar.gz",
"has_sig": false,
"md5_digest": "9a775720cc3dcf40d4fbd94ef01fcb46",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.10",
"size": 18848,
"upload_time": "2025-08-31T05:26:06",
"upload_time_iso_8601": "2025-08-31T05:26:06.920618Z",
"url": "https://files.pythonhosted.org/packages/16/9a/0c39926be4da2cf8ba07d29dbbefde067918381535b3eb7fd939610b4fc0/sincpro_py_compiler-0.2.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-31 05:26:06",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Sincpro-SRL",
"github_project": "sincpro_py_compiler",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "sincpro-py-compiler"
}