Sto provando a scrivere un plug-in software che incorpori Python. Su Windows il plug-in è tecnicamente una DLL (questo potrebbe essere rilevante). Il Python Windows FAQ dice:Incorporare Python su Windows: perché deve essere una DLL?
1.Do non costruire Python nel file exe direttamente. Su Windows, Python deve essere una DLL per gestire i moduli di importazione che sono essi stessi DLL. (Questo è il primo elemento non documentato.) Invece, collega a pythonNN.dll; in genere è installato in C: \ Windows \ System. NN è la versione di Python, un numero come "23" per Python 2.3.
La mia domanda è perché esattamente Python deve essere una DLL? Se, come nel mio caso, l'applicazione host non è un exe, ma anche una DLL, posso creare Python in esso? O forse questa nota significa che le estensioni C di terze parti si basano su pythonN.N.dll
per essere presenti e altre DLL non lo faranno? Supponendo che mi piacerebbe avere una singola DLL, , cosa devo fare?
Vedo che c'è il file dynload_win.c
, che sembra essere il modulo per importare estensioni C su Windows e, per quanto posso vedere, analizza il file di estensione per trovare quale pythonX.X.dll
importa; ma non ho esperienza con Windows e non capisco tutto il codice lì.
Cosa succede se compilo personalmente le estensioni della libreria standard e le collego alla mia DLL (che sarebbe composta da mio 'foo' e' bar' e tutti gli oggetti che normalmente vanno in 'pythonNN.dll' come vedo nel' progetto pythoncore')? Nel mio caso è OK avere versioni speciali di librerie standard o estensioni di terze parti. –
Quindi è ancora necessario tutto il resto della libreria standard (tutti i file .py e .pyc e .pyo in genere.) Sono anche specifici per la versione di Python. Puoi comprimerli, ma non puoi evitare di averli. –
Quindi, in pratica, non è possibile incorporare Python nell'applicazione senza associarla a una DLL di Python? – viraj