有没有一种方法,使一个Python模块加载DLL在我的应用程序目录,而不是与Python安装附带的版本,而无需对Python安装变化(当时这需要我做了一个安装程序,并小心我没"通过覆盖python模块和更改dll版本全球范围来打破其他应用程序的人...)?
具体来说,我想python的使用sqlite3.dll的我的版本,而不是与Python附带的版本(这是旧的并没有出现有FTS3模块).
如果您正在谈论Python模块DLL,那么只需修改即可sys.path
.但是,如果您正在讨论与这些DLL 链接的DLL; 即a 依赖于libfoo.dll
哪一个foo.pyd
,那么你需要修改你的PATH环境变量.我写了一段时间以前为PyGTK做过这样的事情,但在你的情况下,我认为应该这样简单:
import os os.environ['PATH'] = 'my-app-dir' + os.pathsep + os.environ['PATH']
这将插入my-app-dir
Windows路径的头部,我相信它也控制DLL的加载顺序.
请记住,在加载有问题的DLL之前,您需要执行此操作,即在导入任何有趣的内容之前.
但是,sqlite3可能有点特殊,因为它是用Python分发的; 快速测试这显然有点棘手,所以我没有sqlite3.dll
具体检查.
好吧,不管python和os路径设置为什么,python总是将pll加载到与pyd文件相同的目录中.
所以我需要将_sqlite3.pyd从python/v2.5/DLLS复制到新的sqlite3.dll所在的app目录,使其加载我的新dll,而不是python附带的那个(因为pyd文件似乎跟随PYTHONPATH,即使actaul dlls自己也不.)