python manage.py 迁移有问题 -> 没有名为 psycopg2 的模块

trouble with python manage.py migrate -> No module named psycopg2

我在使用 postgresql 迁移 Django 时遇到了一些问题。

这是我第一次使用 Django,我只是在学习教程。

按照 Django 网站上的建议,我已经为 运行 Django 项目创建了一个 virtualenv。

接下来,我使用这些设置创建了一个 postgresql 数据库:

在 settings.py 中,我为数据库设置了这些值:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'django_tutorial',
        'USER': 'johan',
        'PASSWORD': '1234',
    }
}

使用 apt-get 安装 psycopg2 时,我收到此消息:

(venv)johan@johan-pc:~/sdp/django_tutorial/venv/django_tutorial$ sudo apt-get install python-psycopg2
Reading package lists... Done
Building dependency tree       
Reading state information... Done
python-psycopg2 is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 95 not upgraded.

据我所知,这意味着安装了 psycopg2。

当运行宁

$python manage.py migrate

我收到以下错误消息:

django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: No module named psycopg2

如果需要答案,我可以提供整个堆栈跟踪。

有人可以解释一下我可以做些什么来解决这个问题吗?我也在 Google 寻找解决方案,但没有成功。

一定是因为你在系统级别安装 psycopg2 python 安装而不是在你的 virtualenv 中。

sudo apt-get install python-psycopg2

将在您的系统级别 python 安装中安装它。

你可以通过

将它安装到你的virtualenv中
pip install psycopg2

在激活你的 virtualenv 之后,或者你可以使用 --system-site-packages 标志创建你的 virtualenv,这样你的 virtualenv 就会有你的系统级别的包 python 已经可用。

virtualenv --system-site-packages test

其中 test 是您的虚拟环境。

这是因为您在 python virtualenv 中使用 Django,并且如 virtualenv web site 所述:

It creates an environment that has its own installation directories, that doesn’t share libraries with other virtualenv environments (and optionally doesn’t access the globally installed libraries either).

这意味着您需要在您的 virtualenv 中安装 psycopg2 而不是全局安装或使其访问全局安装的库。

Psycopg 是 Python 编程语言最流行的 PostgreSQL 数据库适配器。 当我尝试 运行 使用 Postgresql 数据库迁移时,我也遇到了类似的问题。下面的步骤对我很有效。

激活您的虚拟环境并运行以下命令

pip install psycopg2-binary

现在试试运行宁python manage.py migrate