何时使用绝对导入

发布于 2021-01-29 17:48:44

我正在更改一堆旧的python代码,这些代码偶尔会在程序包之间发生名称冲突。我有一个问题,什么时候应该使用绝对导入,以及仅通过名称导入同级模块是否合适。

/package/
/package/__init__.py
/package/subA
/package/subA/__init__.py
/package/subA/moduleA.py
/package/subA/moduleB.py
/package/subB
/package/subB/__init__.py
/package/subB/moduleA.py
/package/subB/moduleB.py

包中的每个import语句应如下所示:

import package.subX.moduleX

要么

from package.subX import moduleX

那么在子包__init__.py文件中。简单地放一下会不会错

import moduleA
import moduleB

或者,在/package/subA/moduleA.py中,简单地输入以下内容是否会出错:

import moduleB
关注者
0
被浏览
53
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    尽管相对导入很长时间以来都是默认行为,但事实证明这是一个非常糟糕的主意。您可以在此站点上找到很多问题,其中有人只是用内置模块命名文件,并用奇怪的错误消息破坏了他们的应用程序。

    这就是为什么通过在 各处 引用您的项目(包括程序包)来进行绝对导入始终是一件好事的原因。

    简而言之,请使用以下样式:

    import myproject.mypackage
    from myproject.mypackage.myfile import MyClass
    

    PEP8引用:

    强烈建议不要将相对进口用于包装内进口。始终对所有导入使用绝对包路径。即使现在PEP
    328
    已在Python
    2.5中完全实现,仍不鼓励使用其显式相对导入的样式。绝对导入更具可移植性,通常更具可读性。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看