如何使用Flask在Python中调用包内的模块?

2024-05-19 13:07:47 发布

您现在位置:Python中文网/ 问答频道 /正文

上下文。Python 3.9.1、Flask 2.0.1和Windows 10

我想做什么。调用位于自定义包中的模块

麻烦。无论我做什么,控制台都坚持告诉我:ModuleNotFoundError: No module named 'my_package'

我在做什么。

我正在关注官方的烧瓶教程。因此,本项目的结构基本上是这样的(与本教程略有不同):

/flask-tutorial
├── flaskr/
│   ├── __init__.py
│   ├── db.py
│   ├── schema.sql
│   ├── templates/
│   ├── static/
│   └── my_package/
│       ├── __init__.py (this file is empty)
│       ├── auth.py
│       ├── backend.py
│       ├── blog.py
│       └── user.py
├── venv/
├── .env
├── .flaskenv
├── setup.py
└── MANIFEST.in

在文件/flask tutorial/flaskr/init.py中,我尝试调用包含我的蓝图的模块:

from my_package import backend
from my_package import auth
from my_package import user
from my_package import blog

backend.bp.register_blueprint(auth.bp)
backend.bp.register_blueprint(user.bp)
backend.bp.register_blueprint(blog.bp)

app.register_blueprint(backend.bp)

当我运行应用程序(使用flask run命令)时,控制台会告诉我ModuleNotFoundError: No module named 'my_package',表明问题出在我的_包导入后端所在的行中

我如何尝试解决问题(未成功)。

首先。我在“我的包”中创建了一个名为init.py的空文件

第二。在文件/flask tutorial/flaskr/init.py中,在中出现问题的之前,我已经放置了:

import os.path
import sys
parent = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, parent)

在互联网上有好几篇文章也有同样的问题。他们中的许多人提到解决方案是在包中放入一个init.py文件(我已经这样做了,它对我不起作用)。此外,不幸的是,有关项目的结构与我的不同

有没有办法解决这个问题


1条回答
网友
1楼 · 发布于 2024-05-19 13:07:47

将代码更改为

from .my_package import backend
from .my_package import auth
from .my_package import user
from .my_package import blog

backend.bp.register_blueprint(auth.bp)
backend.bp.register_blueprint(user.bp)
backend.bp.register_blueprint(blog.bp)

app.register_blueprint(backend.bp)

只需在包名之前添加一个点.,即可将包导入同一父包中。在您的例子中,__init__.pymy_package有一个公共的flaskr作为它们的父包

相关问题 更多 >