2015-09-28 11 views
10

Ich bin am Laufen Django 1.8 und Python 3.4 auf Ubuntu 14.04 LTS. Kürzlich hat meine Django-App gemeldet, dass GEOS nicht vorhanden ist. GEOS ist installiert und libgeos_c.so ist, wo es sein soll (/usr/lib/). Mein Code scheint gut zu sein. Es ist die Quelle eines Docker-Images, das immer noch funktioniert. Dies scheint ein os/Inkompatibilitätsproblem anzuzeigen. Jede Hilfe würde sehr geschätzt werden.Erhalte "django.core.exceptions.ImproperlyConfigured: GEOS ist erforderlich und wurde nicht erkannt." obwohl GEOS installiert ist

Die vollständige Rückverfolgung ist

Traceback (most recent call last): 
    File "<path/to/my/homedir>/pycharm-4.5.1/helpers/pydev/pydevd.py", line 2358, in <module> 
    globals = debugger.run(setup['file'], None, None, is_module) 
    File "<path/to/my/homedir>/pycharm-4.5.1/helpers/pydev/pydevd.py", line 1778, in run 
    pydev_imports.execfile(file, globals, locals) # execute the script 
    File "<path/to/my/homedir>/pycharm-4.5.1/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile 
    exec(compile(contents+"\n", file, 'exec'), glob, loc) 
    File "<path/to/my/pycharm/project>/manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "<path/to/my/virtualenv>/lib/python3.4/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line 
    utility.execute() 
    File "<path/to/my/virtualenv>/lib/python3.4/site-packages/django/core/management/__init__.py", line 312, in execute 
    django.setup() 
    File "<path/to/my/virtualenv>/lib/python3.4/site-packages/django/__init__.py", line 18, in setup 
    apps.populate(settings.INSTALLED_APPS) 
    File "<path/to/my/virtualenv>/lib/python3.4/site-packages/django/apps/registry.py", line 108, in populate 
    app_config.import_models(all_models) 
    File "<path/to/my/virtualenv>/lib/python3.4/site-packages/django/apps/config.py", line 198, in import_models 
    self.models_module = import_module(models_module_name) 
    File "/usr/lib/python3.4/importlib/__init__.py", line 109, in import_module 
    return _bootstrap._gcd_import(name[level:], package, level) 
    File "<frozen importlib._bootstrap>", line 2231, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 2214, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 2203, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked 
    File "<frozen importlib._bootstrap>", line 1129, in _exec 
    File "<frozen importlib._bootstrap>", line 1448, in exec_module 
    File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed 
    File "<path/to/my/virtualenv>/lib/python3.4/site-packages/django/contrib/auth/models.py", line 41, in <module> 
    class Permission(models.Model): 
    File "<path/to/my/virtualenv>/lib/python3.4/site-packages/django/db/models/base.py", line 139, in __new__ 
    new_class.add_to_class('_meta', Options(meta, **kwargs)) 
    File "<path/to/my/virtualenv>/lib/python3.4/site-packages/django/db/models/base.py", line 324, in add_to_class 
    value.contribute_to_class(cls, name) 
    File "<path/to/my/virtualenv>/lib/python3.4/site-packages/django/db/models/options.py", line 250, in contribute_to_class 
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length()) 
    File "<path/to/my/virtualenv>/lib/python3.4/site-packages/django/db/__init__.py", line 36, in __getattr__ 
    return getattr(connections[DEFAULT_DB_ALIAS], item) 
    File "<path/to/my/virtualenv>/lib/python3.4/site-packages/django/db/utils.py", line 240, in __getitem__ 
    backend = load_backend(db['ENGINE']) 
    File "<path/to/my/virtualenv>/lib/python3.4/site-packages/django/db/utils.py", line 111, in load_backend 
    return import_module('%s.base' % backend_name) 
    File "/usr/lib/python3.4/importlib/__init__.py", line 109, in import_module 
    return _bootstrap._gcd_import(name[level:], package, level) 
    File "<frozen importlib._bootstrap>", line 2231, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 2214, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 2203, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked 
    File "<frozen importlib._bootstrap>", line 1129, in _exec 
    File "<frozen importlib._bootstrap>", line 1448, in exec_module 
    File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed 
    File "<path/to/my/virtualenv>/lib/python3.4/site-packages/django/contrib/gis/db/backends/postgis/base.py", line 8, in <module> 
    from .features import DatabaseFeatures 
    File "<path/to/my/virtualenv>/lib/python3.4/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 "<path/to/my/virtualenv>/lib/python3.4/site-packages/django/contrib/gis/db/backends/base/features.py", line 3, in <module> 
    from django.contrib.gis.db.models import aggregates 
    File "<path/to/my/virtualenv>/lib/python3.4/site-packages/django/contrib/gis/db/models/__init__.py", line 12, in <module> 
    "See also https://docs.djangoproject.com/en/%s/ref/contrib/gis/install/geolibs/" % get_docs_version()) 
django.core.exceptions.ImproperlyConfigured: GEOS is required and has not been detected. Are you sure it is installed? See also https://docs.djangoproject.com/en/1.8/ref/contrib/gis/install/geolibs/ 

Ich habe versucht libgdal-dev neu zu installieren. Alle relevanten Pakete (GDAL, GEOS usw.) sind auf dem neuesten Stand.

Ich habe versucht, meinen Weg zurück durch den Python-Code zu arbeiten. es schlägt in djanjo/contrib/gis/geos/__ init__.py auf dem folgenden fehl. Wenn HAS_GEOS auf false gesetzt ist, meldet es, dass GEOS nicht vorhanden ist.

Ich vermute, dass ein aktuelles Betriebssystem Upgrade/Patch GEOS oder GDAL gebrochen hat. Die Ursache scheint etwas mit ctypes zu tun, aber ich kann nicht sehen, was es sein könnte.

Folgendes könnte nützlich sein.

>>> from _ctypes import Union, Structure, Array 
Traceback (most recent call last): 
    File "<input>", line 1, in <module> 
    File "/<path/to/my/homedir>/pycharm-4.5.1/helpers/pydev/pydev_import_hook.py", line 21, in do_import 
    module = self._system_import(name, *args, **kwargs) 
ImportError: /usr/lib/python3.4/lib-dynload/_ctypes.cpython-34m-x86_64-linux-gnu.so: undefined symbol: _PyTraceback_Add 


>>> from django.contrib.gis import gdal 
Traceback (most recent call last): 
    File "<input>", line 1, in <module> 
    File "/<path/to/my/homedir>/pycharm-4.5.1/helpers/pydev/pydev_import_hook.py", line 21, in do_import 
    module = self._system_import(name, *args, **kwargs) 
    File "/<path/to/my/homedir>/pycharm-4.5.1/helpers/pydev/pydev_import_hook.py", line 21, in do_import 
    module = self._system_import(name, *args, **kwargs) 
    File "/<path/to/my/virtualenv>/lib/python3.4/site-packages/django/contrib/gis/gdal/__init__.py", line 47, in <module> 
    from django.contrib.gis.gdal.driver import Driver # NOQA 
    File "/<path/to/my/homedir>/pycharm-4.5.1/helpers/pydev/pydev_import_hook.py", line 21, in do_import 
    module = self._system_import(name, *args, **kwargs) 
    File "/<path/to/my/virtualenv>/lib/python3.4/site-packages/django/contrib/gis/gdal/driver.py", line 1, in <module> 
    from ctypes import c_void_p 
    File "/<path/to/my/homedir>/pycharm-4.5.1/helpers/pydev/pydev_import_hook.py", line 21, in do_import 
    module = self._system_import(name, *args, **kwargs) 
    File "/usr/lib/python3.4/ctypes/__init__.py", line 7, in <module> 
    from _ctypes import Union, Structure, Array 
    File "/<path/to/my/homedir>/pycharm-4.5.1/helpers/pydev/pydev_import_hook.py", line 21, in do_import 
    module = self._system_import(name, *args, **kwargs) 
ImportError: /usr/lib/python3.4/lib-dynload/_ctypes.cpython-34m-x86_64-linux-gnu.so: undefined symbol: _PyTraceback_Add 

Antwort

24

Ich hatte das gleiche Problem heute, obwohl in einem nicht verwandten Python-Projekt. Dies ist die Linie, die ich auch begegnet und das führte mich hier:

ImportError: /usr/lib/python3.4/lib-dynload/_ctypes.cpython-34m-x86_64-linux-gnu.so: undefined symbol: _PyTraceback_Add 

Es sieht aus wie Ubunut eine Python 3.4 Update gedrückt hat, die mit vorhandenen virtuellen Umgebungen nicht kompatibel ist. Ich bin in der Lage, das Problem zu beheben, indem ich das virtualenv neu erstelle. Wo dies nicht praktikabel für den Moment war einfach ersetzt ich den Python virtualenv mit dem System ein:

cd my-virtualenv 
cp /usr/bin/python3.4 bin/python3.4 

Ich kann nicht sagen, ob dies ein sehr sane was zu tun ist, aber es scheint in zu arbeiten, um mein Fall.

+0

Versucht, neue _virtualenv_ mit den gleichen Anforderungen.txt als alt zu erstellen. Immer noch der gleiche Fehler. Versucht, den Python von virtualenv durch '/ usr/bin/python3.4' zu ersetzen. Immer noch der gleiche Fehler. – user3892196

+1

Das Ersetzen des Python3-Excecutable hat den Trick gemacht. Zu faul, mein virtualenv neu zu erstellen. Danke für den Tipp. – Akhorus

2

Sie sollten stattdessen

cp /usr/bin/python3 /path/to/my-virtualenv/bin/python3 

tun, denn das ist die eigentliche Nicht-Symlink-Datei ist.

+0

'python3' verweist auf' python3.4'. Siehe angehängter Ausschnitt aus 'ls' Befehl. 'lrwxrwxrwx 1 root root 9. Jun 3 16:34/usr/bin/python3 -> python3.4' ' -rwxr-xr-x 2 root root 3.697.592 Jul 28 20:56/usr/bin/python3. 4' – user3892196