J'ai étudié ce sujet un peu plus. Je suis parti de La déclaration de techtonik - La réponse est simple - personne ne l'a implémenté. Ceci cependant, soulève une autre question - pourquoi personne ne l'a implémenté? Je soupçonne que la réponse est parce que cela fonctionne. Cela conduit à une autre question: pourquoi cela fonctionne-t-il?
Le tout raison fonctionne sans DLLs
dossier copié dans virtualenv est que
- Python recherche
sys.path
pour trouver une dll dont il a besoin
sys.path
après l'activation de virtualenv contient chemin du dossier DLLs
d'origine
La première instruction peut être simplement testée en supprimant le chemin d'accès au dossier DLLs
de sys.path
et en essayant d'importer le module select
(ce module a besoin du fichier select.pyd
du dossier DLLs
) qui échoue alors.
Dans le commentaire, vous dites Je voudrais garder les DLL du module Python dans l'environnement virtuel avec le code Python. C'est possible en copiant simplement le dossier DLLs
dans virtualenv. La raison pour laquelle cela fonctionne est que sys.path
après l'activation de virtualenv contient également le chemin d'accès au dossier DLLs
dans virtualenv (bien qu'aucun dossier de ce type ne soit créé lors de la création de virtualenv). Ce chemin est placé avant le chemin d'accès au dossier DLLs
d'origine, ce qui signifie qu'il est recherché en premier et remplace donc le dossier original DLLs
.
J'ai posté une question intitulée DLLs folder on Windows à la liste de diffusion de Python.
"sys.path après l'activation de virtualenv contient le chemin d'accès au dossier DLL d'origine" Je n'ai pas 'activé' mon env, et il contient aussi le chemin vers le dossier DLL d'origine dans' sys.path'. Ai-je mal compris? – cubuspl42
* (...) 'sys.path' après l'activation de virtualenv contient ** aussi ** le chemin vers le dossier' DLLs' dans virtualenv (...) * Sans virtualenv étant activé 'sys.path' contient le chemin vers le * Dossier DLL * de l'installation de Python. Après que virtualenv a été activé, 'sys.path' contient ** les deux chemins ** - vers le dossier * DLLs * spécifique de virtualenv et vers le dossier * DLLs * de l'installation de Python. –