【问题标题】:Cannot import var from top package无法从顶级包导入 var
【发布时间】:2021-01-09 01:36:12
【问题描述】:

这是我的项目结构:

myProject/
|
|-- src/
|   |-- services/
|   |   |-- __init__.py
|   |   |-- users.py
|   |   
|   |-- main.py
|   |-- ...
...

在 main 中,我有需要在 users.py 中使用的 mongo var

# src/main.py

from flask import Flask
from flask_pymongo import PyMongo

import config
from services import api

app = Flask(__name__)

app.config["MONGO_URI"] = "mongodb://localhost:27017/myApp"
mongo = PyMongo(app)

api.init_app(app)


if __name__ == '__main__':
    app.run(host=config.HOST, port=config.PORT, debug=config.DEBUG)

在服务中init.py

# src/services/__init__.py
from flask_restx import Api
from .users import api as np_users
import config

api = Api(
    title=config.NAME,
    version=config.VERSION,
    description=config.DESCRIPTION,
)

api.add_namespace(np_users, path='/api/v1/users/users')

我尝试将 mongo var 导入:

# src/services/users.py

     ...

from main import mongo

api = Namespace('users', description='users')
     ...

当我这样做时:

python main.py

它抛出了这个错误:

Traceback(最近一次调用最后一次): 文件“main.py”,第 7 行,在 从服务导入 api 文件“C:\myProject\src\services_init_.py”,第 6 行,在 从 .users 导入 api 作为 ns_users 文件 "C:\myProject\src\services\users.py",第 5 行,inices\users.py",第 5 行,在 从主要进口 mongo 文件“C:\myProject\src\main.py”,第 7 行,在 .py 中,第 7 行,在 从服务导入 api end_analisis_prediccion_equipos_b ImportError: 无法从 'services' 导入名称 'api' (C:\myProject\src\services_init_.py)

【问题讨论】:

    标签: python flask pymongo flask-restx


    【解决方案1】:

    为了能够从 ma​​in (main.py) 导入 mongo,您必须在从服务导入 api 之前设置 mongo 的值。 你的 main.py 应该是这样的:

    from flask import Flask
    from flask_pymongo import PyMongo
    import config
    app = Flask(__name__)
    app.config["MONGO_URI"] = "mongodb://localhost:27017/myApp"
    
    mongo = PyMongo(app)
    
    from services import api 
    
    api.init_app(app)
    
    if __name__ == '__main__':
        app.run(host=config.HOST, port=config.PORT, debug=config.DEBUG)
    

    虽然这可行,但使用这种模式(从 ma​​in import ...)并不是一个好习惯。你可以查看一些解释here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      • 1970-01-01
      • 2015-05-18
      • 2017-03-22
      • 2020-11-03
      • 2017-02-22
      相关资源
      最近更新 更多