Question

Y at-il un moyen de charger un module python de charger une dll dans mon répertoire d’application plutôt que la version fournie avec l’installation de python, sans apporter de modifications à l’installation de python (ce qui nécessiterait alors la création d’un programme d’installation, et soyez prudent) Je n'ai pas cassé d'autres applications pour les gens en écrasant des modules python et en modifiant les versions de dll globalement ...)?

Plus précisément, j'aimerais que python utilise ma version de sqlite3.dll, plutôt que la version fournie avec python (qui est plus ancienne et ne semble pas avoir le module fts3).

Était-ce utile?

La solution 2

Ok, il semble que python charge toujours la DLL dans le même répertoire que le fichier pyd, quels que soient les chemins d'accès définis pour python et os.

Il me fallait donc copier le fichier _sqlite3.pyd de python / v2.5 / DLLS dans le répertoire de mes applications où se trouve le nouveau fichier sqlite3.dll, ce qui l’a chargé de charger mon nouveau fichier .dll, plutôt que celui fourni avec python (étant donné que Les fichiers pyd semblent suivre le PYTHONPATH, même si les dlls actaul eux-mêmes ne le font pas).

Autres conseils

Si vous parlez de DLL de modules Python, il vous suffira alors de modifier sys.path . Toutefois, si vous parlez de DLL liées à ces DLL; c'est-à-dire un libfoo.dll dont dépend un foo.pyd , vous devez ensuite modifier votre variable d'environnement PATH. J'ai déjà parlé de faire cela pour PyGTK il y a quelque temps , mais dans votre cas, cela devrait être le cas. aussi simple que:

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

Cela insérera mon-répertoire_app en tête de votre chemin Windows, qui, à mon avis, contrôle également l'ordre de chargement des DLL.

N'oubliez pas que vous devez le faire avant de charger la DLL en question, c'est-à-dire avant d'importer quoi que ce soit d'intéressant.

sqlite3 peut constituer un cas particulier, car il est distribué avec Python; C'est évidemment un peu difficile de tester cela rapidement, donc je n'ai pas vérifié spécifiquement sqlite3.dll .

Si votre version de sqlite est dans sys.path avant la version du système, il l'utilisera. Vous pouvez donc le placer dans le répertoire en cours ou modifier la variable d’environnement PYTHONPATH pour le faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top