LEFA funciona sin necesidad de definir ninguna variable de entorno: en un arranque normal,Documentation Index
Fetch the complete documentation index at: https://mintlify.com/entreunosyceros/lefa/llms.txt
Use this file to discover all available pages before exploring further.
run_app.py deduce la raíz del proyecto a partir de su propia ubicación en disco y coloca el entorno virtual dentro de esa carpeta. Esta página describe las dos variables relacionadas con el arranque y aclara cuál actúa como entrada de configuración y cuál solo como salida informativa.
Variables disponibles
Ruta absoluta al directorio del entorno virtual. Cuando no está definida,
run_app.py aplica la siguiente lógica de fallback:- Si el directorio del proyecto (
PROJECT_DIR) es escribible, usaPROJECT_DIR/.venv(modo desarrollo). - Si el directorio del proyecto no es escribible (instalación en
/usr/share/…), usa$XDG_DATA_HOME/lefa/.venv(o~/.local/share/lefa/.venvsiXDG_DATA_HOMEno está definida).
Variable de solo salida:
run_app.py la fija automáticamente con el valor de PROJECT_DIR (siempre Path(__file__).resolve().parent) y la propaga al proceso hijo mediante os.environ.setdefault. No se lee para determinar la raíz del proyecto; esa ruta se resuelve siempre a partir de la ubicación del propio script.Su utilidad es informativa: permite que scripts externos o herramientas de CI/CD lean LEFA_PROJECT_DIR para conocer el directorio del proyecto sin necesidad de calcularlo por su cuenta.Lógica completa en run_app.py
El fragmento siguiente muestra exactamente cómo get_venv_dir() resuelve la ruta al entorno virtual:
main() fija LEFA_PROJECT_DIR antes de relanzar el proceso con el Python del venv:
PROJECT_DIR se calcula siempre como Path(__file__).resolve().parent (línea 9 de run_app.py) y no puede sobreescribirse mediante una variable de entorno.
Uso en entornos empaquetados
En una instalación estándar (clonar el repositorio y ejecutarrun_app.py), estas variables no requieren configuración manual. Los casos de uso típicos donde LEFA_VENV resulta útil son:
- Paquetes
.debo instalaciones en/usr/share/: el proyecto se despliega en un directorio del sistema (no escribible por el usuario), por lo que el entorno virtual debe residir en el directorio de datos del usuario (~/.local/share/lefa/.venv). LEFA lo detecta automáticamente, peroLEFA_VENVpermite forzar una ubicación diferente si la política del sistema lo requiere. - Rutas personalizadas en un servidor de escritorio compartido: cuando varios usuarios comparten una instalación única de LEFA en
/opt/lefapero cada uno necesita su propio entorno virtual,LEFA_VENVpermite apuntar a un venv por usuario sin modificar el proyecto. - Entornos de CI/CD o pruebas automatizadas: fijar
LEFA_VENVgarantiza que los scripts de prueba usen un entorno virtual conocido independientemente del directorio de trabajo actual.
Si
LEFA_PROJECT_DIR no es escribible y XDG_DATA_HOME tampoco está definida, el entorno virtual se creará en ~/.local/share/lefa/.venv. Asegúrese de que el usuario tenga permisos de escritura en ~/.local/share antes del primer arranque.Punto de entrada
LEFA ofrece dos formas de arrancar la aplicación según el contexto de ejecución.run_app.py — arranque recomendado
Orquesta todo el ciclo de preparación del entorno antes de lanzar la interfaz gráfica:
- Determina la ruta del venv (respetando
LEFA_VENVsi está definida). - Crea el venv si no existe.
- Instala o actualiza las dependencias (
requirements.txto los paquetes mínimosPyQt6,SQLAlchemy,fpdf2,keyring). - Relanza el propio script usando el Python del venv (
os.execv), reemplazando el proceso actual para no dejar un proceso padre bloqueando la terminal.
main.py — punto de entrada directo
Punto de entrada de la aplicación de escritorio (PyQt6). Asume que el entorno virtual ya está activo y que todas las dependencias están instaladas. Inicializa la base de datos SQLite, crea la ventana principal y arranca el bucle de eventos de Qt.
Llame a
main.py directamente solo cuando el venv ya esté activo (instalación manual o desde un entorno de desarrollo con el intérprete correcto). Si lo ejecuta con el Python del sistema sin las dependencias instaladas, Python lanzará un ModuleNotFoundError al intentar importar PyQt6.Ejemplo de uso con LEFA_VENV
El siguiente ejemplo muestra cómo lanzar LEFA desde una instalación empaquetada en/opt/lefa forzando un entorno virtual explícito:
run_app.py:
- Lee
LEFA_VENVy apunta directamente a/opt/lefa/.venvsin aplicar la lógica de fallback. - Publica
LEFA_PROJECT_DIR=/opt/lefaen el entorno del proceso relanzado (calculado desde__file__). - Instala las dependencias en
/opt/lefa/.venvsi aún no están presentes. - Relanza la aplicación con
/opt/lefa/.venv/bin/python.