何时使用绝对导入

2024-06-23 02:58:20 发布

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

我正在更改一堆旧的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

Tags: 模块代码pyimport名称packageinit语句
1条回答
网友
1楼 · 发布于 2024-06-23 02:58:20

事实证明,相对进口是一个非常糟糕的主意,尽管长期以来它们都是默认行为。你可以在这个网站上找到很多问题,有人只是用一个内置模块命名他们的文件,然后用奇怪的错误消息破坏他们的应用程序。

这就是为什么通过在任何地方(包括包)引用项目来执行绝对导入总是一件好事。

简而言之,使用这种风格:

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

引自PEP8

Relative imports for intra-package imports are highly discouraged. Always use the absolute package path for all imports. Even now that PEP 328 is fully implemented in Python 2.5, its style of explicit relative imports is actively discouraged; absolute imports are more portable and usually more readable.

相关问题 更多 >

    热门问题