【问题标题】:Python / Flask App - Relative Imports Stopped WorkingPython / Flask App - 相对导入停止工作
【发布时间】:2021-09-12 02:59:28
【问题描述】:

一切正常,导入一直有效,我的项目结构没有改变。我做了一些更改——添加了字段和表单,突然我的 app/main/views.py 中的所有相关导入都停止了工作。我恢复了我的更改 - 那也不起作用。救命!

更新:所以它在命令行中使用“flask run”运行良好,但在 PyCharm 中却没有。所以我认为这是 PyCharm 配置问题。我的 config.py 文件根本没有改变,所以我认为它在这里:PyCharm Run/Debug Config

我并没有故意对配置进行任何更改......所以不确定下一步是什么。如果有人对此项目的配置有建议,我将不胜感激!

这是项目结构。 App、Auth 和 Main 显示为包: Project Structure

这是主应用 demo.py:

import os
from app import create_app, db
from app.models import Org, User, Role, DemoType, DemoReport, DemoRptQ, \
    Demo, Question, Answer, Location
from flask_migrate import Migrate

app = create_app(os.getenv('FLASK_CONFIG') or 'default')
migrate = Migrate(app, db)

@app.shell_context_processor
def make_shell_context():
    return dict(db=db, Org=Org, User=User, Role=Role, Location=Location,
                DemoType=DemoType, DemoReport=DemoReport, DemoRptQ=DemoRptQ, Demo=Demo,
                Question=Question, Answer=Answer)

@app.cli.command()
def test():
    import unittest
    tests = unittest.TestLoader().discover('tests')
    unittest.TextTestRunner(verbosity=2).run(tests)

这是应用 init.py

from flask import Flask
from flask_bootstrap import Bootstrap
from flask_mail import Mail
from flask_moment import Moment
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from config import config

bootstrap = Bootstrap()
mail = Mail()
moment = Moment()
db = SQLAlchemy()

login_manager = LoginManager()
login_manager.login_view = 'auth.login'

def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)

    bootstrap.init_app(app)
    mail.init_app(app)
    moment.init_app(app)
    db.init_app(app)
    login_manager.init_app(app)

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint, url_prefix='/auth')

    return app

还有app/main包init.py:

from flask import Blueprint

main = Blueprint('main', __name__)

from . import views, errors
from ..models import Permission

@main.app_context_processor
def inject_permissions():
    return dict(Permission=Permission)

最后是 app/main views.py,我在第三行从 ..import db 得到错误

from datetime import datetime
from flask import render_template, session, redirect, url_for, flash
from .. import db
from ..models import User, Role, Location, Demo, Question, Answer, DemoType, DemoReport, DemoRptQ
from ..email import send_email
from . import main
from .forms import DashboardForm, EditProfileForm, EditProfileAdminForm, DemosForm, DemoForm
from .forms import QuestionsForm, QuestionForm, DemoTypesForm, DemoTypeForm, DemoReportsForm, DemoReportForm
from .forms import AnswerForm, AnswersForm, LocationsForm, LocationForm
from .forms import UsersForm
from flask_login import login_required, current_user
from ..decorators import admin_required
from wtforms.validators import DataRequired, Optional, Length


@main.route('/', methods=['GET', 'POST'])
def index():
    form = DashboardForm()
    if form.validate_on_submit():
        btn = form.submit.raw_data[0]
        if btn == 'Demos':
            return redirect(url_for('.demos_list'))
        elif btn == 'New Demo':
            return redirect(url_for('.edit_demo', id=0))
        elif btn == 'Login':
            return redirect(url_for('auth.login'))
        elif btn == 'Register':
            return redirect(url_for('auth.register'))

    return render_template('index.html', form=form, isauth=current_user.is_authenticated)

@main.route('/users')
def users_list():
    form = UsersForm()
    if form.validate_on_submit():
         return redirect(url_for('.index'))

【问题讨论】:

    标签: python flask package importerror project-structure


    【解决方案1】:

    我在另一篇文章中找到了这个答案,它奏效了!在 Pycharm Run/Debug Configs 中,取消选中“Add Content Roots to PYTHONPATH”和“Add Source Roots to PYTHONPATH”。不明白为什么它坏了或为什么它被修好了……但以后有足够的时间。

    PyCharm Config Fix

    【讨论】:

      猜你喜欢
      • 2020-02-16
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      • 2018-01-24
      • 2018-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多