当前位置: 首页 > 知识库问答 >
问题:

导入错误: 尝试相对导入,但没有已知的父包 [重复]

东方新霁
2023-03-14

我正在学习用python编程,我在从包中的模块导入时遇到了问题。我使用的是Visual studio代码和Python 3.8.2 64位。

我的项目目录

.vscode
├── ecommerce
│   ├── __init__.py
│   ├── database.py
│   ├── products.py
│   └── payments
│       ├── __init__.py
│       ├── authorizenet.py
│       └── paypal.py
├── __init__.py
└── main.py

在<code>电子商务/产品中。py文件我有:

#products.py
from .database import Database
p = Database(3,2)

这样我就可以从< code > ecommerce/Database . py 文件中导入< code>Database类。但是我出错了

ImportError : Attempted relative import with no known parent package

共有3个答案

康泽宇
2023-03-14

我在 Windows 上遇到了类似的问题,对我有帮助的是(适应您的目录):

# local imports
import sys
sys.path.append(r"C:\path\to\your\project")

from ecommerce.database import Database
段超
2023-03-14

由于您使用的是Python 3.8版本,因此导入的工作方式略有不同,但我认为这应该有效:

使用任一:

from database import Database
#Database is the class

或尝试:

import database.Database

最后,这个是非常安全的,可能是最佳实践:

from . import Database  
# The '.' (dot) means from within the same directory as this __init__.py module grab the Database class.
岳玉书
2023-03-14

从Python文档和实验来看,相对导入(涉及.,… etc)似乎仅在以下情况下才有效

  1. 导入模块具有除 __main__ 之外的__name__,此外,
  2. 导入模块的__name__是pkg.module_name,即它必须从目录层次结构中的上方导入(才能将父 pkg 作为其__name__的一部分。

运筹学

正在通过模块语法指定导入模块,该模块语法包括父pkg,如< code>python -m pkg.module,在这种情况下,它的< code>__name__仍然是< code>__main__,因此它作为脚本运行,但相对导入将起作用。这里设置了< code>__package__,用于查找父包,而< code>__name__是< code > _ _ main _ _ ;更多在这里。

[毕竟,__package__sys.path似乎是确定相关导入是否/如何工作的关键。 表示脚本或模块(即 __package__指示相对导入发生在包中的位置,并且 __package __的顶部需要位于 ]中

因此,继续@AmitTendulkar的示例,如果您将其作为运行

但是如果你

这是有益的补充

print("In module products __package__, __name__ ==", __package__, __name__)

等等。

更新:

导入的工作方式取决于 sys.path__package__,而不是__name__。发布自 /home/jj

<代码>

添加

import sys    
print("In module products sys.path[0], __package__ ==", sys.path[0], __package__)

等等。

 类似资料:
  • 我正在学习使用python编程,并且我在从包中的模块导入时遇到问题。我正在使用Python 3.8.2 64位的Visual Studio代码。 我的项目目录 在电子商务/产品中。py我拥有的文件: 这样我就可以从电子商务/数据库导入数据库类。py文件。但我有个错误

  • 我一直在努力与Python上的相对导入。 我的项目结构是这样的: 我想先将一组函数从位于

  • 我正在学习fastapi。我有这样一个非常简单的项目结构 内部

  • 根据一些答案,我试图更具体一些。我想在我的main中导入打印、模型和代码。派克 我知道这个问题被问了很多,但是我仍然不知道我的代码有什么问题!我有一个这样的项目目录 我想导入从print.py和*从请求因此,我试图添加这些行在main.py 所有这些行都会导致相同的导入,即在没有已知父项的情况下尝试相对导入, 使用Python 39有人知道问题出在哪里吗?我很困惑,这似乎不起作用,在旧版本中可能吗

  • 我有以下目录结构: 火车和实用工具都有 init.py。我正在尝试从火车/主要内部导入utils.logger.py: 但它给出了“未知的父包错误”: 文件"训练/main.py",第4行,从...utils.logger导入记录器重要性错误:尝试相对导入没有已知的父包

  • 因此,我的文件/文件夹结构如下: 在内部,我试图使用以下语法导入:。 我使用的是VSCode,当我键入模块路径时,它甚至会自动完成。但是当我运行文件时,标题中出现了错误。 我在这里读了几十个关于堆栈溢出的答案,但是没有一个使用这样的例子。