python - 使用与系统默认版本不同的 virtualenv 或 Python 运行 mod_wsgi

标签 python apache flask mod-wsgi

我正在尝试让我的 Flask 应用程序在 CentOS 服务器上运行。基本上,问题是我在系统默认的 /usr/bin 中安装了 Python 2.6,在 /usr/local/bin 中安装了 Python 3.4。我想为 mod_wsgi 使用 Python 3.4 virtualenv 或至少 Python 3.4 解释器来运行我的应用程序。

我已经在 ~/virtualenvs/flask 中创建了 virtualenv。

我有这个 WSGI 脚本:

import os
import sys
from logging import Formatter, FileHandler

APP_HOME = r"/home/fenikso/Album"


activate_this = os.path.join("/home/fenikso/virtualenvs/flask/bin/activate_this.py")
execfile(activate_this, dict(__file__=activate_this))

sys.path.insert(0, APP_HOME)
os.chdir(APP_HOME)

from app import app

handler = FileHandler("app.log")
handler.setFormatter(Formatter("[%(asctime)s | %(levelname)s] %(message)s"))
app.logger.addHandler(handler)
application = app

Apache 中的以下配置:

<VirtualHost *:80>
        ServerName album2.site.cz
        Alias /static "/home/fenikso/Album/static"
        Alias /photos "/home/fenikso/Album/photos"
        Alias /thumbs "/home/fenikso/Album/thumbs"
        WSGIScriptAlias / "/home/fenikso/Album/wsgi.py"
        <Directory "/home/fenikso/Album">
            AllowOverride None
            Allow from all
        </Directory>
        <Directory "/home/fenikso/Album/static">
            AllowOverride None
            Allow from all
        </Directory>
        <Directory "/home/fenikso/Album/photos">
            AllowOverride None
            Allow from all
        </Directory>
        <Directory "/home/fenikso/Album/thumbs">
            AllowOverride None
            Allow from all
        </Directory>
</VirtualHost>

但是,当尝试运行该应用程序时,出现错误:

Apache/2.2.15 (Unix) DAV/2 mod_wsgi/3.2 Python/2.6.6 mod_fcgid/2.3.7 PHP/5.3.3 mod_ssl/2.2.15 OpenSSL/1.0.1e-fips SVN/1.6.11 mod_perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations
mod_wsgi (pid=14627): Target WSGI script '/home/fenikso/Album/wsgi.py' cannot be loaded as Python module.
mod_wsgi (pid=14627): Exception occurred processing WSGI script '/home/fenikso/Album/wsgi.py'.
Traceback (most recent call last):
   File "/home/fenikso/Album/wsgi.py", line 15, in <module>
     from app import app
   File "/home/fenikso/Album/app.py", line 1, in <module>
     from flask import Flask
 ImportError: No module named flask

我注意到正在运行 Python 2.6 而我的 virtualenv 没有激活。使它正常工作并仍然将 Python 2.6 作为系统默认值的正确方法是什么?

最佳答案

您必须在 apache.conf 中添加以下行,以便提供正确的可执行文件和 virtualenv 的路径。

WSGIPythonHome /usr/local/bin
WSGIPythonPath /home/fenikso/virtualenv/lib/python3.4/site-packages

你会发现这两个命令的所有选项 in the mod_wsgi documentation

请注意,您的 mod_wsgi 版本必须与 python 可执行文件兼容。在您的情况下,您可能必须安装 mod_wsgi3.4 并配置 apache 以使用它而不是标准的 mod_wsgi 模块。

整个配置文件应该是:

WSGIPythonHome "/usr/local/bin"
WSGIPythonPath "/home/fenikso/virtualenv/lib/python3.4/site-packages"

<VirtualHost *:80>
        ServerName album2.site.cz
        Alias /static "/home/fenikso/Album/static"
        Alias /photos "/home/fenikso/Album/photos"
        Alias /thumbs "/home/fenikso/Album/thumbs"
        WSGIScriptAlias / "/home/fenikso/Album/wsgi.py"
        <Directory "/home/fenikso/Album">
            AllowOverride None
            Allow from all
        </Directory>
        <Directory "/home/fenikso/Album/static">
            AllowOverride None
            Allow from all
        </Directory>
        <Directory "/home/fenikso/Album/photos">
            AllowOverride None
            Allow from all
        </Directory>
        <Directory "/home/fenikso/Album/thumbs">
            AllowOverride None
            Allow from all
        </Directory>
</VirtualHost>

关于python - 使用与系统默认版本不同的 virtualenv 或 Python 运行 mod_wsgi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27450998/

相关文章:

python - 如何将 QTableWidget 中的数据绘制到 QChart 中

apache - 安装Pig包

python - 我如何在我的网络服务器上运行这个 python 脚本? TorBulkExitList.py

flask - Flask 迁移如何跟踪哪个修订 ID 是最新的?

python - 在 Python 中使用正则表达式获得和平的数字

python - 使用 Openpyxl 保存启用宏的 Excel 工作簿 (.xlsm) 时出现问题。 Excel 引发错误并开始修复工作簿

python - 比较 Python 中的两个日期对象 : TypeError: '<' not supported between instances of 'datetime.date' and 'method'

带有负载平衡器的 apache2 忽略服务器

python - 重启 Wsgi 服务器时重启 ApScheduler Python 中的作业

python - 我如何在 flask 中检查用户填写的表单字段