Flask-migrate не может найти пользовательские модули - PullRequest
0 голосов
/ 23 мая 2019

Я внес некоторые изменения в свои модели 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"

но это работает без ошибок и не меняет мою базу данных.

Если я удаляю эту строку, она просто переходит к следующему файлу шаблонов, а затем к файлу конфигурации, так что я не думаю, что с файлом шаблонов что-то не так.

# 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

1 Ответ

1 голос
/ 30 мая 2019

Судя по обсуждению в комментариях, проблема заключалась в том, что в каталоге верхнего уровня был файл __init__.py. Удаление этого файла устранило странное поведение при импорте.

...