ImportError:尝试在没有已知父包的情况下进行相对导入(Python 3)

Posted

技术标签:

【中文标题】ImportError:尝试在没有已知父包的情况下进行相对导入(Python 3)【英文标题】:ImportError: attempted relative import with no known parent package (Python 3) 【发布时间】:2021-10-31 15:58:16 【问题描述】:

这是一个已经被多次提出的问题,相信我,我已经花费了大量时间来研究大量接受和推荐的解决方案,以及 OP 面临这一挑战的场景。

我也为此投入了一些阅读python documentation 的内容,但此时我感到非常迷茫。这是我正在做的事情:

这是我的目录结构:

├── api
│   ├── db_setup
│   │   ├── db_connect.py
│   │   ├── __init__.py
│   │   └── model.py
│   ├── __init__.py
│   └── routes
│       ├── __init__.py
│       └── routes.py

我只需要将db_connect.py 导入 routes.py

如您所见,包括父目录在内的所有目录中都有__init__.py 文件(大多数答案中建议)。

这就是我尝试在routes.py 文件中导入的方式:

from flask import Flask
from ..db_setup import db_connect

app = Flask(__name__)
db = db_connect.start_database()


if __name__ == '__main__':
    app.debug = True
    app.run(host='localhost', port=8000)

这是我一夜之间一直在努力的错误

ImportError: attempted relative import with no known parent package

请注意,我所有的 __init__.py 文件都是空白

感谢您对我到底做错了什么提供帮助和指导。 谢谢。

【问题讨论】:

【参考方案1】:

我在相对进口方面也遇到了很多麻烦。仅当在 routes 文件夹内执行 routes.py 时,以下内容才适用于我。如果你不能这样做,也许你必须将你当前的工作目录更改为带有os.chwd("PATH") 或类似名称的路由文件夹:

import sys
sys.path.append("..")
from db_setup import db_connect

db_connect.some_function()

【讨论】:

【参考方案2】:

我想你的意思是:

import sys
sys.path.append(os.path.abspath('../db_setup'))
import db_connect

【讨论】:

您好@U12-Forward 感谢您的回答。在我上面的结构中,db_setup 是文件夹的名称,db_connect 是我需要的文件。 我试过了,这是我现在得到的:File ".../api/routes/routes.py", line 2, in module> from db_setup import db_connect ModuleNotFoundError: No module named 'db_setup' 在哪里进行编辑?我已将您建议的代码添加到 routes.py 中,但仍然出现相同的错误。这是我的文件的链接:link @Anthony 将 from db_setup import db_connect 更改为简单的 import db_connect @ U12-Forward 它似乎也不起作用。 Take a look:

以上是关于ImportError:尝试在没有已知父包的情况下进行相对导入(Python 3)的主要内容,如果未能解决你的问题,请参考以下文章

尝试在没有已知父包的情况下进行相对导入

Python错误-ImportError:尝试使用没有已知父包的相对导入[重复]

如何修复相对导入错误:“没有已知的父包”?

ImportError:没有名为包的模块

Django,将模型类导入新文件。导入错误尝试在没有已知父项的情况下进行相对导入

R语言使用pwr包的pwr.2p.test函数(两个分组样本相同)对两个比例对比分析进行效用分析(power analysis)在已知效应量显著性水平效用值的情况下计算需要的样本量