2017-12-30 120 views
7

Tôi đang cố gắng này từ giờ và tôi không thể làm cho nó được giải quyết. Tôi đang sử dụng liên kết this để thiết lập GeoDjango trên Windows. Tôi nhận được thông báo lỗi sau và tôi không biết phải làm gì. Tất cả các biến môi trường được thiết lập trong Windows và tôi có thể nhập khẩu vớiLỗi GIS/Gdal/OSGeos Lỗi nhập khẩu trong django trên Windows

from osgeo import gdal

thành công trong thiết bị đầu cuối python như

import gdal

bị phản đối. Trong cơ sở dữ liệu PostgreSQL Tôi có tất cả các phần mở rộng có sẵn theo yêu cầu như address_standardizer, fuzzystrmatch, ogr_fdw, pgrouting, plpgsql, pointcloud, pointcloud_postgis, PostGIS, postgis_sfcgal, postgis_tiger_geocoderpostgis_topology.

Cài đặt dự án 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', 
    ... 
] 

LỖI:

(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 
+0

có bạn thiết lập 'GDAL_LIBRARY_PATH'? DLL GDAL trên đường dẫn cửa sổ của bạn là gì? –

+0

Có tôi đã thêm nó –

+0

Hãy mở 'c:. \ Python27 \ Lib \ ctypes \ __ init __ py' và thêm' in (self._name) 'trong một dòng trước khi' self._handle = _dlopen (self._name, chế độ) 'và đăng kết quả. –

Trả lời

3

Phụ thuộc GIS thực sự khó có được quyền, đặc biệt là trên Windows. Nếu bạn muốn gắn bó với hệ điều hành này, tôi khuyên bạn nên tiếp tục sử dụng OsGeo4W.

Các bước mà làm việc cho tôi như sau:

Hãy chắc chắn để gỡ bỏ cài đặt các bản phân phối của những gói GIS bạn đã cài đặt và cẩn thận làm theo các OSGeo4W installation instructions. Apache và MapServer được chọn để được cài đặt theo mặc định, bạn có thể bỏ chọn chúng vì chúng không cần thiết.

hơn bạn có thể thay đổi settings.py của bạn trông như thế này:

GEOS_LIBRARY_PATH = 'C:\\OSGeo4W64\\bin\\geos_c.dll' 
GDAL_LIBRARY_PATH = 'C:\\OSGeo4W64\\bin\\gdal201.dll' 

Lưu ý 1: các đường dẫn sẽ phụ thuộc vào nơi bạn cài đặt OSGeo4W nhưng (như tôi nhớ) đó là những giá trị mặc định.

Lưu ý 2: nếu bạn tải về và cài đặt phiên bản 32-bit đường dẫn của bạn sẽ trông như thế thay vì điều này:

GEOS_LIBRARY_PATH = 'C:\\OSGeo4W\\bin\\geos_c.dll' 
GDAL_LIBRARY_PATH = 'C:\\OSGeo4W\\bin\\gdal201.dll' 

tôi đã làm việc trên một dự án sử dụng một chồng tương tự và cảm thấy đó là dễ dàng hơn nhiều để thiết lập mọi thứ trên Linux (đặc biệt là Ubuntu). Nếu nó chỉ là một dự án cá nhân học tập hoặc nếu nó sẽ kết thúc được lưu trữ trên một máy Linux anyway, tôi muốn đề nghị đi cho một môi trường dev Linux.

Trên Ubuntu, ví dụ, bạn có thể chỉ cần làm:

$ sudo apt-get install binutils libproj-dev gdal-bin 

Ngoài ra GeoDjango official docs có một số thông tin tốt để.

3

tôi sẽ bỏ qua tất cả những nỗ lực tự xử lý các cài đặt chính mình, và sử dụng một môi trường anaconda. Phụ thuộc GIS nổi tiếng là khó cài đặt, và anaconda đã làm mịn một số lượng lớn các cạnh thô.

Các vấn đề liên quan