python - Flask-migrate 找不到自定义模块
问题描述
我对我的 SQLAlchemy 模型进行了一些更改,我想将它们迁移到我的数据库中。当我尝试迁移时,我收到以下错误:
$ flask db migrate
Usage: flask db migrate [OPTIONS]
Error: While importing "minerva.dashboard.app", an ImportError was raised:
Traceback (most recent call last):
File "/home/mattfred/Minerva/envs/dashboard/lib/python3.7/site-packages/flask/cli.py", line 235, in locate_app
__import__(module_name)
File "/home/mattfred/Minerva/minerva/dashboard/app.py", line 13, in <module>
from templates.nav_layout import *
ModuleNotFoundError: No module named 'templates'
我不知道自从我第一次初始化数据库以来发生了什么变化,除了将视图移动到单独的文件而不是 1。
我实际上可以通过将导入语句更改为
from .templates.nav_layout import *
但是在尝试运行应用程序时出现此错误:
Traceback (most recent call last):
File "app.py", line 13, in <module>
from .templates.nav_layout import *
ModuleNotFoundError: No module named '__main__.templates'; '__main__' is not a package
我已经尝试过这里提供的解决方案:Flask-Migrate "ModuleNotFoundError"
但这运行没有错误并且不会改变我的数据库。
如果我删除该行,它只会移动到下一个模板文件,然后是 Config 文件,所以我认为模板文件没有任何问题。
# app.py
import os
from flask import Flask, redirect
from flask_login import login_required, LoginManager
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_socketio import SocketIO, emit, disconnect
from werkzeug.wsgi import DispatcherMiddleware
from dash import Dash
from templates.nav_layout import *
from templates.dash_app_layout import *
from Config import Config, DEBUG
# Setup the Flask server
server = Flask(__name__)
server.config.from_object(Config)
db = SQLAlchemy(server)
migrate = Migrate(server, db)
@server.shell_context_processor
def make_shell_context():
from Models import Users, Company
return {'db': db, 'Users': Users, 'Company': Company}
我相当肯定这与项目结构有关
├── app.py
├── Config.py
├── Forms.py
├── __init__.py
├── manage.py
├── migrations/
├── Models.py
├── requirements.txt
├── templates
│ ├── change_profile.html
│ ├── dash_app_layout.py
│ ├── default_login.html
│ ├── default_logout.html
│ ├── _formhelpers.html
│ ├── header.html
│ ├── index.html
│ ├── __init__.py
│ ├── nav_layout.py
│ ├── record_meeting.html
│ ├── register_user.html
│ ├── upload_meeting.html
│ └── voice_enroll.html
├── utils
│ ├── audio_processor
│ │ ├── AudioProcessor.py
│ │ ├── audio_type_converter.py
│ │ ├── Deidentifier.py
│ │ ├── Identification
│ │ │ ├── CreateProfile.py
│ │ │ ├── DeleteProfile.py
│ │ ├── __init__.py
│ │ ├── Utterance.py
│ │ └── voice_enroll.py
│ ├── db_operations.py
│ ├── __init__.py
│ ├── interim_result_processor.py
│ └── utils.py
└── views
├── auth.py
├── dash_callbacks.py
├── __init__.py
├── meeting_upload.py
├── profile.py
└── record_meeting.py
解决方案
根据评论中的讨论,问题在于顶级目录有一个__init__.py
文件。删除该文件解决了奇怪的导入行为。
推荐阅读
- postgresql - 无法删除 Terraform 中包含提供程序的模块实例
- angular - Angular 6 pipe 不渲染材质图标
- json - 使用 JSON 和 AJAX 从 sharepoint 在线列表中获取“个人或组”列值
- asp.net-mvc-4 - 如何在不重定向到 MVC 4 中的新视图的情况下显示来自异常的错误消息
- javascript - 如何从动态加载网站获取数据
- debugging - 在 PhpStorm 中调试测试时是否可以打开控制台窗口?
- php - 从 Woocommerce 3 中的订单商品中获取正确的变化价格
- maven - 向控制器发送 http GET 时发生 404 错误
- git - 如何在 Jenkins 管道中使用 GitHub 提交消息和提交 ID?
- python - 忽略或重置日期时间秒和微秒