我正在尝试从父文件夹导入。文件夹结构为(忽略名称)
experiments
__init__.py
poppy.py
ostepop
__ init__.py
importio.py
nopop
__ init__.py
loggio.py
我尝试将__init__.py
添加到每个文件夹,但没有任何效果
import experiments.ostepop.loggio
给出错误消息:
ModuleNotFoundError: No module named 'experiments'
和from ..experiments import poppy
给出
ImportError: attempted relative import with no known parent package
有关于如何从importio.py导入poppy.py或loggio.py的提示吗
他们已经有很多帖子了,但对我来说这仍然是一件棘手的事情
所以,尽管我仍然不确定什么是最佳实践,但无论如何,这里是我如何处理这个问题的
在要进行导入的模块中,添加
sys.path[0]
是模块的绝对路径,不带文件名。当模块是和不是顶级脚本时,它都可以工作。如果您不知道什么是顶级脚本以及它与导入机制的关系如何,read thisos.path.join
可能用于处理系统差异。无论如何,os.path.join(sys.path[0], '..')
将指向父路径sys.path.append
将父路径添加到搜索空间因此,在您的例子中,将前面的代码添加到
importio.py
,然后您就可以执行以下操作了在
importio.py
中也是如此__init__.py
在该解决方案中根本不使用。你可以删除它们。 但我见过许多回购协议使用__init__.py
。因此,最佳实践可能包括使用它们如果我理解正确,您希望从
importio.py
导入poppy.py
并使用文件模型进行调试。在此模型下,Python解释器不会将其视为一个包,因此此代码(import experiments.ostepop.loggio
和from ..experiments import poppy
)无效要解决此问题,可以使用包模型调试此脚本,这意味着在终端中运行
python -m experiments
。它可能运行正常相关问题 更多 >
编程相关推荐