Forums

GEOS is required and has not been detected

Hello.

I'm trying to do $ python manage.py makemigrations for my project that I've been working on for some time. Suddenly I'm getting the error: django.core.exceptions.ImproperlyConfigured: GEOS is required and has not been detected. This is the stacktrace:

(citystories)15:43 ~/citystories/citystories$ python manage.py makemigrations
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/skoer/.virtualenvs/citystories/lib/python3.4/site-packages/django/core/management/__init__.py", line 338, in execute_from_command_line
utility.execute()
File "/home/skoer/.virtualenvs/citystories/lib/python3.4/site-packages/django/core/management/__init__.py", line 312, in execute
django.setup()
File "/home/skoer/.virtualenvs/citystories/lib/python3.4/site-packages/django/__init__.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File "/home/skoer/.virtualenvs/citystories/lib/python3.4/site-packages/django/apps/registry.py", line 108, in populate
app_config.import_models(all_models)
File "/home/skoer/.virtualenvs/citystories/lib/python3.4/site-packages/django/apps/config.py", line 198, in import_models
self.models_module = import_module(models_module_name)
File "/home/skoer/.virtualenvs/citystories/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 "/home/skoer/.virtualenvs/citystories/lib/python3.4/site-packages/django/contrib/auth/models.py", line 41, in <module>
class Permission(models.Model):
File "/home/skoer/.virtualenvs/citystories/lib/python3.4/site-packages/django/db/models/base.py", line 139, in __new__
new_class.add_to_class('_meta', Options(meta, **kwargs))
File "/home/skoer/.virtualenvs/citystories/lib/python3.4/site-packages/django/db/models/base.py", line 324, in
add_to_class
value.contribute_to_class(cls, name)
File "/home/skoer/.virtualenvs/citystories/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 "/home/skoer/.virtualenvs/citystories/lib/python3.4/site-packages/django/db/__init__.py", line 36, in __getattr__
return getattr(connections[DEFAULT_DB_ALIAS], item)
File "/home/skoer/.virtualenvs/citystories/lib/python3.4/site-packages/django/db/utils.py", line 240, in __getitem__
backend = load_backend(db['ENGINE'])
File "/home/skoer/.virtualenvs/citystories/lib/python3.4/site-packages/django/db/utils.py", line 111, in load_backend
return import_module('%s.base' % backend_name)
File "/home/skoer/.virtualenvs/citystories/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 "/home/skoer/.virtualenvs/citystories/lib/python3.4/site-packages/django/contrib/gis/db/backends/postgis/base.py", line 8, in 
<module>
from .features import DatabaseFeatures
File "/home/skoer/.virtualenvs/citystories/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 "/home/skoer/.virtualenvs/citystories/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 "/home/skoer/.virtualenvs/citystories/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.djangoproj
ect.com/en/1.8/ref/contrib/gis/install/geolibs/

I'm pretty sure I haven't made changes to the local environment where it works as expected. It's been a while since I've made make a git pull in the online environment, so I'm guessing something has changed here?

Maybe you've added a new feature that suddenly depends on geos / postgis? In any case, we should have the GEOS libraries installed, so maybe a google search and the right pip install will fix it?

Well I should already have features that depend on geos/postgis in previous versions of my code, and it has worked fine before. I'm doing spatial lookups from Postgres. As far as I recall all I need is psycopg2 from pip, and that I already have.

I just tried reverting to the last working version of the code, and I'm still getting this error. I've have tried googling for a solution. The few that I get are about installing the GEOS library correctly. Also this thread has risen to result number 5 in under 24 hours, so I'm guessing there aren't many people having this problem. My installed packages are the exact same both locally and on PA. I'm really at a loss here.

It looks like you may need to specify GEOS_LIBRARY_PATH in your DJango settings. Like this:

GEOS_LIBRARY_PATH = '/usr/local/lib/libgeos_c.so'

I first tried to add that line to my base settings in my local environment and got the error: OSError: dlopen(/usr/local/lib/libgeos_c.so, 6): image not found

I then added it to my production settings file and git pull'ed the change to PA, and I still get the same error. Is there another path I should use here on PA, or is /usr/local/... in fact the right one?

That's the path where libgeos_c.so is in the PythonAnywhere environment. You could also try setting the LD_LIBRARY_PATH environment variable in the Bash console you're using:

LD_LIBRARY_PATH=/usr/local/lib

If that works, you'll probably want to set that environment variable in your WSGI file so your web app sees it, too.

I tried pasting LD_LIBRARY_PATH=/usr/local/lib in the Bash console here on PA, but still the same result. So I guess it won't help inserting it in the WSGI file?

Try

export LD_LIBRARY_PATH=/usr/local/lib

This doesn't seem to do the trick either. :(

okay, clutching at straws now, but try switching to a new virtualenv, and reinstalling all your dependencies?

Ah, that seemed to do the trick. Thank you!

Thanks for confirming!

I am having the very same problem, but I do not know how to reinstall all of my dependencies. Could you please give a brief walkthrough?

There's a guide here: https://help.pythonanywhere.com/pages/RebuildingVirtualenvs

Pretty incredible that they made such a specific guide. :)