Flask импорт локального файла - PullRequest
0 голосов
/ 13 апреля 2020

У меня была следующая проблема с моим flask приложением. У меня есть следующая структура файла следующим образом. Кажется, внутренний файл include не работает. Может кто-нибудь, пожалуйста, помогите мне разобраться в проблеме. Я немного новичок в python и flask. app.py, db.py, blacklist.py все находятся только в каталоге root. ===== app.py =====

import flask
from flask_restful import Api
from flask_jwt_extended import JWTManager

from db import db
from blacklist import BLACKLIST

app = flask.Flask(__name__)
app.config["DEBUG"] = True

@app.route('/', methods=['GET'])
def home():
    return "<h1>Api Testing</h1><p>This is just testing endpoint.</p>"

app.run()

==== db.py ====

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

==== blacklist.py = ===

BLACKLIST = set()
flask.cli.NoAppException
flask.cli.NoAppException: While importing "xxxxxxx.app", an ImportError was raised: Traceback (most recent call last): File "/usr/local/lib/python3.7/site-packages/flask/cli.py", line 240, in locate_app __import__(module_name) File "/Users/xxxxx/Documents/Vhosts/xxxxx/app.py", line 5, in <module> from db import db ModuleNotFoundError: No module named 'db'

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

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

from db import db

переименуйте ваш файл и сделайте что-то вроде

from mydb import db

Затем, когда у вас что-то получится, пошагово выполните все, отмечая где вещи перестают работать, и используйте это как предлог, чтобы исследовать, как Python обрабатывает пространства имен.

0 голосов
/ 13 апреля 2020

Прежде всего, вы должны обернуть ваш app.run() вызов внутри main блока, иначе сервер попытается запустить, даже если вы импортируете только объект (что и делает Flask CLI с вами звоните flask run). Обоснование этого было подробно рассмотрено в других местах

import flask
from flask_restful import Api
from flask_jwt_extended import JWTManager

from db import db
from blacklist import BLACKLIST

app = flask.Flask(__name__)
app.config["DEBUG"] = True

@app.route('/', methods=['GET'])
def home():
    return "<h1>Api Testing</h1><p>This is just testing endpoint.</p>"

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

Это может решить вашу проблему, однако вам следует обновить свое сообщение, включив в него содержимое других файлов db.py и blacklist.py тоже. В вашем сообщении об ошибке есть упоминание о модуле db, и без этого больше ничего не может предложить.

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