导入模块和 运行 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
文件中导入 pkg1
和 pkg2
所以如果应该像:
# __init__.py
import pkg1
import pkg2
或者您可以更改目录结构:
之前:
scr
|
- pkg1.py
|
- pkg2.py
|
- app.py
之后:
scr
|
- app.py
|
- pkgs
|
- pkg1.py
|
- pkg2.py
我有一个正在 运行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
文件中导入 pkg1
和 pkg2
所以如果应该像:
# __init__.py
import pkg1
import pkg2
或者您可以更改目录结构:
之前:
scr
|
- pkg1.py
|
- pkg2.py
|
- app.py
之后:
scr
|
- app.py
|
- pkgs
|
- pkg1.py
|
- pkg2.py