GIS / Gdal / OSGeos在Windows上的django中导入错误
I am trying this from hours now and I couldn't get get it solved. I am using this link to setup GeoDjango on Windows. I am getting following error message and I have no clue what to do. All the environment variables are set in Windows and I am able to import with
我现在几个小时都在尝试这个,我无法解决它。我正在使用此链接在Windows上设置GeoDjango。我收到以下错误消息,我不知道该怎么做。所有环境变量都在Windows中设置,我可以导入
from osgeo import gdal
来自osgeo import gdal
successfully in python terminal as
成功在python终端中作为
import gdal
导入gdal
is deprecated. In Postgresql database I have all extensions available as required like address_standardizer, fuzzystrmatch, ogr_fdw, pgrouting, plpgsql, pointcloud, pointcloud_postgis, postgis, postgis_sfcgal, postgis_tiger_geocoder and postgis_topology.
已弃用。在Postgresql数据库中,我根据需要提供所有扩展,如address_standardizer,fuzzystrmatch,ogr_fdw,pgrouting,plpgsql,pointcloud,pointcloud_postgis,postgis,postgis_sfcgal,postgis_tiger_geocoder和postgis_topology。
Django Project Settings:
Django项目设置:
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'postgis_24_sample',
'USER': 'postgres',
'PASSWORD': 'Hello123',
'HOST': 'localhost',
'PORT': '',
}
}
GDAL_LIBRARY_PATH = os.getenv('GDAL_LIBRARY_PATH')
GEOS_LIBRARY_PATH = os.getenv('GEOS_LIBRARY_PATH')
INSTALLED_APPS = [
...
'django.contrib.postgis',
...
]
ERROR:
错误:
(easy_geodj) C:\Users\dell\Desktop\easy_geodj\easy_geodj\djlocate>python manage.py runserver
Unhandled exception in thread started by <function wrapper at 0x066D6330>
Traceback (most recent call last):
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\utils\autoreload.py", line 227, in wrapper
fn(*args, **kwargs)
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\core\management\commands\runserver.py", line 117, in inner_run
autoreload.raise_last_exception()
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\utils\autoreload.py", line 250, in raise_last_exception
six.reraise(*_exception)
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\utils\autoreload.py", line 227, in wrapper
fn(*args, **kwargs)
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\__init__.py", line 27, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\apps\registry.py", line 108, in populate
app_config.import_models()
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\apps\config.py", line 202, in import_models
self.models_module = import_module(models_module_name)
File "c:\python27\Lib\importlib\__init__.py", line 37, in import_module
__import__(name)
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\auth\models.py", line 4, in <module>
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\auth\base_user.py", line 52, in <module>
class AbstractBaseUser(models.Model):
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\db\models\base.py", line 124, in __new__
new_class.add_to_class('_meta', Options(meta, app_label))
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\db\models\base.py", line 330, in add_to_class
value.contribute_to_class(cls, name)
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\db\models\options.py", line 214, in contribute_to_class
self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\db\__init__.py", line 33, in __getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\db\utils.py", line 211, in __getitem__
backend = load_backend(db['ENGINE'])
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\db\utils.py", line 115, in load_backend
return import_module('%s.base' % backend_name)
File "c:\python27\Lib\importlib\__init__.py", line 37, in import_module
__import__(name)
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\db\backends\postgis\base.py", line 5, in <module>
from .features import DatabaseFeatures
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\db\backends\postgis\features.py", line 1, in <module>
from django.contrib.gis.db.backends.base.features import BaseSpatialFeatures
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\db\backends\base\features.py", line 4, in <module>
from django.contrib.gis.db.models import aggregates
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\db\models\__init__.py", line 3, in <module>
from django.contrib.gis.db.models.aggregates import * # NOQA
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\db\models\aggregates.py", line 1, in <module>
from django.contrib.gis.db.models.fields import ExtentField
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\db\models\fields.py", line 3, in <module>
from django.contrib.gis import forms, gdal
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\forms\__init__.py", line 3, in <module>
from .fields import ( # NOQA
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\forms\fields.py", line 4, in <module>
from django.contrib.gis.geos import GEOSException, GEOSGeometry
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\geos\__init__.py", line 5, in <module>
from .collections import ( # NOQA
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\geos\collections.py", line 11, in <module>
from django.contrib.gis.geos.geometry import GEOSGeometry, LinearGeometryMixin
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\geos\geometry.py", line 11, in <module>
from django.contrib.gis import gdal
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\gdal\__init__.py", line 43, in <module>
from django.contrib.gis.gdal.driver import Driver # NOQA
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\gdal\driver.py", line 5, in <module>
from django.contrib.gis.gdal.prototypes import ds as vcapi, raster as rcapi
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\gdal\prototypes\ds.py", line 9, in <module>
from django.contrib.gis.gdal.libgdal import GDAL_VERSION, lgdal
File "C:\Users\dell\Desktop\easy_geodj\lib\site-packages\django\contrib\gis\gdal\libgdal.py", line 48, in <module>
lgdal = CDLL(lib_path)
File "c:\python27\Lib\ctypes\__init__.py", line 366, in __init__
self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found
3 个解决方案
#1
3
GIS dependencies are really hard to get right, especially on Windows. If you want to stick with this OS I'd recommend keep using OsGeo4W.
GIS依赖关系很难做到,特别是在Windows上。如果你想坚持使用这个操作系统,我建议继续使用OsGeo4W。
The steps that worked for me are the following:
对我有用的步骤如下:
Make sure to uninstall every distribution of those GIS packages you've installed and carefully follow the OSGeo4W installation instructions. Apache and MapServer are checked to be installed by default, you can uncheck them as they are not needed.
确保卸载已安装的所有GIS软件包的每个分发版,并仔细遵循OSGeo4W安装说明。默认情况下会检查Apache和MapServer是否已安装,您可以在不需要时取消选中它们。
Than you can change your settings.py
to look like this:
您可以将settings.py更改为如下所示:
GEOS_LIBRARY_PATH = 'C:\\OSGeo4W64\\bin\\geos_c.dll'
GDAL_LIBRARY_PATH = 'C:\\OSGeo4W64\\bin\\gdal201.dll'
Note 1: the paths will depend on where you installed OSGeo4W but (as I remember) those are the defaults.
注1:路径将取决于您安装OSGeo4W的位置,但(我记得)这些是默认值。
Note 2: if you download and install the 32-bit version your paths should look like this instead:
注意2:如果您下载并安装32位版本,则路径应如下所示:
GEOS_LIBRARY_PATH = 'C:\\OSGeo4W\\bin\\geos_c.dll'
GDAL_LIBRARY_PATH = 'C:\\OSGeo4W\\bin\\gdal201.dll'
I've worked on a project using a similar stack and felt it was a lot easier to set things up on Linux (Ubuntu, particularly). If it's just a learning personal project or if it'll end up hosted on a Linux machine anyway, I'd suggest going for a Linux dev environment.
我使用类似的堆栈开发了一个项目,觉得在Linux上设置(特别是Ubuntu)要容易得多。如果它只是一个学习个人项目,或者无论如何最终都会托管在Linux机器上,我建议你去Linux开发环境。
On Ubuntu, for example, you can just do:
例如,在Ubuntu上,您可以这样做:
$ sudo apt-get install binutils libproj-dev gdal-bin
Also the GeoDjango official docs have some good info to.
此外,GeoDjango官方文档也有一些很好的信息。
更多相关文章
- 用于Python项目的低内存和最快查询数据库
- 如何自动启动/调试大型项目?
- 人工智能和机器学习领域开源项目
- Gunicorn + Django + Heroku。Python的路径问题
- py2exe使用相对路径的当前目录问题
- tensorflow 变量定义路径//问题
- python在windows中的文件路径问题
- 参与一个Python的开源项目Python-QQ
- Python添加默认模块搜索包路径