web-dev-qa-db-ja.com

mod_wsgiでconda環境を使用するにはどうすればよいですか?

私の最初の投稿で、PythonとApacheの両方に慣れていないので、気楽にやってください。コンダ環境にPython Webアプリケーションがあります。これはFlaskを使用してコンテンツを問題なく提供します。FlaskではなくApacheですべてを提供する必要があります。Apacheをmod_wsgiで実行させることができますPython、ただしvirtualenvでのみ。virtualenvをインストールしてみましたアナコンダですが、そのような設定はサポートされておらず、推奨されないという警告を受け取りました。私の質問は次のとおりです。

Conda環境でアプリケーションを実行するようにApacheを設定するにはどうすればよいですか?

ここ 、仮想環境での作業に関するセクションがあり、Activate_this.pyの場所を示す行をwsgiファイルに入力する必要があると書かれています。 virtualenv仮想環境にはactivate_this.pyがありますが、conda環境にはありません。仮想環境をアクティブ化するための正しい手順がないと、ブラウザにエラー500が表示され、httpderror_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

何か案は?あなたが提供できるどんな助けにも感謝します。

18
Nathaniel

私はこれについてパーティーに遅れましたが、私は同じ問題を抱えていました。その価値のために、私は何も再コンパイルする必要はなく、システムにインストールされたmod_wsgiを使用してVirtualHost構成に次のようなものを含めることでこれを機能させることができました:

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

これはsite-packagesディレクトリを指していることに注意してください。

10
dino

@dinoの回答に追加するには、ルートconda環境にmod_wsgiをインストールすることもできます。

# 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
6
ostrokach

Mod_wsgiは、システムPythonではなく、Anaconda Pythonから開始する必要があります。つまり、システム提供のmod_wsgiパッケージを使用することはできませんが、自分でコンパイルする必要があります。それはで言います:

つまり、デーモンモードを使用し、python-homeオプションをWSGIDaemonProcessに使用します。

Anaconda Pythonが何らかの方法で壊れており、Pythonを組み込みたいシステムでは機能しないことを示唆する報告があることに注意してください。したがって、とにかく機能しない可能性があります。

ところで、WSGIスクリプトファイルのパスで「〜」を使用することはできません。ホームディレクトリに展開されることはありません。しかし、その後、その投稿に従ってください。そうすれば、それは必要ありません。

2