计算活动Python eggs之间的依赖图。
项目描述
tt.eggdeps
eggdeps工具报告工作集中eggs之间的依赖关系。依赖关系被递归考虑,创建一个有向图。此图以纯文本或作为graphviz工具的输入文件打印到标准输出。
用法
eggdeps [选项] [规范]
规范必须遵循由pkg_resources定义的Python包分布规范的常用语法。
如果提供了任何规范,则相应的分发包将组成依赖图的根,并且图将限制在它们的依赖关系上。
如果没有提供规范,则图将映射工作集中所有eggs之间可能存在的依赖关系,其根将是不属于任何其他分发包依赖关系的分发包。
选项
- -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 环境中的分发。
如果需要根据这些规范计算图,并非所有必需的分发都在工作集中,则输出中将标记缺失的分发,并且无法确定它们的依赖项。如果任何分发在命令行上指定或在任何其他分发中需要,但与指定的要求不兼容的版本在工作集中,则也会发生这种情况。
图构建策略
依赖图可以按照两种策略之一构建
- 分析整个工作集::
节点正好对应于工作集中的分发。包括所有可能的活动分发之间的依赖关系的边,但只有当所需的分发在正确的版本上时才包括这些边。图中的根对应于没有其他活动分发依赖的分发。
- 从一个或多个 eggs 开始::
节点包括由指定的分发和额外依赖项依赖的所有包以及它们的深层依赖项。它们可能仅覆盖工作集的一部分,以及包括不是在所需版本上激活或根本未激活的分发的节点(因此无法跟踪它们的依赖项)。图中的根对应于指定的分发。
在构建图的过程中会丢失一些信息。
如果一个依赖项既是强制性的,又是通过一个或多个额外项产生的,它将被记录为一个普通的强制性依赖项。
如果一个安装了额外项的发行版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) *
- 括号 []:
如果一个节点的某些依赖项仅由于额外需求而产生,那些额外项的名称将打印在其依赖项上方的大括号中,相对于需要它们的节点半缩进。
- 省略号 …:
如果一个节点具有进一步依赖项出现在图中多个位置,则子图只打印一次,其他出现用省略号标记。打印子图的位置选择如下
如果可能,额外依赖项尽可能晚地在路径中出现
首选浅层嵌套
首选字母表中较早期的路径。
- 括号 ():
如果发行版不在工作集中,其名称将被括在括号中。
- 星号 *:
死胡同用星号标记。
dot 文件输出
在 dot 图形中,节点和边不使用文本注释,而是使用颜色。
这些是节点的颜色代码,在多个颜色适用的情况下,后续的颜色会覆盖先前的颜色
- 绿色:
与图根对应的节点。
- 黄色:
任何根节点的直接依赖项,无论是强制性还是通过额外项。
- 浅灰色:
死胡同。
- 红色:
安装的节点版本与某些需求不兼容,或者根本没有安装。
边缘颜色
- 黑色:
强制依赖项。
- 浅灰色:
额外依赖项。
除了用颜色突出显示外,根节点及其直接依赖项可能会成群。 eggdeps 尝试将每个根节点放入其自己的群组中。然而,如果两个或多个根节点共享任何直接依赖项,它们也将共享一个群组。
需求列表
图中包含的所有分发版都可以输出为 Python 的需求规范列表的表示形式,可以是
列出裸包名,
包括在工作集中出现的确切版本,或
指定考虑了所讨论分发版的所有版本需求(但暂时完全不考虑额外需求)的复杂版本要求。复杂版本要求始终需要至少在工作集中出现的版本,假设我们无法知道旧版本的版本要求,但合理地假设需求可能会在未来版本中保持不变。
该列表按分发版名称按字母顺序排序。
关于 tt.eggdeps
- 分叉维护者:
- 原始作者:
- 网页主页:
- 在线文档:
- PyPI 页面:
- Git 主页:
git@github.com:goodtune/tt.eggdeps.git
- Git 网页查看:
- 当前变更日志:
https://svn.thomas-lotze.de/repos/public/tl.eggdeps/trunk/CHANGES.txt
项目详情
tt.eggdeps-0.5.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4faf3a744b1d71854dc2b9df7308703a3c19f861626c0783343304cb7ebd5fec |
|
MD5 | 9dfd43599a820184fc62f955383ca2d3 |
|
BLAKE2b-256 | 0f4ac414ea100670453f66e5857c9b8c741ff7d8b15cad39ff02983438334d19 |