Pregunta

¿Cómo crear un buen motor de complementos para ejecutables independientes creados con pyInstaller, py2exe o herramientas similares?

No tengo experiencia con py2exe, pero pyInstaller utiliza un enlace de importación para importar paquetes desde su repositorio comprimido. Por supuesto, puedo importar dinámicamente otro repositorio comprimido creado con pyInstaller y ejecutar el código; este puede ser un simple motor de complementos.

Los problemas aparecen cuando el complemento (esto es lo que se importa dinámicamente) usa una biblioteca que no está presente en el repositorio original (nunca importado). Esto se debe a que el enlace de importación es para la aplicación original y busca paquetes en el repositorio original, no el importado más tarde (repositorio de paquetes de complementos).

¿Hay una manera fácil de resolver este problema? ¿Quizás existe tal motor?

¿Fue útil?

Solución

Al compilar a exe, vas a tener este problema.

La única opción que se me ocurre para permitir a los usuarios acceder con sus complementos para usar cualquier biblioteca de Python es incluir todas las bibliotecas en el paquete exe.

Probablemente sea una buena idea limitar las bibliotecas compatibles a un subconjunto y enumerarlo en su documentación. Depende de usted.

Solo he usado py2exe.

En py2exe puede especificar bibliotecas que no se encontraron en la búsqueda en el archivo setup.py .

Aquí hay una muestra:

from distutils.core import setup
import py2exe

setup (name = "script2compile",
       console=['script2compile.pyw'],
       version = "1.4",
       author = "me",
       author_email="somemail@me.com",
       url="myurl.com",
       windows = [{
                    "script":"script2compile.pyw",
                    "icon_resources":[(1,"./ICONS/app.ico")]  # Icon file to use for display
                 }],
       # put packages/libraries to include in the "packages" list
       options = {"py2exe":{"packages": [   "pickle",
                                            "csv",
                                            "Tkconstants",
                                            "Tkinter",
                                            "tkFileDialog",
                                            "pyexpat",
                                            "xml.dom.minidom",
                                            "win32pdh",
                                            "win32pdhutil",
                                            "win32api",
                                            "win32con",
                                            "subprocess", 
                                        ]}} 

       )

import win32pdh
import win32pdhutil
import win32api

Otros consejos

PyInstaller tiene un sistema de complementos para manejar importaciones ocultas, y se envía con varios de los que ya están dentro. Consulte la página web ( http://www.pyinstaller.org ) que dice:

  

El objetivo principal de PyInstaller es ser compatible con paquetes de terceros listos para usar. Esto significa que, con PyInstaller, todos los trucos necesarios para que los paquetes externos funcionen ya están integrados dentro de PyInstaller para que no se requiera la intervención del usuario. Nunca se le pedirá que busque trucos en wikis y aplique modificaciones personalizadas a sus archivos o scripts de configuración. Consulte nuestra lista de compatibilidad de paquetes compatibles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top