python模块dll

新手上路,请多包涵

有没有办法让 python 模块在我的应用程序目录中加载一个 dll 而不是 python 安装附带的版本,而不更改 python 安装(这将需要我制作一个安装程序,小心我没有’ t通过覆盖python模块和全局更改dll版本来破坏人们的其他应用程序…)?

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

原文由 Fire Lancer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 531
2 个回答

好的,事实证明 python 总是将 dll 加载到与 pyd 文件相同的目录中,无论 python 和 os 路径设置为什么。

所以我需要将 _sqlite3.pyd 从 python/v2.5/DLLS 复制到我的新 sqlite3.dll 所在的应用程序目录,使其加载我的新 dll,而不是 python 附带的那个(因为 pyd 文件似乎遵循 PYTHONPATH,即使实际的 dll 本身没有)。

原文由 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题