在 virtualenv 中使用 Psycopg2(Ubuntu 14.4,Python 3.4)

Using Psycopg2 in virtualenv (Ubuntu 14.4, Python 3.4)

我在 linux 上使用 apt-get 安装了 postgresPsycopg2

我想将 postgres 用于我的 django 项目之一。

我已经创建了 virtualenv,但是当我将它添加到 db settings 时我无法使用 psycopg2。

这里是setting.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'secondnginxapp',
        'USER': 'myprojectuser',
        'PASSWORD': 'postgres',
        'HOST': '127.0.0.1',
        'PORT': '',
    }
}

我 运行 服务器收到错误 Error loading psycopg2 module: No module named 'psycopg2'

我使用以下命令检查已安装 psycopg2

 python -c "import psycopg2; print(psycopg2.__version__)"

输出:2.4.5 (dt dec mx pq3 ext)

如何在 virtualenv 中使用 psycopg2?需要帮助。

(我正在学习 python 和 django)

我也尝试在 virtualenv 中安装。

pip install psycopg2 那么错误就是 Error: b'You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application.\n'

然后我尝试 pip install libpq-dev 现在错误是 No matching distribution found for libpq-dev

这里的问题是你用apt-get安装驱动,已经安装在你系统python的包目录下;默认情况下,虚拟环境是在没有系统包的情况下创建的。

因此,即使您在虚拟环境之外(使用系统 Python),该命令也能正常工作,但在虚拟环境中却不起作用。

您有两种选择来解决此问题:

  1. 删除在虚拟环境的 Python 安装中找到的文件 no-global-site-packages.txt

    因此,如果您在 /home/env/my-env/ 创建了一个虚拟环境,那么您将执行 rm /home/env/my-env/lib/python3.4/no-global-site-packages.txt

    删除该文件后,虚拟环境将在全局环境中查找任何丢失的包。

  2. 安装允许您构建扩展的系统库。对于 ubuntu,这是 sudo apt install build-essential python-dev python3.4-dev libpq-dev。一旦你运行那个命令,你就可以在你的虚拟环境中pip install psycopg2

解决办法是安装服务器版的postgresql(好像你只安装了客户端)。在 Ubuntu:

sudo apt-get install postgresql-server-dev-X.Y

其中 X.Y 是包的版本。

然后,在virtualenv环境中安装psycopg2模块:

pip install psycopg2

这应该有效。