上下文。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文件(我已经这样做了,它对我不起作用)。此外,不幸的是,有关项目的结构与我的不同
有没有办法解决这个问题
将代码更改为
只需在包名之前添加一个点
.
,即可将包导入同一父包中。在您的例子中,__init__.py
和my_package
有一个公共的flaskr
作为它们的父包相关问题 更多 >
编程相关推荐