[英]Python absolute import in module fails
我有一个看起来像这样的项目:
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__
,则应该更喜欢绝对导入,如文档中所述。 如果没有,相对进口是好的。
这些导入失败,因为您的包datacheck
包含模块datacheck
(同名)。 查找名称时,Python首先隐式查看包内部。 在那里,它找到了模块datacheck
。 但是,此模块不包含名称为config
任何内容,因此导入失败。
如果要使用绝对导入,请将模块datacheck
所有内容移动到包的__init__.py
中,或重命名它。
我知道这是多年以后,但为了其他人在这里搜索,我能够用这段代码解决类似的问题:
from __future__ import absolute_import
在那之后,绝对导入在Python 2.6和2.7中运行良好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.