Python模块依赖分析工具
项目描述
modulegraph
modulegraph通过字节码分析导入语句,主要确定Python模块之间的依赖关系图。
modulegraph使用与标准库中的modulefinder类似的方法,但使用更灵活的内部表示,对特殊情况有更广泛的知识,并且是可扩展的。
CI状态
项目链接
发布历史
版本 0.19.6
实际上引入了Python 3.12支持
以前的支持是在一个之前安装了早期alpha版本且未清理的安装上测试的,导致无法删除所有对imp模块的使用。
0.19.5
唉..实际上修复了2.7支持
(代码清理破坏了0.19.4中的PR)
0.19.4
修复损坏的Python 2.7支持
由Josua Root提出的PR
初始支持Python 3.12
支持Python 3.12的更改有些粗糙,测试通过,但我不是100%确信更改是正确的。
0.19.3
修复与Python 3.11的兼容性问题
0.19.2
修复PyPI侧边栏中的项目链接
0.19.1
在包元数据中明确提及对Python 3.10的支持
0.19
修复当包__init__是扩展时路径错误的问题
0.18
避免在“packages”中的某个项不是包时抛出异常(modulegraph.find_modules.find_needed_modules)
#45: Modulegraph.foldReferences() 调用了错误的方法
由Anthony Foglia报告。
0.17
Python 3.7中对.pyc格式进行了一些小的更改
0.16
特性
将LICENSE文件添加到分发中
不要依赖pkg_resources来计算包版本
将使用optparse替换为argparse,因为前者已弃用
由htgoebel修复
尝试减少创建ModuleGraph所需的最大递归次数
不要将文件类型包含在zipio.getmode的结果中
修复ModuleGraph调试输出中不一致的缩进/缩进问题
由codewarrior0修复
错误修复
测试套件现在在Windows上通过(通过appveyor进行测试d)
这只需要更改测试套件中的平台依赖项。
0.15
特性
问题#39:编译异步函数时出现语法错误时的回溯
在Python 3.5中,一些(无效)的异步函数定义会导致modulegraph回溯,而不是向图中添加“InvalidSourceModule”节点。
问题#40:现在图中包含类型为“InvalidRelativeImport”的节点,用于尝试使用超出顶级包的相对导入。
模块modulegraph.find_modules不能再作为脚本使用,请使用python -m modulegraph代替。
错误修复
问题38:Python 3中的Dot输出损坏
在bitbucket上由用户elnuno修复。
问题36:确保测试套件在其他系统上也能工作,而不仅仅是macOS
由Hartmut Goebel修复
将“async def”添加到AST扫描器中,以正确识别异步函数定义中的导入。
0.14
错误修复
#33:在Python 3.4或更高版本上扫描字节码时出错
使用dis.get_instructions在Python 3.4或更高版本上扫描字节码的代码没有正常工作,导致在尝试扫描字节码时出现问题。
0.13
Thomas Kluyver进行了各种文档修复。
修复与setuptools最近版本的兼容性问题
有关更多信息,请参阅py2app跟踪器中的问题#206。
Python 3:在编译输入文件时忽略文件开头的BOM。
这与CPython的行为相匹配,并避免了难以诊断的问题。有关更多信息,请参阅py2app跟踪器中的问题#178
Python 3.6引入了新的字节码格式(wordcode),调整字节码扫描器以适应。
0.12.1
问题#25:复杂的Python文件可能由于使用基于堆栈的递归遍历模块AST而导致“最大递归深度超出”异常。
0.12
添加了‘modulegraph.modulegraph.InvalidSourceModule’。此图节点用于无法编译的Python源模块(例如,因为它们包含语法错误)。
这主要用于能够为具有python 2.x或python 3.x兼容性的包创建图,这些包在包含无效“其他”Python版本代码的单独模块中。
添加了‘modulegraph.modulegraph.InvalidCompiledModule’。此图节点用于无法加载的Python字节码模块。
添加了‘modulegraph.modulegraph.NamespacePackage’。
由bitbucket用户htgoebel修复。
当使用‘from collections import defaultdict’时,不再将MissingModule节点添加到图中的‘collections.defaultdict’(‘collections.defaultdict’是‘collections’的属性,而不是子模块)。
修复了ModuleGraph.getReferences()中的拼写错误
添加了ModuleGraph.getReferers(tonode)方法。此方法返回引用tonode(即getReferences的逆操作)的节点。
在Python模块中使用‘from … import name’导入全局变量时,图表将不再包含MissingModule节点。
对于C扩展中的全局变量以及当‘missing’本身是MissingModule时,仍会有MissingModule节点。
问题#18:不要假设PEP 302加载器对象有一个path属性。该属性没有文档记载,且并不总是存在。
0.11.2
0.11.1
问题#145:不要排除平台特定的‘path’模块(如ntpath)。
0.11
这是一个特性发布版本。
特性
在email模块中硬编码关于兼容性别名的知识(对于Python 2.5至3.0)。
这使得从py2app中删除一个强制性的食谱成为可能。
添加了modegraph.zipio.getmode以获取文件的Unix文件模式。
为modulegraph.modulegraph.ModuleGraph添加了一些实用方法。
0.10.5
这是一个错误修复版本。
在modulegraph.find_modules.parse_mf_results中,不要查看文件扩展名来决定文件类型,而是使用项的类。
问题#13:改进了处理错误的相对导入(如“from .foo import bar”),这些导入通常会引发令人困惑的错误,现在它们像任何其他失败的导入一样被处理。
0.10.4
这是一个错误修复版本。
由于setup.py中的错误,包元数据中没有‘分类器’。
0.10.3
这是一个错误修复版本。
错误修复
当py2app模块的主脚本没有以‘.py’结尾的文件名时,modulegraph.find.modules.parse_mf_results失败。
0.10.2
这是一个错误修复版本。
错误修复
问题#12:由于使用了错误的方法,modulegraph有时会找到错误的包__init__模块。一个简单的复现问题的方法是拥有一个名为__init__的顶级模块。
由Kentzo报告。
0.10.1
这是一个错误修复版本。
错误修复
问题#11:由于使用了在该版本Python中不可用的API,从modulegraphs创建xrefs和dotty图表(py2app的–xref和–graph选项)在Python 3中不起作用。
由Andrew Barnert报告。
0.10
这是一个小特性发布版本。
特性
modulegraph.find_modules.find_needed_modules声称会自动将子包包含在“packages”参数中,但该代码根本不起作用。
问题#9:modulegraph脚本已弃用,请使用“python -mmodulegraph”代替。
问题#10:确保“zipio.open”的结果可以在with语句中使用(即with zipio.open(...) as fp)。
不再使用“2to3”来支持Python 3。
因此,modulegraph现在支持Python 2.6及以后的版本。
略微改进了HTML输出,这使得使用JavaScript操作生成的HTML变得更容易。
由anatoly techtonik提供的补丁。
确保modulegraph与Python 3.3b1之后引入的更改兼容。
在Python 3.3中实现对PEP 420(“隐式命名空间包”)的支持。
modulegraph.util.imp_walk已弃用,将在该软件包的下一个版本中删除。
错误修复
当子包包含子模块的导入语句时,模块图不完整,并且在过程中生成错误的警告。
例如,sqlalchemy.util,该软件包的__init__.py文件包含使用经典相对导入语法(即import compat来导入sqlalchemy.util.compat)的模块导入。在此版本之前,modulegraph搜索错误的路径来定位这些模块(因此找不到它们)。
0.9.2
这是一个错误修复版本。
错误修复
modulegraph.find_modules.find_modules的“packages”选项忽略了搜索路径参数,但始终使用默认搜索路径。
modulegraph.util中的“imp_find_modules”函数有一个名为“path”的参数,在先前版本中它是字符串,现在也可以是序列。
当包含在‘includes’列表中的模块不存在时,不要崩溃,但像处理缺少的‘packages’一样警告(modulegraph.find_modules.find_modules)。
0.9.1
这是一个错误修复版本。
错误修复
修复了在包中节点导入名称的问题,其中点分名称的第一个元素可以找到,但其余元素不能。这曾导致在全局命名空间中创建一个MissingModule节点,而不是相对于包。
也就是说,给定一个包含子模块“sub”的包“pkg”,如果“pkg”的“__init__.py”包含“import sub.nomod”,我们现在为“pkg.sub.nomod”创建一个MissingModule节点,而不是“sub.nomod”。
这解决了Brendan Simon在pythonmac-sig邮件列表上首次报告的包含crcmod包到应用程序包中的问题。
0.9
这是一个小特性发布版本。
特性
现在使用sphinx生成文档,可以在<http://packages.python.org/modulegraph>查看。
目前的文档非常粗糙,需要重新组织和语言清理。我主要是通过阅读代码和记录它做了什么来编写当前版本,因此类和方法记录的顺序不一定是最有用的。
仓库已迁移至bitbucket。
将modulegraph.modulegraph.AddPackagePath重命名为addPackagePath,同样,ReplacePackage现在为replacePackage。旧名称仍然可用,但已弃用,将在1.0版本发布前删除。
modulegraph.modulegraph包含两种未使用且语义不明确的节点类型:FlatPackage和ArchiveModule。这些节点类型已弃用,将在1.0版本发布前删除。
添加了一个简单的命令行工具(modulegraph),可以打印脚本依赖图的详细信息。
添加了一个模块(zipio),用于处理可能引用zip文件内条目(如指向zip egg文件中模块的源路径)的路径。
在此添加后,modulegraph.modulegraph.os_listdir已弃用,将在1.0版本发布前删除。
错误修复
当比较的对象不是Node时,Node的__cmp__方法不再引发异常。由Ivan Kozik补丁。
问题#1:当路径(sys.path)上的条目实际不存在时,modulegraph.ModuleGraph的初始化器会引发异常。
由“skurylo”修复,由Ronald提供测试用例。
代码不再与python 2.5兼容,此版本修复了此问题。
由于切换到mercurial,setuptools将不再包含所有必需的文件。通过添加MANIFEST.in文件修复。
打印.dot表示的ModuleGraph的方法再次工作。
0.8.1
这是一个小特性发布版本。
特性
现在支持from __future__ import absolute_import。
现在支持相对导入(from . import module)。
当使用选项--single-version-externally-managed安装时,添加了对命名空间包的支持(setuptools/distribute的一部分)。
0.8
这是一个小特性发布版本。
特性
对Python 3.x的初始支持。
现在可以使用python setup.py test运行测试套件。
(实际的测试套件仍然相当有限)
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
modulegraph-0.19.6.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c914c8c95a0e10fe88505d4e9c2284b4e3dbc70943e306cc6567e36cc541bf4b |
|
MD5 | fe73bbd9e3912fe7e46750e09733cf69 |
|
BLAKE2b-256 | 127a7d1ef5824553c960b441b937dd26a0f99ea04a8c29a5ed099b7c06e9ef61 |
modulegraph-0.19.6-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5443e6d93c0b263f4ea309e2ff01312eef7c424dd51981a1e78e960c90e572b8 |
|
MD5 | 3ff6c41ce61ce3755c72751d7a6777ce |
|
BLAKE2b-256 | cee2f4e1bb5b49ca5521f86309554cebb1ce61290e2d813cd397946b3b354c13 |