从 Python 中的其他包导入包是个好主意吗?

Is it a good idea to import packages from other packages in Python?

假设有一些知名的(第三方)Python 包 a,它依赖于另一个知名的包 b(例如 imageionumpy,分别)。两者都可以通过 pip 获得。

现在假设我自己的代码明确使用了 ab。包版本在我的 requirements.txt.

中是固定的

我看到了一些用于导入和使用这些包的选项,如下所述。对我来说,选项 2 和 3 看起来最干净,因为它们似乎减少了我需要管理的依赖项的数量显式

从依赖管理的角度来看,是否有导入这些包的首选方法?还是只是风格问题?

选项 1:

import a
import b
...
a.something()
b.something_else()
...

选项 2:

import a  # which imports b
...
a.something()
a.b.something_else()
...

选项 3:

import a
from a import b
...
a.something()
b.something_else()
...

p.s。以下问题似乎相关但未提供答案:1, 2, 3, 4

Python 社区的格言是:"flat is better than nested." 因此,我不喜欢选项 2。它的可读性较差。此外,如果包 A 应该改变其命名空间的组织方式,选项 2 可能会中断。

选项 1 和 3 在代码主体中读起来完全相同,所以我很难在它们之间做出选择。

您应该始终显式管理您的直接依赖关系,而不是依赖于第 3 方包的内部实现细节。这些可能会随着未来的更新而改变(除非第 3 方包明确声明它公开了某些特定包)并且您的代码将会中断。如果您依赖包 b,请将其显式放入您的 requirements.txt import b