在Apache上部署Python Flask应用程序,仅在虚拟环境中安装Python版本

时间:2016-10-18 06:32:17

标签: python apache flask mod-wsgi python-3.5

我正在开发CentOS7开发环境。该机预装了Python 2.7.5。我使用Python 3.5.1开发了一个Web应用程序,它与它的依赖关系仅安装在虚拟环境中。 Python 3未在机器范围内安装。我现在正在尝试在Apache服务器上部署应用程序,但遇到了麻烦。这就是我所做的。

我使用yum安装了mod_wsgi。

我配置了虚拟主机,如下所示:

<VirtualHost *:80>
    ServerName myapp.myserver.com

    WSGIDaemonProcess myapp user=myuser group=mygroup threads=5 python-path=/var/www/myapp.myserver.com/html:/var/www/myapp.myserver.com/venv/lib:/var/www/myapp.myserver.com/venv/lib/python3.5/site-packages python-home=/var/www/myapp.myserver.com/html/venv
    WSGIScriptAlias / /var/www/myapp.myserver.com/html/myapp.wsgi
    <Directory /var/www/myapp.myserver.com/html>
            WSGIProcessGroup smex
            WSGIApplicationGroup %{GLOBAL}
            Order deny,allow
            Allow from all
    </Directory>
</VirtualHost>

我的wsgi文件配置如下:

import sys
sys.path.insert(0, '/var/www/myapp.myserver.com/html')

activate_this = '/var/www/myapp.myserver.com/html/venv/bin/activate_this.py'
with open(activate_this) as file_:
    exec(file_.read(), dict(__file__=activate_this))

from myapp import app as application

但是,当我尝试打开网站时,我收到内部服务器错误。错误日志显示以下内容:

Tue Oct 18 14:24:50.174740 2016] [mpm_prefork:notice] [pid 27810] AH00163: Apache/2.4.6 (CentOS) PHP/5.4.16 mod_wsgi/3.4 Python/2.7.5 configured -- resuming normal operations
[Tue Oct 18 14:24:50.174784 2016] [core:notice] [pid 27810] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
ImportError: No module named site
ImportError: No module named site
ImportError: No module named site
ImportError: No module named site

最后一个错误不断重复大部分日志文件。引起我注意的第一件事是Python版本,似乎是2.7.5。这让我想到了我的问题:

  1. 我是否需要在/ usr / local中安装Python 3.5.1,或者我可以在虚拟环境中安装它。
  2. 我是否需要为此版本的Python安装特定的mod_wsgi版本?如果是这样,我应该通过pip而不是yum安装它吗?
  3. 我还缺少什么才能让它发挥作用?
  4. 提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

https://www.softwarecollections.org查看CentOS / RHEL的软件集合库(SCL),不要使用任何默认系统Python,Apache或mod_wsgi软件包。 SCL提供了比默认系统版本更新的Python和Apache版本。然后针对Python和Apache的SCL版本从源代码构建mod_wsgi。您不能强制mod_wsgi将Python虚拟环境用于与编译mod_wsgi不同版本的Python。