Python Windows上的GeoDjango:“;找不到GDAL库";/&引用;OSError:[WinError 126]找不到指定的模块";
我一直在尝试设置我的windows计算机,这样我就可以拥有一个带有PostGIS扩展的本地postgreSQL。安装了它之后,我希望能够在将geodjango放到云中之前在本地创建一个项目。我已经在本地机器上使用Django和SQLite DB工作了一段时间,但是由于下一个项目将部分基于基于坐标的数据,我希望设置正确的环境 导入注意:我安装了mini conda,以便在单独的环境中运行。我在工作时确实激活了这种环境“发展” 我曾尝试在线关注geodjango的大部分信息/教程,但无法使其发挥作用。我所做的(主要是以下几点:):Python Windows上的GeoDjango:“;找不到GDAL库";/&引用;OSError:[WinError 126]找不到指定的模块";,python,django,postgresql,postgis,geodjango,Python,Django,Postgresql,Postgis,Geodjango,我一直在尝试设置我的windows计算机,这样我就可以拥有一个带有PostGIS扩展的本地postgreSQL。安装了它之后,我希望能够在将geodjango放到云中之前在本地创建一个项目。我已经在本地机器上使用Django和SQLite DB工作了一段时间,但是由于下一个项目将部分基于基于坐标的数据,我希望设置正确的环境 导入注意:我安装了mini conda,以便在单独的环境中运行。我在工作时确实激活了这种环境“发展” 我曾尝试在线关注geodjango的大部分信息/教程,但无法使其发挥作用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.gis',
'nameOfMyApp',
]
我在settings.py中也有这个:
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'geodjango',
'USER': '****',
'PASSWORD': '****',
'HOST': 'localhost',
}
}
# FOR GEODJANGO
POSTGIS_VERSION = (2, 4, 3)
当我尝试在django中设置数据库时,我运行(在正确的文件夹中):
我得到以下错误:
django.core.exceptions.ImproperlyConfigured: Could not find the GDAL library (tried "gdal202", "gdal201", "gdal20", "gdal111", "gdal110", "gdal19"). Is GDAL installed? If it is, try setting GDAL_LIBRARY_PATH in your settings.
OSError: [WinError 126] The specified module could not be found
OSError: [WinError 193] %1 is not a valid Win32 application
我试着解决这个问题,但似乎没有任何效果。
有谁能帮我在本地建立这一切吗
更新日期7-3-2018:
- 我尝试过自己手动安装GDAL(来自:通用核心组件)
- 我已经安装了(我假设是)来自的python绑定。但我还是犯了同样的错误李>
- 我还尝试将GDAL_库_路径设置为GDAL目录或GDAL数据目录(位于GDAL目录中)
django.core.exceptions.ImproperlyConfigured: Could not find the GDAL library (tried "gdal202", "gdal201", "gdal20", "gdal111", "gdal110", "gdal19"). Is GDAL installed? If it is, try setting GDAL_LIBRARY_PATH in your settings.
OSError: [WinError 126] The specified module could not be found
OSError: [WinError 193] %1 is not a valid Win32 application
(当.dll存在时…我发现以下内容适用于windows:
- 运行
检查您的python是32位还是64位python
- 将相应的(32或64位)安装到
或C:\OSGeo4W
:C:\OSGeo4W64
- 注意:选择Express Web GIS安装并单击下一步
- 在“选择程序包”列表中,确保已选择GDAL;默认情况下,MapServer和Apache也处于启用状态,可以安全地取消选中
- 确保
设置.py中包含以下内容:
import os if os.name == 'nt': import platform OSGEO4W = r"C:\OSGeo4W" if '64' in platform.architecture()[0]: OSGEO4W += "64" assert os.path.isdir(OSGEO4W), "Directory does not exist: " + OSGEO4W os.environ['OSGEO4W_ROOT'] = OSGEO4W os.environ['GDAL_DATA'] = OSGEO4W + r"\share\gdal" os.environ['PROJ_LIB'] = OSGEO4W + r"\share\proj" os.environ['PATH'] = OSGEO4W + r"\bin;" + os.environ['PATH']
- 运行
以验证geodjango是否正常工作python manage.py检查
gdal111.dll
我意识到我还有gdal204.dll
位于C:\OSGeo4W\bin
,并试图在%PYTHON\ROOT%\lib\site packages\django\contrib\gis\gdal\libgdal.py
的第24行(关于Windows NT共享库)用'gdal204'
来“充实”名为的列表变量,即
#[...]
elif os.name == 'nt':
# Windows NT shared libraries
lib_names = ['gdal204', 'gdal202', 'gdal201', 'gdal20', 'gdal111', 'gdal110', 'gdal19']
#[...] ^^^^^^^
现在没有负面影响。对于Microsoft Windows 10和Python3.6.8,我从安装了GDAL 2.3.3,修改了libgdal.py,在lib_名称列表中添加了gdal203
env\lib\site packages\django\contrib\gis\GDAL\libgdal.py
最后,将osgeo和proj添加到路径中,并将GDAL_LIBRARY_路径设置如下(settings.py的开头):
在本例中,env是我的Python环境。以下步骤:
运行python检查python是32位还是64位
将相应的OSGeo4W(32或64位)安装到C:\OSGeo4W
或C:\OSGeo4W64
:
注意:选择Express Web GIS安装并单击下一步
在“选择程序包”列表中,确保已选择GDAL;默认情况下,MapServer和Apache也处于启用状态
确保设置.py中包含以下内容:
导入操作系统
GDAL\u LIBRARY\u PATH=r'C:\OSGeo4W\bin\gdal300'
现在,如果服务器不工作,请继续运行服务器。在终端中运行以下命令
在我的Windows10Pro机器上更新了一些OSGEO4W之后,我又开始遇到GDAL绑定的问题。我以前使用了这里发布的解决方案和
这就是我在使用Windows10Pro 64位、Django3.0.6和GDAL3.0.4以及Python3.7虚拟环境时的工作原理。我在没有OSGEO4W的情况下测试了它,它似乎很有效
首先,从下载GDAL控制盘
修改虚拟环境站点包中的libgdal.py文件,方法是将“gdal300”添加到Django-GDAL包python文件的第23行(/path/to/virtual_-env/Lib/site-packages/Django/contrib/gis/GDAL/libgdal.py):
最后,在Django项目的settings.py文件中添加
if os.name == 'nt':
VENV_BASE = os.environ['VIRTUAL_ENV']
os.environ['PATH'] = os.path.join(VENV_BASE, 'Lib\\site-packages\\osgeo') + ';' + os.environ['PATH']
os.environ['PROJ_LIB'] = os.path.join(VENV_BASE, 'Lib\\site-packages\\osgeo\\data\\proj') + ';' + os.environ['PATH']
我遇到了相同的错误“找不到指定的模块”,即使gdal204.dll
存在于预期位置,具有正确的体系结构(我通过在Python代码中添加断言并从C程序加载dll来验证)
原来是的问题,第一次在命令行上键入python
时自动安装的问题。
这个版本的Python拒绝加载GDAL DLL;我不知道这是一个bug还是一个安全特性
我通过以下方式解决了此问题:
- 卸载Python应用程序
- 删除应用程序执行别名(如中所述)
if os.name == 'nt':
VENV_BASE = os.environ['VIRTUAL_ENV']
os.environ['PATH'] = os.path.join(VENV_BASE, 'Lib\\site-packages\\osgeo') + ';' + os.environ['PATH']
os.environ['PROJ_LIB'] = os.path.join(VENV_BASE, 'Lib\\site-packages\\osgeo\\data\\proj') + ';' + os.environ['PATH']
OSError: [WinError 193] %1 is not a valid Win32 application
if os.name == 'nt':
import platform
OSGEO4W = r"C:\OSGeo4W"
if '64' in platform.architecture()[0]:
OSGEO4W += "64"
assert os.path.isdir(OSGEO4W), "Directory does not exist: " + OSGEO4W
os.environ['OSGEO4W_ROOT'] = OSGEO4W
os.environ['GDAL_DATA'] = OSGEO4W + r"\share\gdal"
os.environ['PROJ_LIB'] = OSGEO4W + r"\share\proj"
os.environ['PATH'] = OSGEO4W + r"\bin;" + os.environ['PATH']
GDAL_LIBRARY_PATH = r'C:\OSGeo4W64\bin\gdal300.dll'
GDAL_LIBRARY_PATH = r'C:\OSGeo4W64\bin\gdal301.dll'