Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django fails to find psycopg2 module

I am installing python 3.5, django 1.10 and psycopg2 2.7.1 on Amazon EC2 server in order to use a Postgresql database. I am using python 3 inside a virtual environment, and followed the classic installation steps:

cd /home/mycode
virtualenv-3.5 p3env
source p3env/bin/activate
pip install django
cd kenbot
django-admin startproject kenbot
pip install psycopg2

Then I have edited the settings.py file in my project to define the DATABASE settings:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'NAME': 'deleted',
    'USER': 'deleted',
    'PASSWORD': 'deleted',
    'HOST': 'deleted',
    'PORT': '5432',
}   

Finally I type (while still in the virtual environment):

python manage.py makemigrations

And get the following errors:

Traceback (most recent call last):
  File "/home/mycode/p3env/local/lib/python3.5/dist-packages/django/db/backends/postgresql/base.py", line 20, in <module>
    import psycopg2 as Database
ImportError: No module named 'psycopg2'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    execute_from_command_line(sys.argv)
  File "/home/mycode/p3env/local/lib/python3.5/dist-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
    utility.execute()
  File "/home/mycode/p3env/local/lib/python3.5/dist-packages/django/core/management/__init__.py", line 341, in execute
    django.setup()
  File "/home/mycode/p3env/local/lib/python3.5/dist-packages/django/__init__.py", line 27, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/home/mycode/p3env/local/lib/python3.5/dist-packages/django/apps/registry.py", line 108, in populate
    app_config.import_models(all_models)
  File "/home/mycode/p3env/local/lib/python3.5/dist-packages/django/apps/config.py", line 199, in import_models
    self.models_module = import_module(models_module_name)
  File "/home/mycode/p3env/lib64/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 662, in exec_module
  File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
  File "/home/mycode/p3env/local/lib/python3.5/dist-packages/django/contrib/auth/models.py", line 4, in <module>
    from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
  File "/home/mycode/p3env/local/lib/python3.5/dist-packages/django/contrib/auth/base_user.py", line 52, in <module>
    class AbstractBaseUser(models.Model):
  File "/home/mycode/p3env/local/lib/python3.5/dist-packages/django/db/models/base.py", line 119, in __new__
    new_class.add_to_class('_meta', Options(meta, app_label))
  File "/home/mycode/p3env/local/lib/python3.5/dist-packages/django/db/models/base.py", line 316, in add_to_class
    value.contribute_to_class(cls, name)
  File "/home/mycode/p3env/local/lib/python3.5/dist-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 "/home/mycode/p3env/local/lib/python3.5/dist-packages/django/db/__init__.py", line 33, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/home/mycode/p3env/local/lib/python3.5/dist-packages/django/db/utils.py", line 211, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/home/mycode/p3env/local/lib/python3.5/dist-packages/django/db/utils.py", line 115, in load_backend
    return import_module('%s.base' % backend_name)
  File "/home/mycode/p3env/lib64/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/home/mycode/p3env/local/lib/python3.5/dist-packages/django/db/backends/postgresql/base.py", line 24, in <module>
    raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named 'psycopg2'

I have not found this issue anywhere on stackoverflow. One point that may be relevant, when I browse the directory of my virtual environment, I notice that django is installed in /home/mycode/p3env/lib/python3.5/dist-packages whereas psysopg2 is in /home/mycode/p3env/lib64/python3.5/dist-packages.

Thanks for your help!

like image 620
Ken Avatar asked Apr 06 '17 10:04

Ken


People also ask

Why is psycopg2 not working?

The most frequent source of this error is that you haven't installed psycopg2 explicitly with pip install psycopg2 . Alternatively, you may have different Python versions on your computer, and psycopg2 is not installed for the particular version you're using.

How do you fix ModuleNotFoundError No module named psycopg2?

The Python "ModuleNotFoundError: No module named 'psycopg2'" occurs when we forget to install the psycopg2-binary module before importing it or install it in an incorrect environment. To solve the error, install the module by running the pip install psycopg2-binary command.

What is psycopg2 in Django?

Project description Psycopg is the most popular PostgreSQL database adapter for the Python programming language. Its main features are the complete implementation of the Python DB API 2.0 specification and the thread safety (several threads can share the same connection).


1 Answers

As suggested by @dentemm: the issue was resolved by copying all the psysopg2 directories from their current location in the lib64 directory, to the directory where django was installed /home/mycode/p3env/lib/python3.5/dist-packages.

like image 61
Ken Avatar answered Sep 22 '22 05:09

Ken