Domanda

come creare un buon motore plugin per eseguibili standalone creati con pyInstaller, py2exe o strumenti simili?

Non ho esperienza con py2exe, ma pyInstaller utilizza un hook di importazione per importare pacchetti dal suo repository compresso. Ovviamente sono in grado di importare dinamicamente un altro repository compresso creato con pyInstaller ed eseguire il codice - questo potrebbe essere un semplice motore di plugin.

I problemi si presentano quando il plugin (questo è importato in modo dinamico) usa una libreria che non è presente nel repository originale (mai importato). Questo perché il gancio di importazione è per l'applicazione originale e cerca i pacchetti nel repository originale, non quello importato in seguito (repository di pacchetti plug-in).

C'è un modo semplice per risolvere questo problema? Forse esiste un motore del genere?

È stato utile?

Soluzione

Durante la compilazione in exe, hai questo problema.

L'unica opzione che mi viene in mente per consentire agli utenti di accedere con i loro plugin per utilizzare qualsiasi libreria Python è quella di includere tutte le librerie nel pacchetto exe.

Probabilmente è una buona idea limitare le librerie supportate a un sottoinsieme ed elencarlo nella documentazione. A te.

Ho usato solo py2exe.

In py2exe puoi specificare le librerie che non sono state trovate nella ricerca nel file setup.py .

Ecco un esempio:

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

Altri suggerimenti

PyInstaller ha un sistema di plug-in per gestire le importazioni nascoste e viene spedito con molti di quelli già presenti. Vedi la pagina web ( http://www.pyinstaller.org ) che dice:

  

L'obiettivo principale di PyInstaller è la compatibilità immediata con i pacchetti di terze parti. Ciò significa che, con PyInstaller, tutti i trucchi necessari per far funzionare i pacchetti esterni sono già integrati all'interno dello stesso PyInstaller in modo che non sia richiesto l'intervento dell'utente. Non ti verrà mai richiesto di cercare trucchi nei wiki e applicare modifiche personalizzate ai tuoi file o ai tuoi script di installazione. Controlla il nostro elenco di compatibilità dei pacchetti supportati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top