在我的Git仓库的顶层目录下,我有以下文件结构:
miscellaneous Dockerfiles, readme, etc
Code/
training.py
data/
generate.py
tasksets.py
有时候我想在任务集模块中运行任务集脚本时,从
tasksets
模块中导入generate
模块,所以tasksets
会包含以下导入操作:import generate
有时候我想从training
模块中导入tasksets
模块,因此training
模块包含以下导入:
import tasksets
然而,这个设置给我带来了问题。
tasksets
可以在我将其作为脚本运行时成功导入generate
,但如果我在运行training
作为脚本时在training
中导入tasksets
会出现错误(我认为是因为training
无法在默认路径中找到generate
作为脚本)。我尝试查看各种其他StackOverflow问题和答案,使用__init__.py
文件、相对导入等。目前,我的解决方法是在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
。这可能是一个解决方案吗? - user4923309tasksets.py
中用from . import generate
替换了我的解决方法,将空的__init__.py
文件添加到data/
目录中,并将tasksets
作为脚本运行,结果出现以下错误:ImportError: cannot import name 'generate'
。 - Jake Levi