Назад | Перейти на главную страницу

«ImportError: Нет модуля с именем flask» - проблема с nginx + uWSGI + Flask в настройке virtualenv

У меня nginx + uWSGI работает на локальном хосте внутри виртуального с простой программой hello world, но я получаю эту ошибку, когда заменяю hello world простым приложением Flask:

File "./wsgi_configuration_module.py", line 1, in <module>
    from flask import Flask
ImportError: No module named flask
unable to load app mountpoint

Вот приложение Flask (wsgi_configuration_module.py):

from flask import Flask
application = Flask(__name__)

@application.route("/")
def hello():
    return "hello world"

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

Конфигурация uWSGI (app_conf.xml):

<uwsgi>
    <socket>127.0.0.1:9001</socket>
    <chdir>/srv/www/labs/application</chdir>
    <pythonpath>/srv/www</pythonpath>
    <module>wsgi_configuration_module</module>
    <callable>application</callable>
    <no-site>true</no-site>
</uwsgi>

Конфигурация nginx:

server {
    listen   80;
    server_name localhost;
    access_log /srv/www/labs/logs/access.log;
    error_log /srv/www/labs/logs/error.log;

    location / {
        include        uwsgi_params;
        uwsgi_pass     127.0.0.1:9001;
    }

    location /static {
        root   /srv/www/labs/public_html/static/;
        index  index.html index.htm;
    }
}

virtualenv хранится в ~ / virtual_env с Python 2.7 + nginx + uWSGI + Flask, установленным в virtualenv с именем basic.

Что я пытался решить:

  1. установить --home (-H) вариант в моей папке virtualenv ~/virtual_env при запуске uWSGI.

Другая информация:

  1. У меня такая же установка, работающая за пределами virtualenv. Что-то идет не так, только когда я пытаюсь воспроизвести настройку внутри virtualenv.

Где я ошибся?

Просто добавьте путь к вашему виртуальному окружению в <pythonpath> в файле uwsgi app_conf.xml. например:

<pythonpath>/srv/www</pythonpath>
<pythonpath>/home/user/env/lib/python2.6/site-packages</pythonpath>
<module>wsgi_configuration_module</module> 

Параметр -H / - home / - virtualenv не расширяет символ ~. Укажите его как абсолютный путь, и он должен работать.

То же самое относится и к файлам конфигурации, поэтому вы должны добавить

path_to_virtualenv