在Django中使用OSGeo4W的GDAL时出现libcurl.dll错误

3
我正在尝试在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错误:
The procedure entry point sqlite3_column_origin_name could not be located in the dynamic link library ...\osgeo4w64\bin\gdal202.dll
还有一个依赖项由OSGeo4W安装的libcurl.dll引发的Ordinal Not Found错误:
The ordinal 361 could not be located in the dynamic link library ..\osgeo4w64\bin\libcurl.dll
然后Python引发以下错误:
[WinError 182] The operating system cannot run %1
我通过将gdal版本降级为gdal201.dll来解决了第一个错误,但仍然无法解决第二个错误。
我尝试下载最新的Windows二进制版本的libcurl并替换它,但是然后Python引发了另一个错误:
[WinError 126] The specified module could not be found
我还检查了我的curl二进制文件的架构是x64(与我的Python和OSGeo4W相同)。
希望有人可以帮助,非常感谢。

我找到了解决方法。原因是因为另一个依赖项libeay32.dll从另一个目录加载(由于PATH中的顺序)。我通过将OSGeo4W中的libeay32.dll替换为被覆盖的libeay32.dll来解决了这个问题。 - phuctm97
2
您可以在下面回答并批准答案。 - Udi
你在哪里找到了 libeay32.dll 的另一个版本(除了 OSGeo4W 目录中的那个)? - Joel B
没关系,我在另一台机器上找到了它,奇怪的是它在C:\Program Files\Git\mingw64\bin目录下。 - Joel B
1个回答

2
在Windows上使用Django和PyCharm时,我开始收到与您早期描述的错误相同的错误消息,如下所述:
“动态链接库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 2.Process Explorer 64 以下是纠正步骤:
使用依赖项加载gdal203.dll,并查找用于sqlite3_column_origin_name的DLL。
使用Process Explorer确定加载到内存中的sqlite3.dll是哪个(欢迎来到DLL地狱)。在我的情况下,它在“C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\DLLs”中。
使用依赖项检查Visual Studio的sqlite3.dll。
退出PyCharm并将Visual Studio DLL sqlite3.dll.bak重命名,以强制根据我的PATH顺序加载它。谁知道我可能会意外破坏什么,未来的我可能会对此感到不满。
从新安装Windows 10开始,然后安装PyCharm、Django、GeoDjango... 根据我的经验,在不进行大量故障排除的情况下无法正常工作。我认为部分原因是由于DLL地狱,部分原因是由于PyCharm的runnerw64.exe用于挂接调试器。

1
谢谢Ryan,这真的很有帮助。在我的情况下,我需要用OSGeo4W64 / bin安装中的版本替换Python安装目录(3.9.4)中的sqlite3.dll版本。 - Tom
1
我按照步骤1、2和4进行操作,现在Pycharm又可以正常工作了。有问题的sqlite3.dll位于C:\Users\andytwoods\AppData\Local\Programs\Python\Python38\DLLs。 - andyw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接