Как решить ошибки импорта при попытке развернуть Flask с помощью WSGI на Apache2

У меня возникла проблема с развертыванием фляжного приложения на apache2 с помощью wsgi. Я разместил журналы ошибок и файлы конфигурации ниже. Я пытался перемещать вещи, переименовывать их и т. д., но все выдавало внутреннюю ошибку сервера. Не уверен, почему я получаю ошибку импорта. Любой вклад/предложения приветствуются, спасибо!

Вот мой apache error.log

[Sun Sep 12 20:47:59 2010] [error] [client] mod_wsgi (pid=9753): Target WSGI script '/sites/flaskfirst/wsgi.py' cannot be loaded as Python module.
[Sun Sep 12 20:47:59 2010] [error] [client] mod_wsgi (pid=9753): Exception occurred processing WSGI script '/sites/flaskfirst/wsgi.py'.
[Sun Sep 12 20:47:59 2010] [error] [client] Traceback (most recent call last):
[Sun Sep 12 20:47:59 2010] [error] [client]   File "/sites/flaskfirst/wsgi.py", line 1, in <module>
[Sun Sep 12 20:47:59 2010] [error] [client]     from app import app as application
[Sun Sep 12 20:47:59 2010] [error] [client] ImportError: No module named app

wsgi.py

# This is wsgi.py
from app import app as application

app.py

# This is app.py
from flask import Flask, render_template
import settings

app = Flask(__name__)
app.debug = settings.DEBUG

from views.homepage import *
from views.events import *
from views.submit import *
from views.feed import *

if __name__ == "__main__":
    app.run()

Вот основы дерева каталогов, чтобы дать вам представление.

/flaskfirst/
    /static/
    /templates/
    /views/
    __init__.py
    app.py
    wsgi.py

Вот файл виртуального хоста apache

<VirtualHost *:80>
        ServerAdmin [email protected]
        ServerName crath.org
        DocumentRoot /sites/flaskfirst

        # WSGI Settings
        WSGIScriptAlias / /sites/flaskfirst/wsgi.py
        WSGIDaemonProcess flaskfirst user=sreustle group=general processes=1 threads=10
        WSGIProcessGroup flaskfirst

        # Static Directories
        Alias /static /sites/flaskfirst/static/
        <Location "/static">
                SetHandler None
        </Location>

</VirtualHost>

person Shane Reustle    schedule 12.09.2010    source источник


Ответы (2)


Спасибо zarf и damjan на irc.freenode.org в #pocoo, они смогли помочь мне исправить это. Проблема заключалась в том, что PythonPath был неправильным. Мы исправили это, используя следующий файл wsgi.py.

import sys
sys.path.insert(0, "/sites/flaskfirst")

from app import app
application = app
person Shane Reustle    schedule 12.09.2010
comment
Была такая же проблема. Я добавил его в WSGIDaemonProcess appName python-path=/home/... в моем конфигурационном файле httpd. Не уверен, что это правильное место или нет, но FWIW - вариант. Подробнее о WSGIDaemonProcess: [ссылка] (code.google.com/p/modwsgi/ вики/) - person chris; 16.06.2012
comment
Спасибо! Вы спасли мой день!! - person Roomm; 08.06.2016

Я использовал ваше решение, чтобы заставить его работать, но оно продолжало дублировать путь в sys.path (вы можете записать его, чтобы узнать, произойдет ли это с вами), поэтому я внес небольшую модификацию:

import sys
flaskfirst = "/sites/flaskfirst"
if not flaskfirst in sys.path:
    sys.path.insert(0, flaskfirst)

from app import app
application = app

Таким образом, он включается только один раз

person Willyfrog    schedule 19.10.2011