如何在python中从父目录导入?

2024-05-18 23:31:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从父文件夹导入。文件夹结构为(忽略名称)

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的提示吗


Tags: pyimport文件夹名称消息init错误结构
2条回答

他们已经有很多帖子了,但对我来说这仍然是一件棘手的事情

所以,尽管我仍然不确定什么是最佳实践,但无论如何,这里是我如何处理这个问题的

在要进行导入的模块中,添加

import sys
import os
sys.path.append(os.path.join(sys.path[0], '..'))

sys.path[0]是模块的绝对路径,不带文件名。当模块是和不是顶级脚本时,它都可以工作。如果您不知道什么是顶级脚本以及它与导入机制的关系如何,read this

os.path.join可能用于处理系统差异。无论如何,os.path.join(sys.path[0], '..')将指向父路径

sys.path.append将父路径添加到搜索空间

因此,在您的例子中,将前面的代码添加到importio.py,然后您就可以执行以下操作了

from nopop import loggio
import poppy

importio.py中也是如此

__init__.py在该解决方案中根本不使用。你可以删除它们。 但我见过许多回购协议使用__init__.py。因此,最佳实践可能包括使用它们

如果我理解正确,您希望从importio.py导入poppy.py并使用文件模型进行调试。在此模型下,Python解释器不会将其视为一个包,因此此代码(import experiments.ostepop.loggiofrom ..experiments import poppy)无效

要解决此问题,可以使用包模型调试此脚本,这意味着在终端中运行python -m experiments。它可能运行正常

相关问题 更多 >

    热门问题