有没有办法让python模块在我的应用程序目录中加载一个dll而不是python安装附带的版本,而不更改python安装(这需要我做一个安装程序,并且要小心我没有通过覆盖python模块和更改dll版本全球范围来破坏其他人的应用程序......)?

具体来说,我希望python使用我的sqlite3.dll版本,而不是python附带的版本(更老版本,似乎没有fts3模块)。

有帮助吗?

解决方案 2

好吧,不管python和os路径的设置是什么,python总是将pll加载到与pyd文件相同的目录中。

所以我需要将_sqlite3.pyd从python / v2.5 / DLLS复制到新的sqlite3.dll的app目录,使其加载我的新dll,而不是python附带的那个(因为pyd文件似乎遵循PYTHONPATH,即使actaul dlls自己也不这样做。

其他提示

如果您正在谈论Python模块DLL,那么只需修改 sys.path 即可。但是,如果您正在讨论针对这些DLL的链接的DLL;即 foo.pyd 所依赖的 libfoo.dll ,则需要修改PATH环境变量。我写了一篇关于前一段时间为PyGTK做这件事的文章,但在你的情况下,我认为它应该是就像这样简单:

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

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

请记住,在加载有问题的DLL之前,即在导入任何有趣的内容之前,您需要执行此操作。

但是,sqlite3可能有点特殊,因为它是用Python发布的;快速测试这显然有点棘手,所以我没有专门检查 sqlite3.dll

如果您的sqlite版本在系统版本之前的sys.path 中,它将使用它。因此,您可以将其放在当前目录中,也可以更改 PYTHONPATH 环境变量来执行此操作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top