python - Django 部署 : configuring correct python to be used by apache/mod_wsgi

标签 python django apache mod-wsgi django-wsgi

我不熟悉基于 Django 的应用程序,并尝试使用以下配置部署 Django 项目,这些配置几乎与 Django 文档中给出的默认设置类似。

apache2.conf

# WSGI Configuration
WSGIDaemonProcess demo python-path=/home/inian/Documents/demo
WSGIProcessGroup demo

WSGIScriptAlias / /home/inian/Documents/demo/demo/wsgi.py process-group=demo

<Directory /home/inian/Documents/demo/demo>
<Files wsgi.py>
    Require all granted
</Files>
</Directory>

# Serving static files
Alias /static/ /home/inian/Documents/demo/static/

<Directory /home/inian/Documents/demo/static>
    Require all granted
</Directory>

当我启动 apache 服务器时,它正常启动,但由于 python 版本不匹配而在加载我的项目时出现运行时错误,如下所示。

/var/log/apache2/error.log

[Sun Apr 10 20:38:16.165536 2016] [wsgi:warn] [pid 22959] mod_wsgi: Compiled for Python/2.7.11.
[Sun Apr 10 20:38:16.165551 2016] [wsgi:warn] [pid 22959] mod_wsgi: Runtime using Python/2.7.10.
[Sun Apr 10 20:38:16.166787 2016] [mpm_prefork:notice] [pid 22959] AH00163: Apache/2.4.7 (Ubuntu) OpenSSL/1.0.1f mod_wsgi/4.5.1 Python/2.7.10 configured -- resuming normal operations

我希望我的应用程序使用安装在 /usr/local 位置的 python,版本是 2.7.11,这是我用来编译和安装的版本 mod_wsgi,但是为了安全起见,我还检查了 /usr/bin/python -V,它给出的输出为 Python 2.7.6。这带来了两个问题:

  1. 我如何从安装位置/usr/local/bin/python 指向 apache 使用 Python 2.7.11(我一直将其用作服务器上所有内容的默认值).

  2. 我不记得曾经安装过 2.7.10 或对它做过任何事情,所以我不知道 apache 是如何以及从哪里加载和使用它的。如果有人能指导我实现这一点,那就太好了。

最佳答案

在针对特定 Python 安装编译 mod_wsgi 然后升级 Python 安装的情况下,这是一条警告消息。由于共享库的工作方式,它通常无关紧要。这记录在:

在你的情况下,虽然问题是你的 mod_wsgi 没有针对 Python 的安装进行编译,但它正在运行时找到 Python 共享库。这可能会导致各种问题,其中一个是两个 Python 安装没有安装兼容的编译器标志集,例如 Unicode 字符宽度的编译器标志。

所以在我看来基本上问题就像你从源代码编译 mod_wsgi 针对/usr/local 中的 Python 安装,但是因为它的构建方式对于那个场景不正确,所以在运行时它发现 Python shared安装到/usr 中的版本的库。

有关如何在 Linux 系统上正确安装 Python 的大讨论,请阅读:

接下来,当您从源代码编译 mod_wsgi 时,请确保设置 LD_RUN_PATH 环境变量以包含安装备用 Python 安装的 Python 共享库的库目录。该环境变量将允许 mod_wsgi 在运行时找到正确的库,而不使用/usr/lib 中的版本。

您可以按照以下文档中的说明验证它是否找到了错误/正确的:

最后,一旦您安装了 mod_wsgi 并找到了正确的共享库,您可能还必须在 Apache 配置中设置 WSGIPythonHome 指令,以便它为运行时文件找到正确的 Python 安装。文档中对此进行了描述:

关于python - Django 部署 : configuring correct python to be used by apache/mod_wsgi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36529986/

相关文章:

django - 在 Django 中进行单元测试时如何跳过一段代码?

json - 如何根据http-header内容类型进行mod_rewrite

PHP 代码突然出现在我的网页中而不是执行 - 以前不是这样做过吗?

css - 让 Apache Web 服务器加载新的图像和 CSS

python - 变量未在 exec ('variable = value' 后定义)

python - 带有日期用户输入的 Python 中的 Oracle SQL 查询

python - 没有名为 "file1.py"的模块; test1 不是一个包

python - 在Python中,对于POST请求,是否可以从POST请求对象中获取该请求所使用的ip地址?

javascript - 如何在没有 Node Js bundler 的情况下通过 CDN 在 Django 中使用 Vue 3?

Django 和 Linux,端口转发