python - 为什么我用sqlite的时候django需要psycopg2?

标签 python django postgresql sqlite mod-wsgi

标题说明了一切。这听起来像是一个非常奇怪/不可能的错误,但我已经花了几个小时仍然感到困惑。

我的设置:

  • python 3.4
  • Django 1.9.5
  • Apache 2.4.10

在我决定将站点部署到生产环境之前,一切都运行得很顺利。尽管我正在为我的 DATABASE 使用 Debug = True'ENGINE': 'django.db.backends.sqlite3',但 Django 一直在搜索出于未知原因的 psycopg2(来自 Apache 日志的片段):

[Thu Jun 02 16:25:07.560383 2016] [wsgi:error]  mod_wsgi (pid=1300): Exception occurred processing WSGI script '/archroot/archaeologyapp/archaeologyapp/wsgi.py'.
[Thu Jun 02 16:25:07.560483 2016] [wsgi:error]  Traceback (most recent call last):
[Thu Jun 02 16:25:07.561037 2016] [wsgi:error]    File "/archroot/archvenv/lib/python3.4/site-packages/django/db/backends/postgresql/base.py", line 20, in <module>
[Thu Jun 02 16:25:07.561060 2016] [wsgi:error]      import psycopg2 as Database
[Thu Jun 02 16:25:07.561101 2016] [wsgi:error]  ImportError: No module named 'psycopg2'
[Thu Jun 02 16:25:07.561128 2016] [wsgi:error]  
[Thu Jun 02 16:25:07.561139 2016] [wsgi:error]  During handling of the above exception, another exception occurred:
[Thu Jun 02 16:25:07.561146 2016] [wsgi:error]  
[Thu Jun 02 16:25:07.561164 2016] [wsgi:error]  Traceback (most recent call last):
[Thu Jun 02 16:25:07.561364 2016] [wsgi:error]    File "/archroot/archaeologyapp/archaeologyapp/wsgi.py", line 16, in <module>
[Thu Jun 02 16:25:07.561385 2016] [wsgi:error]      application = get_wsgi_application()
[Thu Jun 02 16:25:07.561575 2016] [wsgi:error]    File "/archroot/archvenv/lib/python3.4/site-packages/django/core/wsgi.py", line 13, in get_wsgi_application
[Thu Jun 02 16:25:07.561596 2016] [wsgi:error]      django.setup()
[Thu Jun 02 16:25:07.561825 2016] [wsgi:error]    File "/archroot/archvenv/lib/python3.4/site-packages/django/__init__.py", line 18, in setup
[Thu Jun 02 16:25:07.561847 2016] [wsgi:error]      apps.populate(settings.INSTALLED_APPS)
[Thu Jun 02 16:25:07.562179 2016] [wsgi:error]    File "/archroot/archvenv/lib/python3.4/site-packages/django/apps/registry.py", line 108, in populate
[Thu Jun 02 16:25:07.562199 2016] [wsgi:error]      app_config.import_models(all_models)
[Thu Jun 02 16:25:07.562466 2016] [wsgi:error]    File "/archroot/archvenv/lib/python3.4/site-packages/django/apps/config.py", line 202, in import_models
[Thu Jun 02 16:25:07.562487 2016] [wsgi:error]      self.models_module = import_module(models_module_name)
[Thu Jun 02 16:25:07.562737 2016] [wsgi:error]    File "/usr/lib/python3.4/importlib/__init__.py", line 109, in import_module
[Thu Jun 02 16:25:07.562802 2016] [wsgi:error]      return _bootstrap._gcd_import(name[level:], package, level)
[Thu Jun 02 16:25:07.562847 2016] [wsgi:error]    File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
[Thu Jun 02 16:25:07.562880 2016] [wsgi:error]    File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
[Thu Jun 02 16:25:07.562910 2016] [wsgi:error]    File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
[Thu Jun 02 16:25:07.562939 2016] [wsgi:error]    File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
[Thu Jun 02 16:25:07.562968 2016] [wsgi:error]    File "<frozen importlib._bootstrap>", line 1129, in _exec
[Thu Jun 02 16:25:07.562997 2016] [wsgi:error]    File "<frozen importlib._bootstrap>", line 1471, in exec_module
[Thu Jun 02 16:25:07.563025 2016] [wsgi:error]    File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
[Thu Jun 02 16:25:07.563222 2016] [wsgi:error]    File "/archroot/archaeologyapp/archapp/models.py", line 4, in <module>
[Thu Jun 02 16:25:07.563242 2016] [wsgi:error]      from django.contrib.auth.models import User
[Thu Jun 02 16:25:07.563582 2016] [wsgi:error]    File "/archroot/archvenv/lib/python3.4/site-packages/django/contrib/auth/models.py", line 4, in <module>
[Thu Jun 02 16:25:07.563603 2016] [wsgi:error]      from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
[Thu Jun 02 16:25:07.563884 2016] [wsgi:error]    File "/archroot/archvenv/lib/python3.4/site-packages/django/contrib/auth/base_user.py", line 49, in <module>
[Thu Jun 02 16:25:07.563906 2016] [wsgi:error]      class AbstractBaseUser(models.Model):
[Thu Jun 02 16:25:07.564829 2016] [wsgi:error]    File "/archroot/archvenv/lib/python3.4/site-packages/django/db/models/base.py", line 108, in __new__
[Thu Jun 02 16:25:07.564854 2016] [wsgi:error]      new_class.add_to_class('_meta', Options(meta, app_label))
[Thu Jun 02 16:25:07.564916 2016] [wsgi:error]    File "/archroot/archvenv/lib/python3.4/site-packages/django/db/models/base.py", line 307, in add_to_class
[Thu Jun 02 16:25:07.564933 2016] [wsgi:error]      value.contribute_to_class(cls, name)
[Thu Jun 02 16:25:07.565448 2016] [wsgi:error]    File "/archroot/archvenv/lib/python3.4/site-packages/django/db/models/options.py", line 263, in contribute_to_class
[Thu Jun 02 16:25:07.565469 2016] [wsgi:error]      self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
[Thu Jun 02 16:25:07.565676 2016] [wsgi:error]    File "/archroot/archvenv/lib/python3.4/site-packages/django/db/__init__.py", line 36, in __getattr__
[Thu Jun 02 16:25:07.565696 2016] [wsgi:error]      return getattr(connections[DEFAULT_DB_ALIAS], item)
[Thu Jun 02 16:25:07.566036 2016] [wsgi:error]    File "/archroot/archvenv/lib/python3.4/site-packages/django/db/utils.py", line 212, in __getitem__
[Thu Jun 02 16:25:07.566069 2016] [wsgi:error]      backend = load_backend(db['ENGINE'])
[Thu Jun 02 16:25:07.566128 2016] [wsgi:error]    File "/archroot/archvenv/lib/python3.4/site-packages/django/db/utils.py", line 116, in load_backend
[Thu Jun 02 16:25:07.566144 2016] [wsgi:error]      return import_module('%s.base' % backend_name)
[Thu Jun 02 16:25:07.566198 2016] [wsgi:error]    File "/usr/lib/python3.4/importlib/__init__.py", line 109, in import_module
[Thu Jun 02 16:25:07.566214 2016] [wsgi:error]      return _bootstrap._gcd_import(name[level:], package, level)
[Thu Jun 02 16:25:07.566265 2016] [wsgi:error]    File "/archroot/archvenv/lib/python3.4/site-packages/django/db/backends/postgresql/base.py", line 24, in <module>
[Thu Jun 02 16:25:07.566280 2016] [wsgi:error]      raise ImproperlyConfigured("Error loading psycopg2 module: %s" % e)
[Thu Jun 02 16:25:07.566324 2016] [wsgi:error] django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named 'psycopg2'

settings.py 在这里:https://github.com/biletboh/archaeologyapp/blob/master/archaeologyapp/settings.py

更多的是,当我同意 Django 然后安装 psycopg2-2.6.1 时,postgres 的所有操作都失败了 conn = _connect(dsn,connection_factory=connection_factory,异步=异步) django.db.utils.OperationalError: fe_sendauth: 没有提供密码

删除 virtualenv、源代码、从 git 重新克隆(以确保它不是由 __pycache__ 引起的)并多次重启 apache 和机器都没有帮助。对此有什么想法吗?

UPDATE 实际 DEBUG 值:

(archvenv)user@archapp:/archroot/archaeologyapp$ ./manage.py shell
Python 3.4.2 (default, Oct  8 2014, 10:45:20) 
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.conf import settings
>>> settings.DEBUG
True

>>> settings.DATABASES['default']
{'USER': '', 'OPTIONS': {}, 'TIME_ZONE': None, 'PORT': '', 'ENGINE': 'django.db.backends.sqlite3', 'HOST': '', 'PASSWORD': '', 'AUTOCOMMIT': True, 'ATOMIC_REQUESTS': False, 'NAME': '/var/www/archroot/archaeologyapp/db.sqlite3', 'CONN_MAX_AGE': 0, 'TEST': {'MIRROR': None, 'NAME': None, 'CHARSET':

pip freeze -l

Django==1.9.5
django-choices==1.4.2
django-form-utils==1.0.3
django-picklefield==0.3.2
django-widget-tweaks==1.4.1
six==1.10.0

最佳答案

事实证明,我没有为 settings.py 使用绝对路径,因此来自 ConfigParser 的回退开始发挥作用。解决者:

conf.read(os.path.join(BASE_DIR, 'settings.ini'))

谢谢大家的反馈!

关于python - 为什么我用sqlite的时候django需要psycopg2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37597735/

相关文章:

python - 如何过滤pandas数据框?

python - 如何强制中文等亚洲语言的字符长度?

python - 检测美国假期

python - 我应该如何处理从代码中使用 celeryd_multi?

python - 关于 Gmsh Python API 的问题

python - 阻止 Django imageField 上传/保存图像

python - Django 使用表达式聚合查询

python - django根据另一个查询集的计数过滤查询集

database - 使用 group by 子句计算行数

postgresql - 如何在 mac 中为 postgres.app 安装 pgrouting