检查导入的包是否在setup.py中声明
ws.dependencychecker的Python项目详细描述
这个包提供了一个dependencychecker脚本来检查一个egg 声明它在setup.py中导入的所有包。
Usage
dependencychecker [-h] [-v] [-z] package Checks whether imported packages are declared in setup.py. positional arguments: package setuptools `requirement string`_, e.g. ws.dependencychecker or ws.dependencychecker[test] optional arguments: -h, --help show this help message and exit -v, --verbose Print all lines importing missing packages -z, --zcml Scan ZCML files -m , --mapping Filename with additional egg-->packages mappings
支持的python版本:2.6、2.7 (3.x不受支持,因为某些依赖项尚未移植,例如 Zope.组件)。
虽然dependencychecker不导入任何文件,但它需要包 它的依赖项是PYTHONPATH,因此可以通过 pkg_resources.working_set。
默认情况下,dependencychecker打印未声明的包名称列表, 格式化后可以复制粘贴到setup.py的install_requires列表中, 像这样:
$ depcheck ws.dependencychecker 'gocept.testing.mock',
如果需要更多详细信息,请使用详细模式(pass-v):
$ depcheck ws.dependencychecker -v /home/wosc/depcheck/src/ws/dependencychecker/tests/test_check.py:4:import gocept.testing.mock
要在构建中使用ws.dependencychecker,请使用以下代码段 示例:
[depcheck] recipe = zc.recipe.egg eggs = ${test:eggs} ws.dependencychecker
Eggs that contain several packages
对于大多数鸡蛋,鸡蛋名称和提供的包装名称是相同的(例如 根据zope.interfaceegg将允许您导入 zope.interface,但没有其他内容)。然而,有些鸡蛋含有超过 一个包,和/或具有不同名称的包(例如ZODB3e g g 包含包ZODB、BTrees和persistent)。
ws.dependencychecker有一些内置的启发式(zodb,setuptools)来 处理这个问题,但如果这还不足以满足您的项目,您可以传入一个 以下格式的映射文件:
[egg_name] package1 package2
所以在zodb示例(实际上是内置的)中,看起来像:
[ZODB3] ZODB BTrees persistent
你不需要重复鸡蛋的名字,所以在^{tt15}的情况下$ (它还包含pkg_resources),看起来像:
[setuptools] pkg_resources
Known limitations
- 目前只识别Python2.7标准库中的模块。
- 包含几个或不同名称的鸡蛋的内置映射 包裹很有限。建议欢迎!
- 无法识别在一行上导入的多个包 (import foo, bar将只提取foo), 但无论如何,这种拼写是不受欢迎的。
- 错误地识别zcml中包含在多行注释中的内容。
- 不支持扫描带拉链的鸡蛋。
Development
源代码可以在Mercurial存储库中找到 http://code.wosc.de/hg/public/ws.dependencychecker。
请向Wolfgang Schnerring报告您发现的任何错误。
Changelog
1.1.1(2011-12-15)
- 与python-2.6兼容
1.1(2011-12-09)
- 将包名称合并为egg名称 (例如zope.traversing.foo–>;zope.traversing)
- 允许指定其他egg–>;包映射。
- 支持ZCML文件的扫描。
- 将默认输出更改为分组模式,以便复制和粘贴; 添加详细模式。
1.0(2011-12-06)
- 第一次释放。