簡體   English   中英

如何在mod_wsgi中使用conda環境?

[英]How do I use a conda environment with mod_wsgi?

我的第一篇文章,我是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>

這是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

有任何想法嗎? 感謝您的任何幫助,您可以提供。

我遲到了,但我遇到了同樣的問題。 為了它的價值,我沒有必要重新編譯任何東西,並且能夠通過使用系統安裝的mod_wsgi在我的VirtualHost配置中包含類似的東西來實現這一點:

WSGIDaemonProcess mysite python-path=/path/to/anaconda2/lib/python2.7/site-packages

請注意,這指向site-packages目錄。

要添加到@ 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

您需要針對Anaconda Python編譯mod_wsgi,而不是系統Python。 換句話說,你不能使用系統提供的mod_wsgi包,但需要自己編譯。 然后按照它的說法:

也就是說,使用守護進程模式並使用WSGIDaemonProcesspython-home選項。

請注意,有報道稱Anaconda Python在某種程度上被破壞,並且不適用於想要嵌入Python的系統。 所以無論如何可能都行不通。

順便說一下,你不能在你的WSGI腳本文件的路徑中使用'〜'。 它不會擴展為主目錄。 但是,請關注該帖子,你不需要那樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM