我的第一篇文章,我是Python和Apache的新手,所以请放轻松我。我在conda环境中有一个Python Web应用程序,使用Flask可以很好地提供内容。现在我需要用Apache而不是Flask来提供所有服务。我可以让Apache使用mod_wsgi来运行Python,但只能使用virtualenv。我尝试使用Anaconda安装virtualenv,但我收到警告说这样的设置不受支持且不推荐。所以我的问题是:
如何设置Apache以在conda环境中运行我的应用程序?
Here,有一个关于使用虚拟环境的部分,它说我需要在我的wsgi文件中输入一行,显示在哪里可以找到activate_this.py。 virtualenv虚拟环境有activate_this.py,但conda环境没有。似乎没有激活虚拟环境的正确指令,我只是在我的浏览器中收到错误500,并在我的httpd error_log中导入“导入错误:没有名为flask的模块”。
这是在我的httpd.conf文件中:
<VirtualHost *:80>
DocumentRoot /var/www
WSGIScriptAlias / var/www/tsm.wsgi
<Directory /var/www/tsm>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
这是tsm.wsgi:
import sys
import site
site.addsitedir('~/.conda/envs/tsm/lib/python2.7/site-packages')
sys.path.insert(0, '/var/www/tsm/server/time_series_machine')
sys.stdout = sys.stderr
from app import app as application
有什么想法吗?感谢您提供的任何帮助。
答案 0 :(得分:8)
我迟到了,但我遇到了同样的问题。为了它的价值,我没有必要重新编译任何东西,并且能够通过使用系统安装的mod_wsgi在我的VirtualHost配置中包含类似的内容来实现这一点:
WSGIDaemonProcess mysite python-path=/path/to/anaconda2/lib/python2.7/site-packages
请注意,这指向site-packages
目录。
答案 1 :(得分:6)
要添加到@ dino的答案,您还可以将mod_wsgi
安装到根conda环境中:
# Instal `mod_wsgi`
$ pip install mod_wsgi
# Find the full path to installed `mod_wsgi`
$ which mod_wsgi-express
# Install and register the `mod_wsgi` module with Apache
$ sudo /full/path/to/installed/mod_wsgi-express install-module
然后,您可以为多个站点创建conda环境:
# Create 3 conda environments
conda create -n mysite1 python django
conda create -n mysite2 python django
conda create -n mysite3 python django
在Apache站点配置文件中设置WSGIDaemonProcess
,以便为每个站点使用适当的环境:
# /etc/apache2/sites-enabled/mysite1.conf
WSGIDaemonProcess mysite1 python-path=/path/to/anaconda3/envs/mysite1/lib/python3.5/site-packages
# /etc/apache2/sites-enabled/mysite2.conf
WSGIDaemonProcess mysite2 python-path=/path/to/anaconda3/envs/mysite2/lib/python3.5/site-packages
# /etc/apache2/sites-enabled/mysite3.conf
WSGIDaemonProcess mysite3 python-path=/path/to/anaconda3/envs/mysite3/lib/python3.5/site-packages
答案 2 :(得分:1)
您的mod_wsgi需要针对Anaconda Python进行编译,而不是系统Python。换句话说,你不能使用系统提供的mod_wsgi包,但需要自己编译。然后按照它的说法进行操作:
即,使用守护程序模式并使用python-home
选项WSGIDaemonProcess
。
请注意,有报道称Anaconda Python在某种程度上被破坏,并且不适用于想要嵌入Python的系统。所以无论如何都可能无效。
顺便说一句,你不能在你的WSGI脚本文件的路径中使用'〜'。它不会扩展为主目录。但是,请关注该帖子,你不需要那样。