假设有一些众所周知的(第三方)Python包a
,它取决于另一个众所周知的包b
(例如imageio
和numpy
,分别)。两者都可以通过pip获得。
现在假设我自己的代码明确同时使用a
和b
。软件包版本已在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()
...
答案 0 :(得分:3)
您应始终明确管理 的直接依赖关系,而不是依赖于第三方软件包的内部实现细节。这些可能会随着未来的更新而改变(除非第三方软件包明确声明它暴露了某些特定软件包)并且您的代码将会中断。如果您依赖于包b
,请将其明确地放入您的requirements.txt 和 import b
。
答案 1 :(得分:0)
Python社区的一个格言是:" flat比嵌套好。"出于这个原因,我不喜欢选项2.它不太可读。此外,如果程序包A应该改变它组织命名空间的方式,则选项2可能会中断。
选项1和3在代码主体内读取相同,因此我无法在它们之间进行选择。