39

I have Pythong2.6, psycopg2 and pgAdmin3 installed using Macports. My settings.py is:

DATABASE_ENGINE = 'postgresql_psycopg2'           # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'mysite'             # Or path to database file if using sqlite3.
DATABASE_USER = 'postgres'             # Not used with sqlite3.
DATABASE_PASSWORD = ''         # Not used with sqlite3.
DATABASE_HOST = ''             # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = ''             # Set to empty string for default. Not used with sqlite3.

The error I get when I run python manage.py syncdb is:

Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_manager(settings)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/__init__.py", line 362, in execute_manager
    utility.execute()
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/__init__.py", line 303, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/base.py", line 195, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/base.py", line 221, in execute
    self.validate()
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/base.py", line 249, in validate
    num_errors = get_validation_errors(s, app)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/validation.py", line 22, in get_validation_errors
    from django.db import models, connection
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/__init__.py", line 41, in <module>
    backend = load_backend(settings.DATABASE_ENGINE)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/__init__.py", line 17, in load_backend
    return import_module('.base', 'django.db.backends.%s' % backend_name)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 22, in <module>
    raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named psycopg2

Please note, I am a complete beginner in this stuff. I am originally a PHP-guy and trying out Python for a small personal project. Do I need to "turn on" Postgres?

Also, when I sudo python manage.py runserver 8080 I get this error:

Validating models...
Unhandled exception in thread started by <function inner_run at 0x1242670>
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/commands/runserver.py", line 48, in inner_run
    self.validate(display_num_errors=True)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/base.py", line 249, in validate
    num_errors = get_validation_errors(s, app)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/management/validation.py", line 22, in get_validation_errors
    from django.db import models, connection
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/__init__.py", line 41, in <module>
    backend = load_backend(settings.DATABASE_ENGINE)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/__init__.py", line 17, in load_backend
    return import_module('.base', 'django.db.backends.%s' % backend_name)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module
    __import__(name)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/backends/postgresql_psycopg2/base.py", line 22, in <module>
    raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e)
django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named psycopg2

Please guide me. Any reply will be appreciated.

Thanks,

Wenbert!

a paid nerd
  • 28,574
  • 30
  • 121
  • 167
wenbert
  • 5,113
  • 7
  • 46
  • 75

16 Answers16

39

There seems to be a problem with your psycopg2 installation – Python does not find it. This is a Python installation problem, not a Django issue.

You can try to load it manually using the Python interpreter and see if it works:

$ python
>>> import psycopg2

If you get an ImportError exception, your installation is erroneous. To get a list of all directories Python looks for modules, use sys.path:

$ python
>>> import sys
>>> print sys.path

You can also add custom directories to Python's module search path by modifying the sys.path variable. Do this somewhere before the respective import statement(s):

import sys
sys.path.append("my-path")

# ...
import psycopg2
Ferdinand Beyer
  • 58,119
  • 13
  • 142
  • 141
  • What do i do so that python looks in this path /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages instead of /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages – wenbert Sep 05 '09 at 12:40
  • You can modify sys.path to add your own search directories. For django, you should do this in your settings.py. See my updated post for details. – Ferdinand Beyer Sep 05 '09 at 12:42
  • Is it okay if I created a symbolic link to the python path created by Macports? Basically, I have something like this: Python.framework -> /opt/local/Library/Frameworks/Python.framework – wenbert Sep 05 '09 at 12:54
  • 2
    I don' think it's a good idea to redirect the whole Python.framework since parts of Mac OS X might rely on it (plus, any software update might undo this or worse, be confused and install stuff elsewere). You might want to try symlinkling the actual packages inside the site-packages directory. – Simon Sep 05 '09 at 14:24
  • Thanks for this. I will create a symlink to the actual packages created by Macports. – wenbert Sep 07 '09 at 06:37
29

If you have pip installed, simply install the missing extension by running:

$ pip install psycopg2
erator
  • 643
  • 1
  • 6
  • 11
17

For the record I got the same error for a different reason:

I had put

'ENGINE': 'django.db.backends.postgresql'

instead of

'ENGINE': 'django.db.backends.postgresql_psycopg2'

in settings.py

Tim Abell
  • 8,954
  • 8
  • 70
  • 99
  • Hmmm no mention of that engine in the [db engine docs](https://docs.djangoproject.com/en/2.1/ref/settings/#engine) – stephen Aug 06 '18 at 14:30
7

Follow the steps:

  1. Install python libraries on your OS:
    • python-dev
    • libpq-dev
  2. Execute the command to install the psycopg2 library:
    • easy_install psycopg2

source: http://initd.org/psycopg/install/

tremendows
  • 4,136
  • 3
  • 30
  • 50
4

I realized I didn't have psycopg2 installed

aptitude install python-psycopg2

Worked like a charm

Eliel
  • 109
  • 1
  • 7
3

Although you installed it, Python can apparently not find the module psycopg2. This is usually due to the module not being in Python's path. See if you can find a folder named psycopg2 in /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages. If it's not there, did MacPorts tell you where it put psycopg2? If you can locate it, just move it to the site-packages directory and you should be fine.

Simon
  • 10,182
  • 4
  • 30
  • 38
  • The psycopg2 is found here: /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/psycopg2-2.0.12-py2.6.egg-info What do would you suggest that I do? – wenbert Sep 05 '09 at 12:10
  • 11 years later... I'm still waiting for an answer. – NoName May 28 '20 at 19:51
3

I had this issue recently after updating homebrew on OSX. psycopg2 was already listed in my virtualenv. I just reinstalled psycopg2 and it worked again:

pip install --force-reinstall psycopg2

Stephen Kennedy
  • 16,598
  • 21
  • 82
  • 98
lukeaus
  • 8,268
  • 5
  • 40
  • 59
2

For me, psycopg2 was indeed installed, but not into the virtualenv in which Django was running. These two steps fixed it:

sudo apt-get build-dep python-psycopg2
sudo /opt/myenv/bin/pip install psycopg2
aliteralmind
  • 18,274
  • 16
  • 66
  • 102
1

Yes Tim's answer works for me too.It works without prefix 'django.db.backends.' also. But remember to create database or schema you mentioned in settings.py:

DATABASE_NAME = 'your_db_name' 

manually using your database client so when you run 'python manage.py syncdb' you don't get the same problem. I was stuck because i didn't create it manually. I got the same problem may be because I used buildout.

bstpierre
  • 26,946
  • 14
  • 63
  • 100
Harshith J.V.
  • 757
  • 5
  • 18
1

I got the same error, but it was because I was using python26 ./manage.py runserver when my virtualenv only had python and python2.6 executables (thus the system python26 was being used, which didn't have psycopg2 installed

Craig Blaszczyk
  • 933
  • 1
  • 7
  • 20
0

I'm on Windows and had installed psycopg2, but the 64 bit version. So my fix was to download the 32 bit one from here then in PowerShell with my virtual environment activated, my fix was:

pip uninstall psycopg2
easy_install C:\WHEREVER_I_DOWNLOADED_IT\psycopg2-2.6.1.win32-py3.4-pg9.4.4-release.exe

(The Windows Python 3.4 installer automatically installs easy_install and pip, and pip is the easiest way to remove the package, even if originally installed using easy_install.)

Chris
  • 3,738
  • 2
  • 32
  • 42
0

THIS HAS HELPED ME:

I just added PostgreSQL bin path to ENV and it was able to fine the needed dll: C:\Program Files (x86)\PostgreSQL\9.4\bin

https://groups.google.com/forum/#!topic/robotframework-users/qLq9KvHe1wE

Marcin Rapacz
  • 566
  • 6
  • 12
0

Tim's answer worked for me too. By default, settings.py shows options like 'postgresql_psycopg2', 'mysql', etc, without a package name. Prefixing with 'django.db.backends.' worked for me (for postgresql_psycopg2, at least).

Reece
  • 5,831
  • 4
  • 24
  • 42
0

same here, but maybe it was missed in current project, so I navigated to the main project directory and installed it.

pip install psycopg2

and it worked

Nurhun
  • 89
  • 8
0

You can get this error in heroku deployment with django postgresql as backend simply add psycopg2 to your requirements.txt file

0

This error also occurs when you forgot to activate your virtual environment.

Tom
  • 596
  • 3
  • 19