Domanda

Esiste un modo per fare in modo che un modulo Python carichi una DLL nella directory della mia applicazione anziché la versione fornita con l'installazione di Python, senza apportare modifiche all'installazione di Python (che richiederebbe quindi che abbia fatto un programma di installazione, e fai attenzione Non ho rotto altre app per le persone sovrascrivendo i moduli Python e cambiando le versioni di DLL a livello globale ...)?

In particolare, vorrei che Python usasse la mia versione di sqlite3.dll, piuttosto che la versione fornita con Python (che è più vecchia e non sembra avere il modulo fts3).

È stato utile?

Soluzione 2

Ok, stona python carica sempre la dll nella stessa directory del file pyd, indipendentemente da cosa siano impostati i percorsi python e os.

Quindi avevo bisogno di copiare _sqlite3.pyd da python / v2.5 / DLLS nella directory delle mie app in cui si trova il nuovo sqlite3.dll, facendolo caricare la mia nuova dll, piuttosto che quella fornita con Python (dal momento che il i file pyd sembrano seguire il PYTHONPATH, anche se gli stessi dta actaul non lo fanno).

Altri suggerimenti

Se stai parlando delle DLL del modulo Python, la semplice modifica di sys.path dovrebbe andare bene. Tuttavia, se stai parlando di DLL collegate rispetto a quelle DLL; vale a dire un libfoo.dll da cui dipende un foo.pyd , quindi è necessario modificare la variabile di ambiente PATH. Ho scritto di facendo questo per PyGTK qualche tempo fa , ma nel tuo caso penso che dovrebbe essere semplice come:

import os
os.environ['PATH'] = 'my-app-dir' + os.pathsep + os.environ['PATH']

Ciò inserirà my-app-dir all'inizio del percorso di Windows, che credo controlli anche l'ordine di caricamento per le DLL.

Tieni presente che dovrai farlo prima di caricare la DLL in questione, ovvero prima di importare qualcosa di interessante.

sqlite3 può essere un po 'un caso speciale, poiché è distribuito con Python; è ovviamente un po 'complicato testarlo rapidamente, quindi non ho controllato sqlite3.dll nello specifico.

Se la tua versione di sqlite è in sys.path precedente la versione del sistema la utilizzerà. Quindi puoi inserirlo nella directory corrente o modificare la variabile di ambiente PYTHONPATH per farlo.

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