Python模块导入是否在底部,确定吗?

问题描述 投票:0回答:2

Pylint在我的from .views import *end处放置__init__.py时大喊大叫,说要把导入放置在模块的顶部。

如果将其放在__init__.py的顶部,则Flask找不到我的路线(视图),因此无法正常工作。

几个问题:

  • Pylint认为模块应该始终位于顶部并且有时可以在末尾导入(在这种情况下)是可以接受的吗?
  • 或者我应该以其他方式导入路线吗?

供参考,以防:

.
├── README.md
├── my_app
│   ├── __init__.py
│   ├── forms.py
│   ├── models.py
│   ├── static
│   ├── templates
│   │   ├── index.html
│   │   └── loggedin.html
│   └── views.py
├── config.py
├── instance
│   └── config.py
├── requirements.txt
└── run.py

__init__.py中内容的示例

from flask import Flask, render_template
from authlib.integrations.flask_client import OAuth


app = Flask(__name__, instance_relative_config=True)
app.config.from_object('config')
app.config.from_pyfile('config.py')

oauth = OAuth(app)

APP_CALLBACK_URL = app.config['APP_CALLBACK_URL']
APP_CLIENT_ID = app.config['APP_CLIENT_ID']
APP_CLIENT_SECRET = app.config['APP_CLIENT_SECRET']
APP_DOMAIN = app.config['APP_DOMAIN']
APP_BASE_URL = 'https://' + APP_DOMAIN

my_app = oauth.register(
    'MY_APP',
    client_id=APP_CLIENT_ID,
    client_secret=APP_CLIENT_SECRET,
    api_base_url=APP_BASE_URL,
    access_token_url=APP_BASE_URL + '/oauth/token',
    authorize_url=APP_BASE_URL + '/authorize',
)


from .views import *
python flask
2个回答
0
投票

如果在其功能之后导入类/库,则将无法识别它。因为它是按照自上而下的顺序运行的。

尝试使用其他译员,例如PyCharm或Spider。


0
投票

通常来说,导入应该放在顶部,但是Flask文档讨论了这种情况,并鼓励您像以前那样做。取自https://flask.palletsprojects.com/en/1.1.x/patterns/packages/

  1. Flask应用程序对象的创建必须在__init__.py文件中。这样,每个模块都可以安全地导入它,并且__name__变量将解析为正确的包。

  2. 所有视图功能(顶部带有route()装饰器的视图功能)必须导入__init__.py文件中。不是对象本身,而是对象所在的模块。导入视图模块创建应用程序对象后

© www.soinside.com 2019 - 2024. All rights reserved.