显示模块依赖关系
项目描述
Python模块依赖可视化。
此软件包主要用于通过pydeps命令从命令行使用。
功能请求和错误报告
请在GitHub上报告错误和功能请求:https://github.com/thebjorn/pydeps/issues
如何安装
pip install pydeps
要使用pydeps创建图表,还需要安装Graphviz。请按照Graphviz链接中提供的安装说明进行操作(并确保dot命令在您的路径上)。
用法
usage: pydeps [-h] [--debug] [--config FILE] [--no-config] [--version] [-L LOG] [--find-package] [-v] [-o file] [-T FORMAT] [--display PROGRAM] [--noshow] [--show-deps] [--show-raw-deps] [--deps-output DEPS_OUT] [--show-dot] [--dot-output DOT_OUT] [--nodot] [--no-output] [--show-cycles] [--debug-mf INT] [--noise-level INT] [--max-bacon INT] [--max-module-depth INT] [--pylib] [--pylib-all] [--include-missing] [-x PATTERN [PATTERN ...]] [-xx MODULE [MODULE ...]] [--only MODULE_PATH [MODULE_PATH ...]] [--externals] [--reverse] [--rankdir {TB,BT,LR,RL}] [--cluster] [--min-cluster-size INT] [--max-cluster-size INT] [--keep-target-cluster] [--collapse-target-cluster] [--rmprefix PREFIX [PREFIX ...]] [--start-color INT] fname
- 位置参数
fname 文件名
- 可选参数
- -h,--help
显示此帮助信息并退出
- --debug
开启所有显示和详细选项(主要用于调试pydeps本身)
- --config FILE
指定配置文件
- --no-config
禁用配置文件的处理
- --version
打印pydeps版本
- -L LOG,--log LOG
将日志级别设置为CRITICAL、ERROR、WARNING、INFO、DEBUG、NOTSET之一。
- --find-package
尝试自动找到当前包的名称。
- -v, --verbose
更详细地显示 (-vv, -vvv 表示更详细的输出)
- -o 文件
将输出写入“文件”
- -T 格式
输出格式(svg|png)
- --display 程序
用于显示图表的程序(根据 T 参数决定是 png 或 svg 文件)
- --noshow, --no-show
不调用外部程序显示图表
- --show-deps
显示依赖分析的输出
- --show-raw-deps
显示在删除跳过前的依赖分析输出
- --deps-output
将依赖分析的输出写入文件(而不是屏幕)
- --show-dot
显示 dot 转换的输出
- --dot-output
将 dot 代码写入文件(而不是屏幕)
- --nodot, --no-dot
跳过 dot 转换
- --no-output
不创建 .svg/.png 文件,意味着 –no-show (-t/-o 将被忽略)
- --show-cycles
仅显示导入循环
- --debug-mf INT
将 ModuleFinder.debug 标志设置为此值
- --noise-level INT
排除度数大于噪声水平的源或汇
- --max-bacon INT
排除距离超过 n 个跳转的节点(默认=2,0 -> 无限)
- --max-module-depth INT
合并深度模块到最多 n 级
- --pylib
包含 python std lib 模块
- --pylib-all
包含 python 所有 std lib 模块(包括 C 模块)
- --include-missing
包含未安装的模块(或无法在 sys.path 中找到的模块)
- --only MODULE_PATH
仅包含以 MODULE_PATH 开头的模块,可以提供多个路径
- --externals
创建直接外部依赖的列表
- --reverse
绘制指向导入模块的箭头(而不是来自导入模块的箭头)
- --rankdir
设置图表的方向,合法的值是 TB(默认,导入模块在导入模块之上),BT(TB 的相反方向),LR(从左到右)和 RL(从右到左)
- --cluster
将外部依赖作为单独的集群绘制
- --min-cluster-size INT
依赖必须具有的最小节点数,才能被聚类(默认=0)
- --max-cluster-size INT
依赖可以具有的最大节点数,在集群折叠为单个节点之前(默认=0)
- --keep-target-cluster
将目标模块作为集群绘制
- --collapse-target-cluster
折叠目标模块(这隐含 –cluster)
- --rmprefix PREFIX
从节点显示名称中移除 PREFIX(可以提供多个前缀)
- -x 模式, --exclude 模式
要跳过的输入文件(例如 foo.*),可以提供多个模式
- --exclude-exact MODULE
(缩写 -xx MODULE) 与 –exclude 相同,但需要完全匹配。-xx foo.bar 将排除 foo.bar,但不会排除 foo.bar.blob
注意:如果提供了具有可变数量参数的选项(如 -x),则在 fname 之前提供该选项,使用 -- 将参数与文件名分开,否则 fname 将被解析为选项的参数。示例: $ pydeps -x os sys -- pydeps。
当然,您也可以从 Python 导入 pydeps 并将其作为库使用,在 tests/test_relative_imports.py 中查找示例。
示例
这是在自身上运行 pydeps 的结果(pydeps pydeps)
(完整披露:这是针对pydeps早期版本的使用说明)
注意事项
pydeps通过查找Python字节码中的导入操作码来查找导入。也就是说,只有导入的文件会被找到(即,pydeps不会检查目录中未被导入的文件)。此外,只有可以使用Python导入机制找到的文件才会被考虑(即,如果某个模块缺失或未安装,无论是否正在导入,都不会包括在内)。这可以通过使用--include-missing标志来修改。
显示图表
默认情况下,要显示生成的.svg或.png文件,pydeps会调用平台上的适当打开器,例如xdg-open foo.svg。
可以使用--display PROGRAM选项来覆盖此行为,其中PROGRAM是能够显示图表图像文件的可执行程序。
您还可以在PYDEPS_DISPLAY或BROWSER环境变量中导出此类查看器的名称,这将改变当未使用--display时默认的行为。
配置文件
所有选项也可以使用.pydeps文件中的.ini文件语法(由ConfigParser解析)来设置。命令行选项会覆盖当前目录中的.pydeps文件中的选项,这又覆盖了用户主目录中的选项(在Windows上是%USERPROFILE%\.pydeps,否则是${HOME}/.pydeps)。
一个示例.pydeps文件
[pydeps] max_bacon = 2 no_show = True verbose = 0 pylib = False exclude = os re sys collections __future__
pydeps还会在pyproject.toml(在[tool.pydeps]下)和setup.cfg(在[pydeps]下)中查找配置数据。
培根(评分)
pydeps还包含一个类似Erdős的评分函数(也称为Bacon数,来自《六度分隔》中的凯文·贝肯(《六度分隔》:http://en.wikipedia.org/wiki/Six_Degrees_of_Kevin_Bacon)),允许您过滤出距离您感兴趣的模块超过给定“跳数”的模块。这对于找到模块与外部世界接口很有用。
要找到pydeps与Python标准库的接口(除了少数非常常见的模块)。
shell> pydeps pydeps --show --max-bacon 2 --pylib -x os re types _* enum
--max-bacon 2(默认值)给出最多2步跳数的模块,并且属于一起的模块有相似的颜色。将此与--max-bacon=0(无限)过滤器的输出进行比较
导入循环
pydeps可以使用--show-cycles参数检测并显示循环。这将仅显示循环,对于大型库来说,这不是一个特别快的操作。给定以下内容的文件夹(此使用yaml定义目录结构,如测试中所示)
relimp: - __init__.py - a.py: | from . import b - b.py: | from . import a
pydeps relimp --show-cycles 显示
聚类
在pydeps 1.8.0版本上运行pydeps pydeps –max-bacon=4给出以下图表
如果您不感兴趣外部模块的内部结构,可以添加--cluster标志,这将外部模块折叠成文件夹形状的对象
shell> pydeps pydeps --max-bacon=4 --cluster
要查看内部结构并划分外部模块,请使用--max-cluster-size标志,该标志控制在折叠到文件夹图标之前,一个集群中可以有多少个节点
shell> pydeps pydeps --max-bacon=4 --cluster --max-cluster-size=1000
或,使用更小的最大集群大小
shell> pydeps pydeps --max-bacon=4 --cluster --max-cluster-size=3
为了移除节点过少的聚类,请使用 --min-cluster-size 标志
shell> pydeps pydeps --max-bacon=4 --cluster --max-cluster-size=3 --min-cluster-size=2
在某些情况下,将目标模块绘制为聚类可能会有用
shell> pydeps pydeps --max-bacon=4 --cluster --max-cluster-size=3 --min-cluster-size=2 --keep-target-cluster
并且由于聚类框包含模块名称,我们可以移除这些前缀
shell> pydeps pydeps --max-bacon=4 --cluster --max-cluster-size=3 --min-cluster-size=2 --keep-target-cluster --rmprefix pydeps. stdlib_list.
最大模块深度
对于具有超过两层模块结构的 Python 包,图形可能会变得过于复杂。使用 --max-module-depth=n 标志来检查包的内部依赖关系,同时限制模块深度(移除私有和测试相关的模块以进一步简化图形,使用 -x ...)
shell> pydeps pandas --only pandas --max-module-depth=2 -x pandas._* pandas.test* pandas.conftest
图方向
可以使用 --rankdir 标志指定图形的方向。
自上而下(默认)
shell> pydeps pydeps --rankdir TB
自下而上
shell> pydeps pydeps --rankdir BT
自左向右
shell> pydeps pydeps --rankdir LR
自右向左
shell> pydeps pydeps --rankdir RL
折叠目标包
当内部目标包依赖关系不重要时,可以使用 --collapse-target-cluster 标志将其折叠。此选项还隐含 --cluster
shell> pydeps pydeps --collapse-target-cluster
中间格式
已尝试保持中间格式可读,例如,pydeps --show-deps .. 的输出如下
... "pydeps.mf27": { "imported_by": [ "__main__", "pydeps.py2depgraph" ], "kind": "imp.PY_SOURCE", "name": "pydeps.mf27", "path": "pydeps\\mf27.py" }, "pydeps.py2depgraph": { "imported_by": [ "__main__", "pydeps.pydeps" ], "imports": [ "pydeps.depgraph", "pydeps.mf27" ], "kind": "imp.PY_SOURCE", "name": "pydeps.py2depgraph", "path": "pydeps\\py2depgraph.py" }, ...
版本历史
版本 1.12.19 感谢 wiguwbe 提供的 PR,修复了与 --no-dot 标志的不一致。
版本 1.12.13 更好的文档针对大型包。有关示例,请参阅 maximum_module_depth。感谢 sheromon 提供的 PR。
版本 1.12.5 Pydeps 现在可以从 pyproject.toml 读取配置数据。感谢 septatrix 提出这个想法,并以信息丰富的论点反驳了我的 toml-rant。
版本 1.11.0 删除了对 Python 3.6 的支持。感谢 pawamoy 移除了已弃用的 imp 模块的导入。(由于 Python 的一个错误,部分代码已被供应商化,请参阅代码以获取详细信息。)
版本 1.10.1 感谢 vector400 提供了一个新的选项 --rankdir,可以以不同的方向渲染图形。
版本 1.10.0 支持 Python 3.10。
版本 1.9.15 感谢 Pipeline Foundation 提供了一个非常改进的 CI 管道,以及 CD 管道。
版本 1.9.14 感谢 poneill 修复了在没有 __init__.py 文件的目录中运行时的一个难以理解的错误信息。
版本 1.9.13 感谢 glumia 和 SimonBiggs 改善了文档。
版本 1.9.10 当放置在 .pydeps 文件中时,现在会尊重 no_show。感谢 romain-dartigues 提供的 PR。
版本 1.9.8 修复了使用大型框架(如 sympy)时超过最大递归深度的错误。感谢 tanujkhattar 发现修复并感谢 balopat 报告此问题。
版本 1.9.7 检查 PYDEPS_DISPLAY 和 BROWSER 以打开图形,由 jhermann 提供的 PR。
版本 1.9.1 图形现在在 Python 3.x 上也稳定了 - 这对于 Py2.7 已经是这种情况了(感谢 pawamoy 报告和测试此问题,以及感谢 kinow 帮助测试)。
版本 1.9.0 支持 Python 3.8。
版本 1.8.7 包含了一个新的标志 --rmprefix,允许您从图中节点的标签中移除前缀。节点的 _名称_ 不会受到影响,因此这不会导致节点合并,也不会改变颜色 - 但可能导致多个节点具有相同的标签(悬停在节点上会显示完整名称)。感谢 aroberge 对增强请求的贡献。
版本 1.8.5 当以 svg 作为输出格式(默认格式)时,鼠标悬停时会突出显示路径(感谢 tomasito665 对增强请求的贡献)。
版本 1.8.2 包含一个新的标志 --only,使得 pydeps 只报告指定的路径
shell> pydeps mypackage --only mypackage.a mypackage.b
版本 1.8.0 包含了用于绘制外部依赖项作为簇的 4 个新标志。有关示例,请参阅 clustering。此外,箭头现在具有源节点的颜色。
版本 1.7.3 包含一个新的标志 -xx 或 --exclude-exact,它与 --exclude 标志的功能匹配,但它需要一个精确匹配,即 -xx foo.bar 将排除 foo.bar,但不会排除 foo.bar.blob(感谢 AvenzaOleg 对 PR 的贡献)。
版本 1.7.2 包含一个新的标志,--no-output,它阻止创建 .svg/.png 文件。
版本 1.7.1 修复了 .pydeps 文件中的排除功能(感谢 eqvis 对错误报告的贡献)。
版本 1.7.0 新的 --reverse 标志反转了依赖图中的箭头方向,使它们指向导入的模块而不是从导入的模块指向(感谢 goetzk 对错误报告和 tobiasmaier 对 PR 的贡献)!
版本 1.5.0 支持 Python 3(感谢 eight04 对 PR 的贡献)。
版本 1.3.4 --externals 现在将包括尚未安装的模块(modulefinder 称为 badmodules)。
版本 1.2.8 为查找包的直接外部依赖项添加了一个快捷方式
pydeps --externals mypackage
它将打印一个包含模块名称的 json 格式列表到屏幕上,例如
(dev) go|c:\srv\lib\dk-tasklib> pydeps --externals dktasklib [ "dkfileutils" ]
这意味着 dktasklib 包仅依赖于 dkfileutils 包。
此功能也可通过程序访问
import os from pydeps.pydeps import externals # the directory that contains setup.py (one level up from actual package): os.chdir('package-directory') print externals('mypackage')
版本 1.2.5: 默认值现在是合理的,例如
shell> pydeps mypackage
可能符合您的预期。它等同于 pydeps --show --max-bacon=2 mypackage,这意味着在您的浏览器中显示依赖图,但限制为两个跳转(仅包括您的模块导入的模块 - 不继续向下导入链)。旧默认行为可以通过 pydeps --noshow --max-bacon=0 mypackage 获取。
贡献
分叉它
如果您先提出一个问题(推荐但不强制):https://github.com/thebjorn/pydeps/issues
创建您的功能分支(git checkout -b my-new-feature)
提交您的更改(git commit -am ‘Add some feature’)
推送到分支(git push origin my-new-feature)
创建新的 Pull Request
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
构建分发
pydeps-1.12.20.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4f6a833a7998bfa24e339c55535882905c22960efc14902c361f74b2952aff19 |
|
MD5 | 74ab42303c8cbaef122e39bff99e5c2a |
|
BLAKE2b-256 | fa549dc92e7e15dfaef6a9176c4187d645b4929162311c82dd4b54eb087d10df |
pydeps-1.12.20-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7278a8912bdada26b773d3550f0cc8fd76bed172d23dc1472c457d6292b67fd7 |
|
MD5 | 8d661970c90bb744adebf8e4b3c35df7 |
|
BLAKE2b-256 | 1d81d67e4335a54c33e73e41204ca46c89c7b64e42fc9ceeb239ae9b68c65e1c |