語境。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',表明問題出在它來自 my_package 匯入后端的行中。
我如何嘗試解決問題(未成功)。
第一的。我在“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 檔案(我已經這樣做了,但對我不起作用)。此外,不幸的是,所討論專案的結構與我的不同。
任何想法如何解決這一問題?
uj5u.com熱心網友回復:
將您的代碼更改為
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__.py并my_package有一個共同的flaskr作為他們的父包。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/325165.html
