Django, mod_wsgi, psycopg2 出现配置错误:无法加载 psycopg2 模块,没有名为 _psycopg 的模块。

9

我有一个在CentOS 6.4服务器上运行的Django 1.5和Python 2.7网站,使用Apache和mod_wsgi。

我已经使用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 版本的安装包命令... - Odif Yltsaeb
1
谢谢,但显然我已经安装了它。它可以与之前的网站一起工作,也可以在运行Django开发服务器时使用。 - Tim Cook
在这个类似的问题上有更多的解决方案。 - Don Kirkby
4个回答

11

4
问题在于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进行一些编辑。
希望这能对将来有所帮助。

1
请问您能否解释一下您具体做了什么? - Ghasem
已经过去一年多了,所以我不记得具体步骤。但是你需要在CentOS上重新编译Python,并阅读有关cflags和ldflags的内容,因为需要编辑Makefile。最终,我将需要CentOS/RHE的数据库移至云端,并回到Ubuntu服务器上运行我的Django应用程序。在我看来,在CentOS上开发和使用现代Python是不可行的。 - Tim Cook

3

在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

1
以上问题已经解决,Django开发服务器可以正常运行。同时,在运行./manage.py shell之后,导入psycopg2是有效的,也可以使用以下方式进行导入:from psycopg2 import _psycopg。 - Tim Cook
你是否在运行时使用Python虚拟环境? - Yogesh dwivedi Geitpl
是的,之前的网站是在Python 2.7虚拟环境下运行的,而新网站则安装在Python 3.3虚拟环境下。 - Tim Cook
你能试一下这个: yum install python33-python-psycopg2 和 'ENGINE': 'django.db.backends.postgresql_psycopg2',可能会起作用。 - Yogesh dwivedi Geitpl
尝试摆脱依赖地狱后,我陷入了一个循环。错误:软件包: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提供。 - Tim Cook
重新编译mod_wsgi,使用python3.3-config --cflags中的标志编辑Makefile,然后再使用--ldflags。这至少将问题更改为URL配置问题。所以我还不能称其为已解决。 - Tim Cook

0

正如所提到的,mod_wsgi并未为Python 3编译。其中一个选择是使用软件集合和/或选择nginx,并且“pip install uwsgi”可以节省大量编译和运行自定义包。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接