web-dev-qa-db-ja.com

virtualenvまたはPython、システムのデフォルトとは異なるバージョンでmod_wsgiを実行します

FlaskアプリケーションをCentOSサーバーで動作させようとしています。基本的に問題は、システムである/usr/binにPython 2.6がインストールされていることです。デフォルトおよびPython 3.4は/usr/local/binにインストールされています。Python 3.4virtualenvまたは少なくともPython = 3.4mod_wsgiがアプリケーションを実行するためのインタープリター。

~/virtualenvs/flaskでvirtualenvを作成しました。

私はこのWSGIスクリプトを持っています:

import os
import sys
from logging import Formatter, FileHandler

APP_HOME = r"/home/fenikso/Album"


activate_this = os.path.join("/home/fenikso/virtualenvs/flask/bin/activate_this.py")
execfile(activate_this, dict(__file__=activate_this))

sys.path.insert(0, APP_HOME)
os.chdir(APP_HOME)

from app import app

handler = FileHandler("app.log")
handler.setFormatter(Formatter("[%(asctime)s | %(levelname)s] %(message)s"))
app.logger.addHandler(handler)
application = app

そして、Apacheの次の設定:

<VirtualHost *:80>
        ServerName album2.site.cz
        Alias /static "/home/fenikso/Album/static"
        Alias /photos "/home/fenikso/Album/photos"
        Alias /thumbs "/home/fenikso/Album/thumbs"
        WSGIScriptAlias / "/home/fenikso/Album/wsgi.py"
        <Directory "/home/fenikso/Album">
            AllowOverride None
            Allow from all
        </Directory>
        <Directory "/home/fenikso/Album/static">
            AllowOverride None
            Allow from all
        </Directory>
        <Directory "/home/fenikso/Album/photos">
            AllowOverride None
            Allow from all
        </Directory>
        <Directory "/home/fenikso/Album/thumbs">
            AllowOverride None
            Allow from all
        </Directory>
</VirtualHost>

ただし、アプリケーションを実行しようとすると、エラーが発生します。

Apache/2.2.15 (Unix) DAV/2 mod_wsgi/3.2 Python/2.6.6 mod_fcgid/2.3.7 PHP/5.3.3 mod_ssl/2.2.15 OpenSSL/1.0.1e-fips SVN/1.6.11 mod_Perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations
mod_wsgi (pid=14627): Target WSGI script '/home/fenikso/Album/wsgi.py' cannot be loaded as Python module.
mod_wsgi (pid=14627): Exception occurred processing WSGI script '/home/fenikso/Album/wsgi.py'.
Traceback (most recent call last):
   File "/home/fenikso/Album/wsgi.py", line 15, in <module>
     from app import app
   File "/home/fenikso/Album/app.py", line 1, in <module>
     from flask import Flask
 ImportError: No module named flask

Python 2.6が実行されていて、virtualenvがアクティブ化されていないことに気づきました。これを機能させ、Pythonシステムのデフォルトとして2.6?

13
Fenikso

適切な実行可能ファイルとvirtualenvへのパスを指定するには、Apache.confに次の行を追加する必要があります。

WSGIPythonHome /usr/local/bin
WSGIPythonPath /home/fenikso/virtualenv/lib/python3.4/site-packages

これらの2つのコマンドのすべてのオプションがあります mod_wsgiドキュメントにあります

Mod_wsgiのバージョンがpython実行可能ファイルと互換性がある必要があることに注意してください。この場合、mod_wsgi3.4をインストールし、標準のmod_wsgiモジュールの代わりにそれを使用するようにApacheを構成する必要があります。

構成ファイル全体は次のようになります。

WSGIPythonHome "/usr/local/bin"
WSGIPythonPath "/home/fenikso/virtualenv/lib/python3.4/site-packages"

<VirtualHost *:80>
        ServerName album2.site.cz
        Alias /static "/home/fenikso/Album/static"
        Alias /photos "/home/fenikso/Album/photos"
        Alias /thumbs "/home/fenikso/Album/thumbs"
        WSGIScriptAlias / "/home/fenikso/Album/wsgi.py"
        <Directory "/home/fenikso/Album">
            AllowOverride None
            Allow from all
        </Directory>
        <Directory "/home/fenikso/Album/static">
            AllowOverride None
            Allow from all
        </Directory>
        <Directory "/home/fenikso/Album/photos">
            AllowOverride None
            Allow from all
        </Directory>
        <Directory "/home/fenikso/Album/thumbs">
            AllowOverride None
            Allow from all
        </Directory>
</VirtualHost>
10
afrancais

WSGIPythonHomeおよびWSGIPythonPath ディレクティブを調べます。 python2.6 mod_wsgiがインストールされている可能性もあり、mod_wsgiは目的のpythonバージョンおよび 複数のpythonをサポートしていません)用にコンパイルする必要がありますversion 。したがって、mod_wsgiがpy3.4と互換性があることを確認し、上記のディレクティブを設定します。

または、flask app with python server like gunicorn and proxypass from Apache togunicorn。

2
kalhartt