ModuleNoFoundError: при попытке запустить приложение Flask нет модуля с именем 'stuff' исключение - PullRequest
0 голосов
/ 22 ноября 2018

Я пробовал очень простой Python, но не знаю, откуда возникла ошибка.

__init__.py (loc: /var/www/project/stuff/__init__.py)

from flask import Flask

app = Flask(__name__)

home.py (loc: /var/www/project/stuff/home.py)

from stuff import app

@app.route("/", methods=['GET', 'POST'])
@app.route("/home", methods=['GET', 'POST'])
def home():
    return "This is Home"

run.py (loc: /var/www/project/run.py)

from stuff import app

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

Я получаю ModuleNoFoundError: No module named 'stuff' исключение.

Что я делаю не так?

Это мой project.wsgi (loc: /var/www/project)

import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/project/stuff/")

from home import app as application

и traceback

[Thu Nov 22 12:54:06.145378 2018] [wsgi:error] File "/var/www/project/project.wsgi", line 6, in <module>
[Thu Nov 22 12:54:06.145384 2018] [wsgi:error] from home import app as application
[Thu Nov 22 12:54:06.145390 2018] [wsgi:error] File "/var/www/project/stuff/home.py", line 1, in <module>
[Thu Nov 22 12:54:06.145394 2018] [wsgi:error]     from stuff import app
[Thu Nov 22 12:54:06.145407 2018] [wsgi:error] ModuleNotFoundError: No module named 'stuff'
[Thu Nov 22 12:54:06.227614 2018] [wsgi:error] mod_wsgi (pid=3172): Target WSGI script '/var/www/project/project.wsgi' cannot be loaded as Python module., referer: http://52.195.0.108/
[Thu Nov 22 12:54:06.227668 2018] [wsgi:error] mod_wsgi (pid=3172): Exception occurred processing WSGI script '/var/www/project/project.wsgi'., referer: http://52.195.0.108/
[Thu Nov 22 12:54:06.227898 2018] [wsgi:error] Traceback (most recent call last):, referer: http://52.195.0.108/
[Thu Nov 22 12:54:06.227927 2018] [wsgi:error] File "/var/www/project/project.wsgi", line 6, in <module>, referer: http://52.195.0.108/
[Thu Nov 22 12:54:06.227933 2018] [wsgi:error]   from home import app as application, referer: http://52.195.0.108/
[Thu Nov 22 12:54:06.227940 2018] [wsgi:error] File "/var/www/project/stuff/home.py", line 1, in <module>, referer: http://52.195.0.108/
[Thu Nov 22 12:54:06.227944 2018] [wsgi:error]   from stuff import app, referer: http://52.195.0.108/
[Thu Nov 22 12:54:06.227957 2018] [wsgi:error] ModuleNotFoundError: No module named 'stuff', referer: http://52.195.0.108/

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Вы добавляете каталог вашего пакета в путь поиска модуля:

sys.path.insert(0,"/var/www/project/stuff/")

Не делайте этого .Python не может найти пакет stuff внутри /var/www/project/stuff/.Вы должны импортировать stuff.home, а не home:

import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/project")

from stuff.home import app as application

То, что вы импортируете app из home, немного назад.Вы можете реструктурировать свой проект для создания объекта Flask app и домашних маршрутов в отдельных подмодулях:

stuff/__init__.py:

from . import app, home

application = app.app

stuff/app.py:

from flask import Flask

app = Flask(__name__)

stuff/home.py:

from .app import app

@app.route("/", methods=['GET', 'POST'])
@app.route("/home", methods=['GET', 'POST'])
def home():
    return "This is Home"

Вы можете удалить run.py в целом.Используйте приложение командной строки flask для запуска вашего кода при разработке:

FLASK_APP=stuff flask run

Я использовал ., чтобы сделать импорт относительно текущего пакета, чтобы вы могли легче переименовать stuff во что-тоеще.

0 голосов
/ 22 ноября 2018

когда я использую

home.py (loc: /var/www/project/stuff/home.py)

from flask import Flask

app = Flask(__name__)

@app.route("/", methods=['GET', 'POST'])
@app.route("/home", methods=['GET', 'POST'])
def home():
    return "This is Home"

run.py (loc: / var / www/project/run.py)

from stuff import app

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

это работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...