2008-11-20 8 views
5

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

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

Los problemas aparecen cuando el complemento (esto se importa dinámicamente) usa una biblioteca que no está presente en el repositorio original (nunca se importó). 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 que se importó más tarde (repositorio de paquetes de complementos).

¿Hay una manera fácil de resolver este problema? Tal vez exista tal motor?

Respuesta

3

Al compilar para exe, tendrá este problema.

La única opción que se me ocurre para permitir el acceso de los usuarios con sus plugins 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.

He aquí una muestra:.

from distutils.core import setup 
import py2exe 

setup (name = "script2compile", 
     console=['script2compile.pyw'], 
     version = "1.4", 
     author = "me", 
     author_email="[email protected]", 
     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 
1

PyInstaller hace tienen un sistema de plugins para el manejo de las importaciones ocultos y barcos con varios de los que ya están en Ver 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 hacer que los paquetes externos funcionen ya están integrados dentro del PyInstaller, de modo que no se requiere 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 SupportedPackages.

+0

Estaba pensando en el sistema de complemento para mi aplicación independiente. Tengo una aplicación creada con pyInstaller. Quiero crear complementos para esta aplicación. El problema es cuando el complemento importa algo que no se importó en la aplicación original: la importación falla. – uhz

+0

Por lo general, lo mejor sería si: - los complementos no contienen módulos que ya están en la aplicación binaria - los complementos contienen módulos que no están presentes en la aplicación - importa primero intenta importar desde la aplicación principal, si falla desde los módulos de complemento – uhz

+0

Eso es exactamente lo que hace PyInstaller. ¿Lo has probado? –

Cuestiones relacionadas