Django - Apache2 - Postgresql:_psycopg 出错

Posted

技术标签:

【中文标题】Django - Apache2 - Postgresql:_psycopg 出错【英文标题】:Django - Apache2 - Postgresql: error with _psycopg 【发布时间】:2016-08-22 01:30:38 【问题描述】:

尝试在 Debian 7 上的 apache (2.2) 上部署 django 项目。 使用 Django 1.8 和带有 python3.4 的虚拟环境。

得到以下错误:

django.core.exceptions.ImproperlyConfigured:加载 psycopg2 模块时出错:没有名为 _psycop 的模块

我已经尝试了here和here指出的建议。

这是我的 apache 配置文件。

(以下行嵌套在 VirtualHost 范围内)

#WSGI configuration for ds_monitor django project

Alias /static /home/pkaramol/Applications/timeds/ds_monitor/static_root
<Directory /home/pkaramol/Applications/timeds/ds_monitor/static_root>
    Allow from all
</Directory>

<Directory /home/pkaramol/Applications/timeds/ds_monitor/ds_monitor>
    <Files wsgi.py>
        Allow from all
   </Files>
</Directory>

WSGIDaemonProcess ds_monitor python-path=/home/pkaramol/Applications/timeds/ds_monitor:/home/pkaramol/Applications/timeds/venv_p34dj18/lib/python3.4/site-packages
WSGIProcessGroup ds_monitor
WSGIScriptAlias /ds_monitor  /home/pkaramol/Applications/timeds/ds_monitor/ds_monitor/wsgi.py

这超出了 VirtualHost 范围(启用生产时虚拟环境)

WSGIPythonPath /home/pkaramol/Applications/timeds/ds_monitor:/home/pkaramol/Applications/timeds/venv_p34dj18/lib/python3.4/site-packages

另一个问题是 apache 的日志堆栈跟踪中存在以下行

 File "/usr/lib/python3.2/importlib/_bootstrap.py", line 821, in _gcd_import
    loader.load_module(name)

为什么要用系统的python 3.2?

在 wsgi confs 中正确指向 virtualenv 路径方面我做错了吗?

无论如何,psycopg2 模块也安装在系统中(不仅在 virtualenv 中)

【问题讨论】:

【参考方案1】:

看起来很奇怪,但整个问题很可能与编译 mod_wsgi 的 python 版本有关。

我已经从here 下载/配置/安装了 mod_wsgi 的 4.5.2 版本,但忘记使用适当的 python 版本进行配置。

所以我再次运行整个过程(从解压缩原始tarball开始)并配置如下:

./configure --with-python=/usr/bin/python3.5

重启apache,问题解决。

【讨论】:

以上是关于Django - Apache2 - Postgresql:_psycopg 出错的主要内容,如果未能解决你的问题,请参考以下文章

Apache2 部署 Django

anaconda + django + apache2

分析托管在 apache2 上的 django 应用程序

Apache2 上的 Django:问题 in.conf 文件?

Django - Apache2 - Postgresql:_psycopg 出错

windows10搭建django1.10.3+Apache2.4