【问题标题】:How to call a module inside a package in Python with Flask?如何使用 Flask 在 Python 中调用包内的模块?
【发布时间】:2021-12-04 14:33:31
【问题描述】:

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

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

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

我在做什么。

我正在关注官方的 Flask 教程https://flask.palletsprojects.com/en/2.0.x/tutorial/index.html。因此,项目的结构基本上是这样的(与教程略有不同):

/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',表明问题出在 from my_package import backend 所在的行。

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

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

第二。在文件 /flask-tutorial/flaskr/init.py 中,在有问题的 FROM 之前,我放了:

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

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

任何想法如何解决这个问题?

【问题讨论】:

    标签: python python-3.x flask


    【解决方案1】:

    将您的代码更改为

    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 作为它们的父包。

    【讨论】:

    • 啊,谢谢!它有效!
    猜你喜欢
    • 2012-02-01
    • 2019-01-26
    • 1970-01-01
    • 2019-10-28
    • 2020-05-06
    • 2021-09-16
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多