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 也很难生成好的 Makefile。从 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 的模块的主要内容,如果未能解决你的问题,请参考以下文章
使用 mod_wsgi 和 django 运行 Apache
Django + Psycopg2:InterfaceError:仅支持协议 3