gpt4 book ai didi

模块中的 Python 绝对导入失败

转载 作者:太空狗 更新时间:2023-10-30 00:46:31 25 4
gpt4 key购买 nike

我有一个看起来像这样的项目:

my_project/
__init__.py -- empty
run.py
datacheck/
__init__.py -- empty
datacheck.py -- containing class DataCheck(object)
config.py -- containing BusinessConfig(object)
business.py -- containing class BusinessCheck(DataCheck)

我的 PYTHONPATH 配置为在其中包含/my_project。

在 run.py 中,我有以下代码:

from datacheck.business import BusinessCheck
business = BusinessCheck()
business.check_data()

在 business.py 中,我有以下导入失败:

from datacheck.config import BusinessConfig
from datacheck.datacheck import DataCheck

from .config import BusinessConfig 这样的相对导入是可行的——但是我在很多线程中读到,绝对导入是首选。

为了做一个简单的测试,我还创建了以下内容:

myproject/
__init__.py -- empty
run_test.py
test/
__init__.py -- empty
test1.py -- containing class Test1(object)
test2.py -- containing class Test2(Test1)

run_test.py 导入并运行 Test2 类,这没有失败。

这让我有点吃惊,我不明白为什么我在 datacheck 中的绝对导入不起作用 - 谁能解释一下?

最佳答案

如果您的模块可以用作 __main__,您应该更喜欢绝对导入,如 documentation 中所述。 .如果不是,相对进口没问题。

这些导入失败,因为您的包 datacheck 包含一个模块 datacheck(同名)。查找名称时,Python 首先隐式地查找包内部。在那里,它找到了模块 datacheck。但是,此模块不包含名称为 config 的任何内容,因此导入失败。

如果你想使用绝对导入,将模块 datacheck 中的所有内容移动到包的 __init__.py 中,或重命名它。

关于模块中的 Python 绝对导入失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8149811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com