Django,mod_wsgi,psycopg2 配置不当:加载 psycopg2 模块时出错:没有名为 _psycopg 的模块

Posted

技术标签:

【中文标题】Django,mod_wsgi,psycopg2 配置不当:加载 psycopg2 模块时出错:没有名为 _psycopg 的模块【英文标题】:Django, mod_wsgi, psycopg2 ImproperlyConfigured: Error loading psycopg2 module: No module named _psycopg 【发布时间】:2014-02-05 04:34:50 【问题描述】:

我在 CentOS 6.4 服务器上使用 mod_wsgi 在 Apache 下运行 Django 1.5、Python 2.7 站点。

我已经使用 Django 1.6 和 Python 3.3 重建了这个站点。将其部署到同一台服务器并更改 httpd.conf 中的路径我得到主题错误。这个新安装使用 ./manage.py runserver 按预期工作。

这是来自 httpd.conf 的两个 WSGI 定义:

WSGIScriptAlias / /home/ccdgen/CCDGEN2/apache/wsgi.py
WSGIPythonPath         /home/ccdgen/CCDGEN2/ccdgen/ccdgen:/home/ccdgen/CCDGEN2/ccdgen:/home/ccdgen/CCDGEN2/lib/python3.3/site-packages
<Directory /home/ccdgen/CCDGEN2/ccdgen>
   <Files wsgi.py>
     Order allow,deny
     Allow from all
   </Files>
</Directory>

#WSGIScriptAlias /ccdgen /home/ccdgen/CCDGEN/apache/wsgi.py
#WSGIPythonPath /home/ccdgen/CCDGEN/mlhim/ccdgen:/home/ccdgen/CCDGEN/mlhim:/home/ccdgen/CCDGEN/lib/python2.7/site-packages
#<Directory /home/ccdgen/CCDGEN/mlhim>
#   <Files wsgi.py>
#     Order allow,deny
#     Allow from all
#   </Files>
#</Directory>

wsgi.py 文件在两个安装中是相同的:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mlhim.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

有什么想法吗?明显的疏忽?谢谢

【问题讨论】:

Sudo apt-get install python-psycopg2 或任何安装包的centos版本... 谢谢,但显然我已经安装了它。它适用于以前的站点以及我运行 Django 开发服务器时。 这个similar question还有更多的解决方案。 【参考方案1】:

试试这些命令 Debian、Ubuntu

sudo apt-get install python-dev
sudo apt-get install libpq-dev

适用于 RedHat Enterprise、Fedora、CentOS

sudo yum install python-devel
sudo yum install postgresql-libs

然后安装 psycopg2

pip install psycopg2

【讨论】:

同上;它已经安装好了。 Django 开发服务器工作。此外,运行 ./manage.py shell 然后 import psycopg2 可以工作。以及:从 psycopg2 导入 _psycopg 你是否使用 python virtualenv 来双向运行? 是的,以前的站点在 python 2.7 virtualenv 下运行,而新站点安装在 python 3.3 virtualenv 下。 你可以试试这个:yum install python33-python-psycopg2 and 'ENGINE': 'django.db.backends.postgresql_psycopg2',可能是这个工作 在尝试摆脱依赖地狱之后,我陷入了困境。错误:包:python33-python-3.3.2-7.el6.x86_64 (/python33-python-3.3.2-7.el6.x86_64) 要求:python33-python-libs(x86-64) = 3.3.2- 7.el6 和错误:包:python33-python-libs-3.3.2-7.el6.x86_64 (/python33-python-libs-3.3.2-7.el6.x86_64) 要求:python33-python(abi) = 3.3其中python33-python(abi)由python33-python-3.3.2-7.el6.x86_64.rpm提供【参考方案2】:

问题是 mod_wsgi 是为 Python 2.7 编译的,需要为 Python 3.3 重新编译。我没有在任何地方找到一个新的 mod_wsgi 作为一个包可用,所以我重新编译了它。

由于 Python 3 是 CentOS 6.4 上的替代安装,因此即使通过 --with-python 选项,configure 也很难生成好的 M​​akefile。从 python3.3-config --cflags 以及 --ldflags 选项获取信息后,我需要稍微编辑 Makefile。

HTH 未来的某个人。

【讨论】:

你能解释一下你到底做了什么吗? 那是一年多以前的事了,所以我不记得一步一步的过程了。但是您需要在 CentOS 上重新编译 Python 并阅读 cflags 和 ldflags,因为需要编辑 Makefile。我最终将需要 CentOS/RHE 的数据库移到了云端,并为我的 Django 应用程序返回到 Ubuntu Server。 IMO,在 CentOS 上开发和使用现代 Python 是不行的。【参考方案3】:

如前所述,mod_wsgi 尚未为 python 3 编译。一种选择是使用Software Collections 和/或使用 nginx,以及“pip install uwsgi”,这可以节省大量编译和运行自定义包。

【讨论】:

【参考方案4】:

我最近遇到了这个问题:

ImproperlyConfigured: Error loading psycopg2 module: No module named _psycopg

...这个命令就是答案:

sudo apt-get install libapache2-mod-wsgi-py3

参考:

http://python.6.x6.nabble.com/ImproperlyConfigured-Error-loading-psycopg2-module-No-module-named-psycopg-td5044145.html

【讨论】:

以上是关于Django,mod_wsgi,psycopg2 配置不当:加载 psycopg2 模块时出错:没有名为 _psycopg 的模块的主要内容,如果未能解决你的问题,请参考以下文章

Django ORM 和 PostgreSQL 连接限制

使用 mod_wsgi 和 django 运行 Apache

Django + Psycopg2:InterfaceError:仅支持协议 3

将 Django 部署到 Heroku(Psycopg2 错误)

Django 和 mod_wsgi python 版本?

Django 'pip install django-heroku'(psycopg2) 错误阻止部署到 Heroku