计算活动Python eggs之间的依赖关系图。
项目描述
tl.eggdeps
eggdeps工具报告工作集中egg之间的依赖关系。依赖关系递归考虑,创建有向图。此图以纯文本形式或作为graphviz工具的输入文件打印到标准输出。
用法
eggdeps [选项] [规范]
规范必须遵循由pkg_resources定义的指定Python包分布的常用语法。
如果提供了任何规范,相应的分布将构成依赖图的根,并且图将限制为它们的依赖项。
如果没有提供规范,图将映射工作集中所有egg之间可能存在的依赖关系,其根将为不是任何其他分布的依赖项的分布。
选项
- -h, --help
显示此帮助信息并退出
- -i IGNORE,--ignore=IGNORE
要忽略的项目名称
- -I RE_IGNORE,--re-ignore=RE_IGNORE
要忽略的项目名称的正则表达式
- -e DEAD_ENDS,--dead-end=DEAD_ENDS
要忽略依赖的项目名称
- -E RE_DEAD_ENDS,--re-dead-end=RE_DEAD_ENDS
要忽略依赖的项目名称的正则表达式
- -x,--no-extras
始终忽略额外的依赖
-n, –version-numbers 打印活动分发的版本号
- -1,--once
在纯文本输出中,每个分发只包含一次
- -t,--terse
在纯文本输出中,省略未打印分发的任何提示,例如省略号
- -d,--dot
生成点图
- -c,--cluster
在点图中,对每个根分发的直接依赖进行聚类
- -r,--requirements
生成需求列表
- -s,--version-specs
在需求列表中,打印最宽松的版本规范
选项 -i、-I、-e 和 -E 可多次出现。
如果同时提供了选项 -d 和 -r,则最后一个列表的选项有效。当打印需求列表时,-v 比 -s 更有效。
脚本入口点识别所有选项的默认值,变量名是长选项名,其中任何连字符都被下划线替换(除 --no-extras 之外,它转换为设置 extras=False)。这允许使用构建配置中 egg 菜谱的 arguments 选项来设置默认值,例如。
详细信息
eggdeps 的目标是计算一个有向依赖图,图中节点代表工作集的 egg 分发,边代表 egg 之间的强制或额外依赖。
工作集
eggdeps 操作的工作集由运行 Python 解释器的 egg 分发定义。例如,这些可能是 easy_install 激活的分发或在 zc.buildout 环境中安装的分发。
如果计算图需要满足的规范不是工作集中所有必需的分发,输出中将标记缺失的分发,并且无法确定其依赖关系。如果任何分发(无论是命令行中指定的还是由任何其他分发要求的)在工作集中可用,但与指定的要求版本不兼容,也会发生相同的情况。
图构建策略
依赖图可以按照以下两种策略之一构建:
- 分析整个工作集:
节点与工作集的分布完全对应。包括所有可能的活动分布之间的依赖关系,但仅当所需的分布处于正确的版本时。图根对应于那些没有其他活动分布依赖的分布。
- 从一个或多个鸡蛋:
节点包括指定分布和额外依赖的所有依赖包,以及它们的深层依赖。它们可能仅覆盖工作集的一部分,也可能包括不活动或不在所需版本上的分布的节点(因此无法追踪其依赖)。图根对应于指定分布。
构建图时可能会丢失一些信息。
如果某个依赖既是强制性的,又是通过一个或多个额外依赖产生的,它将被记录为一个简单的强制依赖。
如果一个包含已安装额外功能的分布A是多个其他分布的依赖项,它们都会显示为依赖于A及其所有所需额外功能,即使它们各自可能一个都不需要或只需要少数几个。
简化图
为了简化一个可能很大且复杂的依赖图,可以省略某些节点和边。
- 忽略的节点:
节点可以通过精确名称或正则表达式匹配完全忽略。如果一个非常基本的分布是许多其他依赖项的依赖项,这很有用。例如,可能是 setuptools。
- 死胡同:
可以通过精确名称或正则表达式匹配声明分布为死胡同。死胡同包含在图中,但它们自己的依赖项将被忽略。这允许除了它们的“入口点”之外,将大型分布子系统抹去。例如,在 zope.* 包的上下文中,可以声明 zope.app.* 为死胡同。
- 无额外功能:
可以完全关闭报告和跟踪额外依赖项。当分析工作集而不是指定分布的依赖项时,这可能最有意义。
输出
eggdeps可以通过两种方式输出计算的依赖图:纯文本(默认)和要输入到graphviz工具的dot文件。
纯文本输出
图被打印到标准输出,基本上每行一个节点,根据嵌套深度缩进,并在适当的位置注解。每个节点的依赖关系按以下标准排序
强制依赖关系在额外需求之前打印。
每个额外需求集的依赖关系分组,组按额外需求的名称字母顺序排序。
所有强制依赖关系或通过同一组额外需求产生的依赖关系按名称字母顺序排序。
作为一个说明性的例子,以下依赖图是针对两个Zope包计算的,其中一个包需要带有“测试”额外功能的依赖,该依赖依赖于一个未安装的egg,并应用了一些图简化
zope.annotation zope.app.container * zope.component zope.deferredimport zope.proxy zope.deprecation zope.event zope.dublincore zope.annotation ... [test] (zope.app.testing) *
- 括号 []:
如果一个或多个节点的依赖项仅由额外需求引起,那些额外需求的名称将打印在它们的依赖项上方,相对于需要它们的节点半缩进。
- 省略号 …:
如果一个节点具有进一步依赖项,并在图中出现多个位置,则仅打印子图一次,其他出现位置用省略号标记。子图打印的位置选择如下
如果可能,额外依赖关系尽可能晚地在路径中出现,
浅层嵌套优先,
路径早期在字母表中优先。
- 括号 ():
如果某个分布不在工作集中,则其名称被括号括起来。
- 星号 *:
死胡同用星号标记。
点文件输出
在点图形中,节点和边不标注文字,而是着色。
以下是节点颜色代码,后续的会覆盖先前的,在需要多个颜色的情况下
- 绿色:
与图根相对应的节点。
- 黄色:
任何根节点的直接依赖项,无论是强制性的还是额外的。
- 浅灰色:
死胡同。
- 红色:
与某些要求不兼容的版本安装的蛋或根本未安装的节点。
边颜色
- 黑色:
强制依赖项。
- 浅灰色:
额外依赖项。
除了用颜色突出显示外,根节点及其直接依赖项可能还会成簇。 eggdeps 尝试将每个根节点放入自己的簇中。但是,如果有两个或更多的根节点共享任何直接依赖项,它们也将共享一个簇。
需求列表
图中包含的所有分布都可以输出为要求规范列表的 Python 表示形式,可以是
列出纯包名,
包括它们在工作集中出现的确切版本,或者
指定复杂的版本要求,这些要求考虑了针对所讨论分布提出的所有版本要求(但暂时完全不考虑额外要求)。复杂的版本要求始终需要工作集中出现的版本,假设我们无法知道旧版本的版本要求,但合理地假设要求可能会在未来版本中保持不变。
列表按分布名称按字母顺序排序。
关于 tl.eggdeps
项目详细信息
tl.eggdeps-1.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a094ed7961a3dd38fcaaa69cf7a58670038acdff186360166d9e3d964b7a7323 |
|
MD5 | d903accd2c6f765da98b9a265ef7f1ba |
|
BLAKE2b-256 | f989503b44f14ff470ed715bb3d4bec8532556a6451126c05e786c5a4af7b0eb |