python相对导入模块失败

2024-04-26 03:40:10 发布

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

我的文件结构如下:

root/
    v1/
    __init__.py
    example_1.py
    script/
        __init__.py
        classification.py
        prediction.py
        example2.py

分类如下:

#classification.py    
print(__name__)
from .prediction import predict_func
def func1():
    predict_func()

这很好,例如1.py,看起来像这样

#example1.py
from script.classification import func1
func1()

但是像下面这样从example2.py导入分类将失败

#example2.py
from classification import func1
func1()    

因为在example2.py场景中,分类中的__name__将只是classification,而不是example1.py中的script.classification,因此这里没有父节点,因此导入模块失败。你知道吗

我知道解决方案之一是将脚本目录添加到系统路径在example1.py和example2.py中,并在classificationo中使用from prediction import predict_func。这在example1.py和example2.py中都适用,但是这是一个好方法吗?还有其他替代方法吗?你知道吗


Tags: 方法namefrompyimportinit分类script
1条回答
网友
1楼 · 发布于 2024-04-26 03:40:10

因为example_1.pyroot目录中,所以我认为root是项目的源根。因此,这个目录必须出现在Python路径中,即:sys.path。你知道吗

而且,root下的每个目录都应该是一个Python包。因此,script必须有一个__init__.py文件(通常为空)。你知道吗

您应该看看关于Modules的官方Python教程。你知道吗

编辑

在下面的第二个示例中,您尝试将分类作为根包导入,但实际上不是。你知道吗

# example2.py
from classification import func1
func1()

要解决此问题,您需要使用相对导入或完整包名称:

# example2.py
from script.classification import func1
func1()

当然,要运行您的示例,您需要执行以下操作:

python -m script.example2

相关问题 更多 >