【问题标题】:Error on libcurl.dll when using GDAL of OSGeo4W in Django在 Django 中使用 OSGeo4W 的 GDAL 时出现 libcurl.dll 错误
【发布时间】:2019-05-09 23:23:34
【问题描述】:

我正在尝试在我的 Django 项目中安装 GeoDjango,但 GDAL 出现了奇怪的错误。

按照 Django 文档,我使用 OSGeo4W64 安装了 GDAL、GEOS、PROJ,具体来说,这些是我选择在 OSGeo4W64 设置上安装的软件包:

  • gdal v2.3.2-2
  • geos v3.7.0-1
  • proj v5.2.0-1

我还按照记录设置了我的环境变量。


我遇到了什么错误

起初,当我开始我的 Django 项目(使用 runserver)时,python 试图寻找 gdal202.dll 并引发错误Entry Point Not Found

程序入口点 sqlite3_column_origin_name 不能是 位于动态链接库...\osgeo4w64\bin\gdal202.dll

还有一个错误 Ordinal Not Foundlibcurl.dll(由 OSGeo4W 作为依赖项安装):

无法在动态链接库中定位序数 361 ..\osgeo4w64\bin\libcurl.dll

和python引发错误:

[WinError 182] 操作系统无法运行 %1


我做了什么

我通过将gdal 版本降级为gdal201.dll 修复了第一个错误,但仍然不知道如何解决第二个错误。

我尝试下载最新的 Windows 二进制版本的 libcurl 并替换为,但后来我得到了另一个由 py​​thon 引发的错误:

[WinError 126] 找不到指定的模块

我还检查了我的 curl 二进制文件的 arch 是 x64(与我的 python 和 OSGeo4W 相同)。

希望有人能帮忙,非常感谢。

【问题讨论】:

  • 我想通了。原因是因为libeay32.dll(另一个依赖项)是从另一个目录加载的(因为在 PATH 中排序)。我通过将 OSGeo4W 中的 libeay32.dll 替换为覆盖的 libeay32.dll 解决了这个问题
  • 您可以在下面回答自己并批准答案。
  • 你在哪里找到另一个版本的 libeay32.dll(不是在 OSGeo4W 目录中的那个)?
  • 没关系,我在另一台机器上找到了它,奇怪的是在 C:\Program Files\Git\mingw64\bin 目录中。

标签: django gdal geodjango osgeo


【解决方案1】:

在带有 Django 和 PyCharm 的 Windows 上,我开始收到与您之前的错误之一相同的错误,如下所述:

在动态链接库C:\Program Files\GDAL\gdal203.dll中找不到过程入口点sqlite3_column_origin_name

对我有用的短篇解决方案

重命名:“C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\DLLs\sqlite3.dll”为 sqlite3.dll.bak

我使用了两个工具来帮助我解决这个问题

用于纠正的步骤

  1. 使用 Dependencies 加载 gdal203.dll 并查找用于 sqlite3_column_origin_name 的 DLL
  2. 使用进程资源管理器确定正在将哪个 sqlite3.dll 加载到内存中(欢迎来到 DLL-hell)。就我而言,它位于“C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\DLLs”中
  3. 使用依赖关系从 Visual Studio 检查 sqlite3.dll
  4. 退出 PyCharm 并重命名 Visual Studio DLL sqlite3.dll.bak 以强制它根据我的 PATH 顺序加载一个。谁知道我这样做可能无意中破坏了什么。未来的我可能会因此而恨我。

从新安装 Windows 10 开始,然后安装 PyCharm、Django、GeoDjango……根据我的经验,如果没有大量故障排除,它将无法工作。我认为部分来自 DLL-hell,部分原因是 PyCharm 的 runnerw64.exe 用于挂钩调试器。

【讨论】:

  • 感谢瑞恩,这真的很有帮助。在我的情况下,我需要用我的 OSGeo4W64/bin 安装中的版本替换我的 Python 安装目录(3.9.4)中的 sqlite3.dll 版本。
  • 我按照步骤 1,2 和 4 操作,Pycharm 又开始工作了。 “故障” sqlite3.dll 位于 C:\Users\andytwoods\AppData\Local\Programs\Python\Python38\DLLs
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-30
  • 2016-03-18
相关资源
最近更新 更多