2008-10-18 102 views
16

有没有办法让python模块在我的应用程序目录中加载dll,而不是python安装附带的版本,而不需要对python安装进行更改(然后我需要安装一个安装程序,并小心我没有打破其他应用程序的人通过覆盖python模块和更改dll版本globaly ...)?python模块dlls

具体而言,我希望python使用我的版本的sqlite3.dll,而不是与python(这是旧的,似乎没有fts3模块)附带的版本。

回答

6

确定它出来python总是将dll加载到与pyd文件相同的目录中,而不管python和os路径设置为什么。

因此,我需要将_sqlite3.pyd从python/v2.5/DLLS复制到我的apps目录中新建的sqlite3.dll所在的位置,使其加载我的新dll,而不是python自带的pyd文件似乎遵循PYTHONPATH,尽管actaul dlls本身不)。

0

如果你的sqlite版本是在sys.path 之前的系统版本,它会使用它。所以你可以把它放在当前目录下,或者改变环境变量PYTHONPATH来做到这一点。

+0

我确实把dll放在我的应用程序目录中,这应该对python安装目录有瑕疵,但sqlite3模块仍然使用python安装目录中的dll,而不是我的。有没有一个单独的DLL路径或什么? – 2008-10-18 10:24:18

+0

你只是把dll放到那个目录下,或者你是否还在里面添加了python包装代码?如果不是,请尝试后者。 – 2008-10-18 10:30:06

22

如果您在谈论Python模块DLL,那么只需修改sys.path应该没问题。但是,如果您正在讨论针对这些DLL链接的链接;即libfoo.dll其中foo.pyd依赖,那么你需要修改你的PATH环境变量。我写了一篇关于doing this for PyGTK a while ago,但在你的情况下,我觉得应该是这么简单:

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

,将在您的Windows路径,我相信也控制加载顺序的DLL的头插入my-app-dir

请记住,在加载有问题的DLL之前,即在导入任何有趣的内容之前,您需要执行此操作。但是,由于它是用Python分发的,sqlite3可能有些特殊情况,快速测试它显然有点棘手,所以我没有特别检查sqlite3.dll

+0

仍然不会加载新的dll ... – 2008-10-18 10:59:58