显示模块依赖项
项目描述
Python 模块依赖可视化。
该软件包主要用于通过 pydeps命令从命令行使用。
<nav class="contents" id="contents" role="doc-toc">内容
</nav>功能请求和错误报告:
请在 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] [-v] [-o file] [-T FORMAT] [--display PROGRAM]
[--noshow] [--show-deps] [--show-raw-deps] [--show-dot]
[--nodot] [--no-output] [--show-cycles] [--debug-mf INT]
[--noise-level INT] [--max-bacon 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 ...]]
fname
- 位置参数:
fname 文件名
- 可选参数:
- -h, --help
显示此帮助信息并退出
- --config FILE
指定配置文件
- --no-config
禁用配置文件的处理
- --version
打印 pydeps 版本
- -L LOG, --log LOG
将日志级别设置为 CRITICAL、ERROR、WARNING、INFO、DEBUG、NOTSET 之一。
- -v, --verbose
更详细(-vv,-vvv 更详细)
- -o file
将输出写入“文件”
- -T FORMAT
输出格式 (svg|png)
- --display PROGRAM
用于显示图形的程序(png 或 svg 文件,取决于 T 参数)
- --noshow
不要调用外部程序来显示图形
- --show-deps
显示依赖分析的输出
- --show-raw-deps
在删除跳过之前显示依赖分析的输出
- --show-dot
显示点转换的输出
- --nodot
跳过点转换
- --no-output
不要创建 .svg/.png 文件,意味着 –no-show(-t/-o 将被忽略)
- --show-cycles
仅显示导入周期
- --debug
打开所有 show 和 verbose 选项(主要用于调试 pydeps 本身)
- --noise-level INT
排除度数大于噪声级的源或汇
- --max-bacon INT
排除超过 n 跳的节点(默认 = 2, 0 -> 无限)
- --pylib
包括 python 标准库模块
- --pylib-all
包括 python 所有标准库模块(包括 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 PATTERN, --exclude PATTERN
要跳过的输入文件(例如foo.*),可以提供多种模式
- --exclude-exact MODULE
(简写 -xx MODULE)与 –exclude 相同,但需要完全匹配。-xx foo.bar将排除 foo.bar,但不排除 foo.bar.blob
注意:如果在fname之前提供了具有可变数量参数的选项(如-x),则使用--将参数与文件名分开,否则fname 将被解析为选项的参数。示例:$ pydeps -x os sys -- pydeps。
当然,您也可以从 Python 导入pydeps并将其用作库,在 tests/test_relative_imports.py中查看示例。
例子
这是在自身上运行pydeps的结果(pydeps pydeps):
(完全披露:这是 pydeps 的早期版本)
笔记
pydeps 通过在 python 字节码(想想.pyc文件)中查找 import-opcodes 来查找导入。因此,只会找到导入的文件(即 pydeps 不会查看您目录中未导入的文件)。此外,仅会考虑使用 Python 导入机制可以找到的文件(即,如果模块丢失或未安装,则无论是否导入它都不会包含在内)。这可以通过使用--include-missing 标志来修改。
显示图表:
为了显示生成的.svg或.png文件,pydeps默认为平台调用适当的打开器,例如xdg-open foo.svg。
这可以用--display PROGRAM选项覆盖,其中PROGRAM是一个可执行文件,可以显示图形的图像文件。
您还可以在PYDEPS_DISPLAY 或BROWSER环境变量中导出此类查看器的名称,这会在不使用--display时更改默认行为。
.pydeps
所有选项也可以使用.ini文件语法(可由ConfigParser解析)在.pydeps文件中设置。命令行选项覆盖当前目录中.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还包含一个类似 Erdős 的评分函数(又名培根数,来自 Kevin Bacon 的六度(http://en.wikipedia.org/wiki/Six_Degrees_of_Kevin_Bacon),可让您过滤掉超过给定数量的模块 '跳离您感兴趣的模块。这对于查找模块与世界其他地方的接口很有用。
找到 pydeps 到 Python stdlib 的接口(少一些非常常见的模块)。
shell> pydeps pydeps --show --max-bacon 2 --pylib -x os re types _* enum
--max-bacon 2(默认值)给出最多 2 跳的模块,并且属于一起的模块具有相似的颜色。将其与--max-bacon=0(无限)过滤器的输出进行比较:
导入周期
pydeps可以使用 --show-cycles 参数检测和显示周期。这将 _only_ 显示循环,对于大型库来说,这不是一个特别快的操作。给定一个包含以下内容的文件夹(这使用 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。标准库列表。
图形方向
可以使用--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.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 no_show现在放在.pydeps文件中时会受到尊重。感谢romain-dartigues的 PR。
版本 1.9.8修复了使用大型框架(如sympy)时超出的最大递归深度。感谢tanujkhattar找到修复程序并 感谢balopat报告它。
版本 1.9.7检查PYDEPS_DISPLAY和BROWSER以获取打开图形的程序,PR by jhermann
版本 1.9.1的图表现在在 Python 3.x 上也很稳定 - Py2.7 已经是这种情况(感谢pawamoy报告和测试问题以及kinow帮助测试)。
1.9.0 版支持 Python 3.8。
版本 1.8.7包括一个新标志--rmprefix,它允许您从图中的节点标签中删除前缀。节点的 _name_ 不受影响,因此这不会导致节点合并,也不会改变颜色 - 但它可能导致多个节点具有相同的标签(将鼠标悬停在节点上将给出全名)。感谢 aroberge的增强请求。
版本 1.8.5使用 svg 作为输出格式(这是默认格式),现在在鼠标悬停时会突出显示路径(感谢tomasito665的增强请求)。
版本 1.8.2包含一个新标志--only,它导致 pydeps 仅报告指定的路径:
shell> pydeps mypackage --only mypackage.a mypackage.b
1.8.0 版包括 4 个新标志,用于将外部依赖项绘制为集群。有关示例,请参见clustering-externals。此外,箭头现在具有源节点的颜色。
版本 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标志反转了依赖图中箭头的方向,因此它们指向 _to_ 导入的模块而不是 _from_ 导入的模块(感谢goetzk的错误报告和tobiasmaier的 PR!)。
版本 1.5.0 Python 3 支持(感谢804的 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)
创建新的拉取请求