如何在mod_wsgi中使用conda环境?

Nat*_*iel 15 python apache mod-wsgi anaconda conda

我的第一篇文章,我是Python和Apache的新手,所以请放轻松我.我在conda环境中有一个Python Web应用程序,使用Flask可以很好地提供内容.现在我需要用Apache而不是Flask来提供所有服务.我可以让Apache使用mod_wsgi来运行Python,但只能使用virtualenv.我尝试使用Anaconda安装virtualenv,但我收到警告说这样的设置不受支持且不推荐.所以我的问题是:

如何设置Apache以在conda环境中运行我的应用程序?

这里有一个关于使用虚拟环境的部分,它说我需要在我的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>
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?感谢您的任何帮助,您可以提供.

din*_*ino 8

我迟到了,但我遇到了同样的问题.为了它的价值,我没有必要重新编译任何东西,并且能够通过使用系统安装的mod_wsgi在我的VirtualHost配置中包含类似的东西来实现这一点:

WSGIDaemonProcess mysite python-path=/path/to/anaconda2/lib/python2.7/site-packages
Run Code Online (Sandbox Code Playgroud)

请注意,这指向site-packages目录.

  • 你在这里指的是哪个文件? (2认同)

ost*_*ach 6

要添加到@dino的答案中,您还可以安装mod_wsgi到root 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
Run Code Online (Sandbox Code Playgroud)

然后,您可以为多个站点创建conda环境:

# Create 3 conda environments
conda create -n mysite1 python django
conda create -n mysite2 python django
conda create -n mysite3 python django
Run Code Online (Sandbox Code Playgroud)

WSGIDaemonProcess在Apache站点配置文件中设置为每个站点使用适当的环境:

# /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
Run Code Online (Sandbox Code Playgroud)

  • 使用python-path来引用site-packages并不是最佳实践。您应该使用python-home选项来代替Python虚拟环境的顶部。引用``site-packages''可能会隐藏各种问题,例如您的mod_wsgi实际上正在针对其他Python版本或安装进行编译。http://blog.dscpl.com.au/2014/09/using-python-virtual-environments-with.html (3认同)