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

时间:2016-06-19 06:41:36

标签: python django virtualenv psycopg2

我在我的linux上使用postgres安装了Psycopg2apt-get

我想将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

2 个答案:

答案 0 :(得分:2)

这里的问题是您使用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

答案 1 :(得分:1)

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

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

其中X.Y是包的版本。

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

pip install psycopg2

这应该有用。