Django/Python Beginner: ошибка при выполнении python manage.py syncdb — psycopg2 не найден

У меня установлены Pythong2.6, psycopg2 и pgAdmin3 с использованием Macports. Мои настройки.py:

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.

Ошибка, которую я получаю при запуске python manage.py syncdb:

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

Обратите внимание, я полный новичок в этом деле. Я изначально PHP-парень и пробую Python для небольшого личного проекта. Нужно ли мне «включать» Postgres?

Кроме того, когда я запускаю sudo python manage.py runserver 8080, я получаю эту ошибку:

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

Пожалуйста, помогите мне. Любой ответ будет оценен.

Спасибо,

Венберт!


person wenbert    schedule 05.09.2009    source источник


Ответы (16)


Кажется, проблема с вашей установкой psycopg2 — Python не находит ее. Это проблема установки Python, а не проблема Django.

Вы можете попробовать загрузить его вручную с помощью интерпретатора Python и посмотреть, работает ли он:

$ python
>>> import psycopg2

Если вы получаете исключение ImportError, ваша установка ошибочна. Чтобы получить список всех каталогов, в которых Python ищет модули, используйте sys.path:

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

Вы также можете добавить пользовательские каталоги в путь поиска модулей Python, изменив переменную sys.path. Сделайте это где-нибудь перед соответствующими операторами import:

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

# ...
import psycopg2
person Ferdinand Beyer    schedule 05.09.2009
comment
Что мне сделать, чтобы python смотрел по этому пути /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages вместо /Library/Frameworks/Python.framework/Versions/ 2.6/lib/python2.6/сайт-пакеты - person wenbert; 05.09.2009
comment
Вы можете изменить sys.path, чтобы добавить свои собственные каталоги поиска. Для django вы должны сделать это в файле settings.py. Смотрите мой обновленный пост для деталей. - person Ferdinand Beyer; 05.09.2009
comment
Ничего, если я создам символическую ссылку на путь Python, созданный Macports? По сути, у меня есть что-то вроде этого: Python.framework -> /opt/local/Library/Frameworks/Python.framework - person wenbert; 05.09.2009
comment
Я не думаю, что это хорошая идея перенаправить весь Python.framework, поскольку части Mac OS X могут полагаться на него (плюс, любое обновление программного обеспечения может отменить это или, что еще хуже, запутаться и установить что-то еще). Возможно, вы захотите попробовать создать символические ссылки на фактические пакеты внутри каталога site-packages. - person Simon; 05.09.2009
comment
Спасибо за это. Я создам символическую ссылку на фактические пакеты, созданные Macports. - person wenbert; 07.09.2009

Если у вас установлено pip, просто установите отсутствующее расширение, запустив:

$ pip install psycopg2
person erator    schedule 01.05.2012
comment
У меня возникла дополнительная проблема: stackoverflow.com/questions/11618898 / - person Gavin Palmer; 17.07.2016
comment
После установки psycopg2 через менеджер pkg вы должны запустить команду pip - person JARC; 17.08.2016
comment
pip install psycopg2-binary — это тот, который сработал. - person Paul Kenjora; 12.04.2019

Для записи я получил ту же ошибку по другой причине:

я поставил

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

вместо

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

in settings.py

person Tim Abell    schedule 28.02.2011
comment
Хммм, нет упоминания об этом движке в документах по движку db - person stephen; 06.08.2018

Следуйте шагам:

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

источник: http://initd.org/psycopg/install/

person tremendows    schedule 29.02.2012

Я понял, что у меня не установлен psycopg2

aptitude install python-psycopg2

Работал как шарм

person Eliel    schedule 15.08.2012

Хотя вы его установили, Python, видимо, не может найти модуль psycopg2. Обычно это происходит из-за того, что модуль не находится в пути Python. Посмотрите, сможете ли вы найти папку с именем psycopg2 в /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages. Если его там нет, MacPorts сказал вам, куда он поместил psycopg2? Если вы можете найти его, просто переместите его в каталог site-packages, и все будет в порядке.

person Simon    schedule 05.09.2009
comment
psycopg2 находится здесь: /opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/psycopg2-2.0.12-py2.6.egg-info Что бы вы сделали? предложить мне сделать? - person wenbert; 05.09.2009
comment
11 лет спустя... Я все еще жду ответа. - person NoName; 28.05.2020

У меня была эта проблема недавно после обновления доморощенного на OSX. psycopg2 уже был указан в моем файле virtualenv. Я только что переустановил psycopg2, и он снова заработал:

pip install --force-reinstall psycopg2

person lukeaus    schedule 12.08.2015

Для меня psycopg2 действительно был установлен, но не в виртуальную среду, в которой работал Django. Эти два шага исправили это:

sudo apt-get build-dep python-psycopg2
sudo /opt/myenv/bin/pip install psycopg2
person aliteralmind    schedule 20.12.2014

Да, ответ Тима работает и для меня. Он работает без префикса «django.db.backends». также. Но не забудьте создать базу данных или схему, которую вы упомянули в settings.py:

DATABASE_NAME = 'your_db_name' 

вручную с помощью клиента базы данных, поэтому при запуске 'python manage.py syncdb' у вас не возникает той же проблемы. Я застрял, потому что я не создал его вручную. У меня такая же проблема может быть из-за того, что я использовал buildout.

person Harshith J.V.    schedule 21.06.2011

Я получил ту же ошибку, но это было потому, что я использовал python26 ./manage.py runserver, когда у моего virtualenv были только исполняемые файлы python и python2.6 (таким образом, использовалась система python26, в которой не было установлено psycopg2

person Craig Blaszczyk    schedule 11.07.2011

Ответ Тима сработал и для меня. По умолчанию settings.py показывает такие параметры, как «postgresql_psycopg2», «mysql» и т. д., без имени пакета. Префикс с «django.db.backends». у меня сработало (по крайней мере, для postgresql_psycopg2).

person Reece    schedule 02.03.2011

Я на Windows и установил psycopg2, но 64-битную версию. Поэтому я решил загрузить 32-разрядную версию с здесь, а затем в PowerShell с моя виртуальная среда активирована, мое исправление было:

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

(Установщик Windows Python 3.4 автоматически устанавливает easy_install и pip, а pip — это самый простой способ удалить пакет, даже если изначально он был установлен с помощью easy_install.)

person Chris    schedule 07.09.2015

ЭТО МНЕ ПОМОГЛО:

Я просто добавил путь к bin-файлу PostgreSQL в ENV, и он смог указать необходимую dll: C:\Program Files (x86)\PostgreSQL\9.4\bin

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

person Marcin Rapacz    schedule 16.09.2015

то же самое здесь, но, возможно, это было пропущено в текущем проекте, поэтому я перешел в основной каталог проекта и установил его.

pip install psycopg2

и это сработало

person Nurhun    schedule 16.03.2019

Вы можете получить эту ошибку при развертывании heroku с помощью django postgresql, поскольку бэкэнд просто добавляет psycopg2 в ваш файл requirements.txt.

person Adärshrëddÿ Adëllï    schedule 10.05.2019

Эта ошибка также возникает, когда вы забыли активировать виртуальную среду.

person Tom    schedule 09.09.2019