Ho studiato un po 'di più questo argomento. Ho iniziato da dichiarazione di techtonik - La risposta è semplice: nessuno l'ha implementata. Questo, tuttavia, fa sorgere un'altra domanda: perché nessuno l'ha implementata? Sospetto che la risposta sia perché funziona. Questo porta a un'altra domanda: perché funziona?
Il motivo tutto funziona senza cartella DLLs
essere copiato in virtualenv è che
- Python cerca
sys.path
di trovare qualsiasi dll di cui ha bisogno
sys.path
dopo l'attivazione di virtualenv contiene percorso alla DLLs
cartella originale
La prima istruzione può essere semplicemente testata rimuovendo il percorso della cartella DLLs
da sys.path
e prova ad importare il modulo select
(questo modulo ha bisogno del file select.pyd
dalla cartella DLLs
) che poi fallisce.
Nel commento dici Mi piacerebbe mantenere le DLL del modulo Python nell'ambiente virtuale insieme al codice Python. Ciò è possibile semplicemente copiando la cartella DLLs
in virtualenv. Il motivo per cui questo funziona è che sys.path
dopo l'attivazione di virtualenv contiene anche il percorso della cartella DLLs
all'interno di virtualenv (sebbene non sia stata creata tale cartella durante la creazione di virtualenv). Questo percorso viene posizionato prima del percorso della cartella originale DLLs
, il che significa che viene ricercata per prima e quindi sostituisce la cartella originale DLLs
.
Ho postato la domanda dal titolo DLLs folder on Windows alla mailing list di Python.
fonte
2013-01-16 13:32:25
"sys.path dopo l'attivazione di virtualenv contiene il percorso della cartella DLL originale" Non ho attivato la mia env e contiene anche il percorso alla cartella DLL originale in "sys.path". Ti ho frainteso? – cubuspl42
* (...) 'sys.path' dopo l'attivazione di virtualenv contiene ** anche ** percorso alla cartella' DLLs 'all'interno di virtualenv (...) * Senza l'attivazione di virtualenv 'sys.path' contiene il percorso per il * Cartella DLLs * dall'installazione di Python. Dopo che virtualenv è stato attivato 'sys.path' contiene ** entrambi ** percorsi - alla specifica cartella * DLLs * di virtualenv e anche alla cartella * DLLs * dall'installazione di Python. –