有没有办法让 python 模块在我的应用程序目录中加载一个 dll 而不是 python 安装附带的版本,而不更改 python 安装(这将需要我制作一个安装程序,小心我没有’ t通过覆盖python模块和全局更改dll版本来破坏人们的其他应用程序…)?
具体来说,我希望 python 使用我的 sqlite3.dll 版本,而不是 python 附带的版本(较旧且似乎没有 fts3 模块)。
原文由 Fire Lancer 发布,翻译遵循 CC BY-SA 4.0 许可协议
有没有办法让 python 模块在我的应用程序目录中加载一个 dll 而不是 python 安装附带的版本,而不更改 python 安装(这将需要我制作一个安装程序,小心我没有’ t通过覆盖python模块和全局更改dll版本来破坏人们的其他应用程序…)?
具体来说,我希望 python 使用我的 sqlite3.dll 版本,而不是 python 附带的版本(较旧且似乎没有 fts3 模块)。
原文由 Fire Lancer 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您谈论的是 Python 模块 DLL,那么只需修改 sys.path
就可以了。但是,如果您谈论的是与这些 DLL 链接 的 DLL;即a libfoo.dll
其中a foo.pyd
依赖,那么你需要修改你的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
。
原文由 Glyph 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答857 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
好的,事实证明 python 总是将 dll 加载到与 pyd 文件相同的目录中,无论 python 和 os 路径设置为什么。
所以我需要将 _sqlite3.pyd 从 python/v2.5/DLLS 复制到我的新 sqlite3.dll 所在的应用程序目录,使其加载我的新 dll,而不是 python 附带的那个(因为 pyd 文件似乎遵循 PYTHONPATH,即使实际的 dll 本身没有)。