显示模块依赖项

pydeps的Python项目详细描述


Documentation Statushttps://travis-ci.org/thebjorn/pydeps.svghttps://coveralls.io/repos/github/thebjorn/pydeps/badge.svg?branch=masterDownloads

python模块依赖可视化。此包安装pydeps 命令,通常的用法是从命令行使用它。

版本1.7.3包含一个新标志-xx--exclude-exact,它与--exclude标志的功能匹配, 除非需要完全匹配,否则-xx foo.bar将排除foo.bar,但不排除foo.bar.blob(感谢 @公关部的Avenzaoleg)

版本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中的新功能:默认值现在是合理的,这样:

pydeps mypackage

会做你想做的事。它和 pydeps --show--max-bacon=2 mypackage这意味着显示 浏览器中的依赖关系图,但将其限制为两个跃点(即 仅包括模块导入的模块-不继续 在进口链上)。旧的默认行为可用于 pydeps --noshow--max-bacon=0 mypackage

要安装:

pip install pydeps

要创建图形,需要安装Graphviz(确保dot 命令就在你的路上)。

注意

要显示生成的.svg文件,默认情况下,pydeps。 调用firefox foo.svg。这可以用 --display PROGRAM选项,其中PROGRAM是 可执行文件,可以显示图形的图像文件。

注意

请在github上报告错误和功能请求 https://github.com/thebjorn/pydeps/issues

这是对自身运行pydeps的结果(pydeps pydeps):

https://raw.githubusercontent.com/thebjorn/pydeps/master/docs/_static/pydeps.svg?sanitize=true

pydeps还包含一个类似erd_s的评分函数(也称培根 数字,从凯文·培根的6度开始 (http://en.wikipedia.org/wiki/Six_Degrees_of_Kevin_Bacon)让 你过滤掉的模块超过了给定的“跳数” 远离你感兴趣的模块。这对发现 模块与世界其他地方的接口。

找到python stdlib的pydeps接口(不太常见 模块)。

pydeps pydeps --show --max-bacon 2 --pylib -x os re types _* enum
https://raw.githubusercontent.com/thebjorn/pydeps/master/docs/_static/pydeps-pylib.svg?sanitize=true

--max-bacon 2(默认值)给出最多2个模块 跳跃离开,属于一起的模块有相似的颜色。 将其与--max-bacon=0(无限)的输出进行比较 过滤器:

https://raw.githubusercontent.com/thebjorn/pydeps/master/docs/_static/pydeps-pylib-all.svg?sanitize=true

也可以使用.ini文件在.pydeps文件中设置所有选项 语法(可由ConfigParser解析)。命令行选项替代 当前目录中.pydeps文件中的选项 覆盖用户主目录中的选项 (%USERPROFILE%\.pydeps在windows和^{tt31}上$ 否则)。

pydeps可以用^{tt33}检测并显示周期$ 参数。这将只显示周期,对于大型库 这不是一个特别快的行动。给一个文件夹 以下内容(使用yaml定义目录结构, 例如在测试中):

relimp:
    - __init__.py
    - a.py: |
        from . import b
    - b.py: |
        from . import a

pydeps relimp --show-cycles显示:

https://raw.githubusercontent.com/thebjorn/pydeps/master/docs/_static/pydeps-cycle.svg?sanitize=true

试图保持中间格式的可读性, 来自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"
}, ...

用法:

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 ...]] [--externals] [--reverse]
              fname
位置参数:
fname文件名
可选参数:
-h, --helpshow this help message and exit
--config FILEspecify config file
--no-configdisable processing of config files
--versionprint pydeps version
-L LOG, --log LOG
set log-level to one of CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET.
-v, --verbosebe more verbose (-vv, -vvv for more verbosity)
-o filewrite output to ‘file’
-T FORMAToutput format (svg|png)
--display PROGRAM
program to use to display the graph (png or svg file depending on the T parameter)
--noshowdon’t call external program to display graph
--show-depsshow output of dependency analysis
--show-raw-deps
show output of dependency analysis before removing skips
--show-dotshow output of dot conversion
--nodotskip dot conversion
--no-outputdon’t create .svg/.png file, implies –no-show (-t/-o will be ignored)
--show-cyclesshow only import cycles
--debugturn on all the show and verbose options
--noise-level INT
exclude sources or sinks with degree greater than noise-level
--max-bacon INT
exclude nodes that are more than n hops away (default=2, 0 -> infinite)
--pylibinclude python std lib modules
--pylib-allinclude python all std lib modules (incl. C modules)
--x PATTERN, --exclude PATTERN
input files to skip (e.g. foo.*), multiple patterns can be provided
--xx MODULE, --exclude-exact MODULE
same as –exclude, except requires the full match. -xx foo.bar will exclude foo.bar, but not foo.bar.blob
--externalscreate list of direct external dependencies
--reversedraw arrows to (instead of from) imported modules

当然可以从python导入pydeps。(看看 tests/test_relative_imports.py文件作为示例。

贡献

  1. 叉开它
  2. 创建您的功能分支(git checkout-b我的新功能)
  3. 提交更改(git commit-am'add some feature')
  4. 推到分支(git push origin我的新功能)
  5. 创建新的拉取请求

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JNLP无法在浏览器中正确启动(与dtjava.js一起部署)   在执行下一个方法之前,java将等待线程执行结束   java如何将另一个LayoutManager应用于JComboBox?(多栏JComboBox尝试)   使用jPBC在java中实现双线性配对   java在使用@RequestMapping注释时获取请求的值(URL)   java如何控制流量   java如何获取IFC对象的绝对坐标?   java目标服务器无法使用htmlunit和tor响应异常   java需要帮助创建一个循环结构来运行我的程序   java有可能拥有一个Android APK并在应用程序中更改构建变体吗?   在Sphinx4中运行Ant的java   Java:从ArrayList获取子列表的有效方法   java如何使在循环内部创建的数组在循环外部工作?   apache poi通过java中的XSSF表从单元格读取日期值   安卓 java自己的SeqLock实现,避免spinlock会更好吗?   java的并发底层方法。util。同时发生的预定未来   java比较方法违反了它的一般约定,如何使它具有可传递性?   使用JAVA定向指定类的DB导出子类   一个方法中的java更改特定imageView