【发布时间】:2018-11-05 12:10:02
【问题描述】:
在我的 git 存储库的顶层,我有以下文件结构:
miscellaneous Dockerfiles, readme, etc
Code/
training.py
data/
generate.py
tasksets.py
当我将tasksets 模块作为脚本运行时,有时我想从tasksets 模块中导入generate 模块,因此tasksets 包含以下导入:
import generate
其他时候我想从training 模块中导入tasksets 模块,所以training 包含以下导入:
import tasksets
但是,这个设置给我带来了问题。当我将tasksets 作为脚本运行时,tasksets 可以很好地导入generate,但是如果我在training 中导入tasksets,则当我将training 作为脚本运行时会引发错误(我认为因为training 可以'在默认路径中找不到 generate 作为脚本)。我尝试使用 __init__.py 文件、相对导入等查看各种其他 StackOverflow 问题和答案。目前,我的解决方法是在 tasksets 中使用以下行:
if __name__ == "__main__": import generate
else: from data import generate
但这感觉不对(而且我的 IDE 也不喜欢它)。请有人解释一下如何使用正确的__init__.py 文件分类和导入语句,以便我可以在将tasksets 作为脚本运行时导入generate,并在将training 作为脚本运行时导入tasksets?
【问题讨论】:
-
您不能在
data/目录中放置一个空的__init__.py。然后你可以在training.py中写from data import generate,在tasksets.py中你有from . import generate。这可能是一个解决方案吗? -
@be-ndee 我刚试过这个。我用
from . import generate替换了tasksets.py中的解决方法,在data/目录中添加了空的__init__.py文件,并将tasksets作为脚本运行,得到以下错误:ImportError: cannot import name 'generate'
标签: python python-3.x import module package