Nuestro team de trabajo ha estado horas investigando la resolución a tu interrogante, te compartimos la solución de modo que esperamos resultarte de mucha apoyo.
Solución:
Los siguientes pasos permiten un módulo de Python (llamado module_name
aquí) fuera de un ejecutable creado por PyInstaller para ser importado y para que ese módulo importe módulos que se incluyeron en el ejecutable.
- Agregar
excludes=['module_name']
al objeto de análisis utilizado en la especificación PyInstaller. Esto previenemodule_name.py
siendo incluido en el ejecutable. - Agregar
sys.path.append(os.path.dirname(sys.executable))
dóndemodule_name
se importa en su aplicación. Esto permite importarlo desde el directorio en el que se encuentra el ejecutable, que es diferente al directorio en el que se ejecutará la aplicación (debido a que se descomprime en una carpeta temporal). - Asegúrese de que cualquier importación realizada por el módulo externo también sea realizada por uno de los módulos incluidos. antes de el externo es importado. El interprete no lo haré resolver las importaciones del módulo externo contra los módulos empaquetados, pero voluntad utilizar los que ya existen en
sys.modules
.
Como ejemplo del punto final, considere lo siguiente.
# bundled_module1.py
import external_module
# bundled_module2.py
# module content
# external_module.py
import bundled_module2
Esto fallará en external_module.py
porque no se puede encontrar el módulo importado. Sin embargo, lo siguiente funcionará:
# bundled_module1.py
import bundled_module2
import external_module
# bundled_module2.py
# module content
# external_module.py
import bundled_module2
Esto estará bien si hay un conjunto limitado de módulos incluidos que el externo debería poder importar. Puede volverse difícil de manejar para conjuntos más grandes.
Dado que la documentación establece que el intérprete voluntad resuelve las importaciones contra los módulos incluidos en el ejecutable, esto se siente como un posible error. Sin embargo, la interoperabilidad con módulos fuera del ejecutable no se menciona explícitamente.
Aquí puedes ver las comentarios y valoraciones de los usuarios
Acuérdate de que tienes la capacidad de valorar este enunciado si te ayudó.