запутанная ошибка импорта при выполнении относительной ошибки импорта - PullRequest
0 голосов
/ 19 октября 2019

Это неловко, я решил что-то делать в колбе и получаю ошибку импорта:

.
____app_name
| |______init__.py
| |____api
| | |______init__.py
| |____app_init.py
| |____extensions.py
| |____models.py
| |____views.py
|____db.sqlite
|____instance
| |____settings.cfg
|____start.py
|____static
|____templates

мой текущий рабочий каталог /Development/web/python/AppStructure, и когда я пытаюсь запустить python3 start.py

$ python3 start.py 
/usr/local/lib/python3.7/site-packages/flask_marshmallow/__init__.py:27: UserWarning: Flask-SQLAlchemy integration requires marshmallow-sqlalchemy to be installed.
  "Flask-SQLAlchemy integration requires "
Traceback (most recent call last):
  File "start.py", line 1, in <module>
    from app_name.app_init import app
  File "/Development/web/python/AppStructure/app_name/app_init.py", line 5, in <module>
    from .api import api_blueprint
  File "/Development/web/python/AppStructure/app_name/api/__init__.py", line 2, in <module>
    from app_name.extensions import User, user_schema
  File "/Development/web/python/AppStructure/app_name/extensions.py", line 1, in <module>
    from .app_init import app, db, ma
ImportError: cannot import name 'app' from 'app_name.app_init' (/Development/web/python/AppStructure/app_name/app_init.py)

и extensions.py

from .app_init import app, db, ma


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    fname = db.Column(db.String(100))
    mname = db.Column(db.String(100))
    lname = db.Column(db.String(100))
    dob = db.Column(db.Date)
    user_type = db.Column(db.String(20))
    email = db.Column(db.String(100), unique=True, nullable=True)
    mobile_phone = db.Column(db.String(12), unique=True, nullable=True)
    landline_phone = db.Column(db.String(20))
    pob = db.Column(db.String(80)) # Place of birth
    government_id = db.Column(db.String(90)) # Passport/ Work Permit Card/ Adhar Card /Residence Card or DL
    government_id_number = db.Column(db.String(150), unique=True)
    registered = db.Column(db.DateTime)
    modified = db.Column(db.DateTime)

    def __init__(
        self, 
        fname, 
        mname, 
        lname, 
        dob, 
        user_type, 
        email, 
        mobile_phone, 
        landline_phone,
        place_of_birth, 
        government_id, 
        government_id_number,
        registered,
        modified
        ):
        self.fname = fname
        self.mname = mname
        self.lname = lname
        self.dob = dob
        self.user_type = user_type
        self.email = email
        self.mobile_phone = mobile_phone
        self.landline_phone = landline_phone
        self.place_of_birth = place_of_birth 
        self.government_id = government_id
        self.government_id_number = government_id_number
        self.registered = registered
        self.modified = modified


# User Schema
class UserSchema(ma.Schema):

    class Meta:
        fields = (
            "id",
            "fname", 
            "mname", 
            "lname", 
            "dob", 
            "user_type", 
            "email", 
            "mobile_phone", 
            "landline_phone",
            "place_of_birth", 
            "government_id", 
            "government_id_number",
            "registered",
            "modified"
            )

# Init Schema 
user_schema = UserSchema()
users_schema = UserSchema(many=True)

и app_init.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
from .views import main
from .api import api_blueprint


def create_app(config_file='settings.cfg'):
    # Init App
    _app = Flask(__name__, instance_relative_config=True)
    _app.config.from_pyfile(config_file)
    # db.init_app(app)
    _app.register_blueprint(main) # View (the website).
    _app.register_blueprint(api_blueprint)
    return _app


app = create_app()
ma = Marshmallow(app)
db = SQLAlchemy(app)

пожалуйста, помогите, что япоступаю неправильно ..

1 Ответ

0 голосов
/ 19 октября 2019

Поскольку extensions.py и app_init.py находятся в одной папке, вам не нужно это:

# not working
from .app_init import app, db, ma

Вы можете сделать это напрямую:

# working
from app_init import app, db, ma

или (опасно, но работает):

# working
from . import app, db, ma

Или вы можете просто импортировать весь файл:

import app_init

Надеюсь, это поможет. Удачи.

...