导入模块和 运行 flask 应用程序的正确方法

Proper way to import modules and run flask app

我有一个正在 运行ning 的烧瓶应用程序。我目前 运行 使用 flasks 命令 运行 将应用程序作为 python 脚本 app.run()

脚本目前看起来像


from src.pkg1 import func1
from src.pkg2 import func2

app = flask.Flask(__name__)

@app.route('/', methods=['GET'])
def index():
    return('Hello world')

if __name__ == '__main__':
    app.run()

当 运行将此 app.py 文件作为 python 脚本时,这非常有效。

文件结构是根存储库目录包含一个 src 文件夹,其中包含需要 运行 的所有代码。但是问题是,当我尝试使用 flask run 运行 应用程序时,出现错误。

如果我 cd 进入 src 文件夹并且 运行 flask run 我得到的输出是

Error: While importing "repo.src.app", an ImportError was raised:

Traceback (most recent call last):
  File "d:\folder\repo\venv\lib\site-packages\flask\cli.py", line 240, in locate_app
    __import__(module_name)
  File "D:\folder\repo\src\app.py", line 3, in <module>
    from src.pkg1 import func1
ModuleNotFoundError: No module named 'src'

我可以通过像这样将导入更改为 relative 来解决这个问题


from .pkg1 import func1
from .pkg2 import func2

app = flask.Flask(__name__)

@app.route('/', methods=['GET'])
def index():
    return('Hello world')

if __name__ == '__main__':
    app.run()

但是 运行将应用程序作为 python 脚本将无法运行,输出为

Traceback (most recent call last):
  File "D:/folder/repo/src/app.py", line 3, in <module>
    from .pkg1 import func1
ModuleNotFoundError: No module named '__main__.pkg1'; '__main__' is not a package

为什么会发生这种情况,我该如何解决?为什么 运行ning flask run 会以不同的方式对待应用程序。相对和绝对导入的预期用途是什么?

感谢任何帮助。

谢谢!

在您的 src 目录中创建一个 __init__.py 文件。在 __init__.py 文件中导入 pkg1pkg2 所以如果应该像:

# __init__.py

import pkg1
import pkg2

或者您可以更改目录结构:

之前:

scr
 |
 - pkg1.py
 |
 - pkg2.py
 |
 - app.py

之后:

scr
 |
 - app.py
 |
 - pkgs
    |
    - pkg1.py
    |
    - pkg2.py