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

时间:2017-09-20 09:02:37

标签: python python-import

假设有一些众所周知的(第三方)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。以下问题似乎相关但未提供答案:1234

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

Python社区的一个格言是:" flat比嵌套好。"出于这个原因,我不喜欢选项2.它不太可读。此外,如果程序包A应该改变它组织命名空间的方式,则选项2可能会中断。

选项1和3在代码主体内读取相同,因此我无法在它们之间进行选择。