z3c.dependencychecker 1.2
z3c.dependencychecker
Checks which imports are done and compares them to what's in setup.py and warn when discovering missing or unneeded dependencies.
Contents
What it does
z3c.dependencychecker reports on:
Unused imports: pyflakes is another tool that does this (and that also reports on missing variables inside the files).
Missing (test) requirements: imports without a corresponding requirement in the setup.py. There might be false alarms, but at least you've got a (hopefully short) list of items to check.
Watch out for packages that have a different name than how they're imported. For instance a requirement on pydns which is used as import DNS in your code: pydns and DNS lead to separate "missing requirements: DNS" and "unneeded requirements: pydns" warnings.
Unneeded (test) requirements: requirements in your setup.py that aren't imported anywhere in your code. You might need them because not everything needs to be imported. It at least gives you a much smaller list to check by hand.
Requirements that should be test-only: if something is only imported in a test file, it shouldn't be in the generic defaults. So you get a separate list of requirements that should be moved from the regular to the test requirements.
It checks the following locations:
- Python files for regular imports.
- Zcml files for package="some.thing" attributes.
- Python files, .txt and .rst files for imports in doctests.
Credits
z3c.dependencychecker is a different application/packaging of zope's importchecker utility. It has been used in quite some projects, I grabbed a copy from lovely.recipe's checkout.
- Martijn Faassen wrote the original importchecker script.
- Reinout van Rees (The Health Agency) added the dependency checker functionality and packaged it.
Source code
The source code can be found in zope's svn repository: http://svn.zope.org/repos/main/z3c.dependencychecker
At the moment, bugs and suggestions can be send to Reinout.
Usage of z3c.dependencychecker
Installation
Either install z3c.dependencychecker globally (easy_install z3c.dependencychecker) or install it in your buildout.
Usage
Run the dependencychecker or bin/dependencychecker script from your project's root folder and it will report on your dependencies.
By default, it looks in the src/ directory for your sources. Alternatively, you can specify a start directory yourself, for instance '.' if there's no src/ directory.
We have a sample project in a temp directory:
>>> sample1_dir '/TESTTEMP/sample1' >>> ls(sample1_dir) setup.py src
For our test, we call the main() method, just like the dependencychecker script would.
>>> import os
>>> os.chdir(sample1_dir)
>>> from z3c.dependencychecker import dependencychecker
>>> dependencychecker.main()
Unused imports
==============
/TESTTEMP/sample1/src/sample1/unusedimports.py:7: tempfile
/TESTTEMP/sample1/src/sample1/unusedimports.py:4: zest.releaser
/TESTTEMP/sample1/src/sample1/unusedimports.py:6: os
<BLANKLINE>
Missing requirements
====================
missing.req
something.origname
zope.interface
<BLANKLINE>
Missing test requirements
=========================
reinout.hurray
<BLANKLINE>
Unneeded requirements
=====================
unneeded.req
<BLANKLINE>
Requirements that should be test requirements
=============================================
Needed.By.Test
<BLANKLINE>
Unneeded test requirements
==========================
zope.testing
<BLANKLINE>
Note: requirements are taken from the egginfo dir, so you need
to re-run buildout (or setup.py or whatever) for changes in
setup.py to have effect.
<BLANKLINE>
TODO
- Improve test coverage of original import checker module.
- Try it on more projects and gather feedback.
- Optionally add some extra fallbacks for often-used packages like PIL (which is really Imaging when you import it).
- Try to handle local (so non-absolute) imports.
- Display impacted files for each section (like Unused imports). Maybe with a option (-v)?
- Improve documentation on commandline usage ("you can pass a directoryname").
Changelog of z3c.dependencychecker
1.2 (2011-09-19)
- Looking for a package directory named after the package name in preference to the src/ directory.
- Compensating for django-style 'django-something' package names with 'django_something' package directories. Dash versus underscore.
1.1 (2010-01-06)
- Zcml files are also searched for 'component=' patterns as that can be used by securitypolicy declarations.
- Dependencychecker is now case insensitive as pypi is too.
- Using optparse for parsing commandline now. Added --help and --version.
1.0 (2009-12-10)
- Documentation update.
- Improved test coverage. The dependencychecker module self is at 100%, the original import checker module is at 91% coverage.
0.5 (2009-12-10)
- Searching in doctests (.py, .txt, .rst) for imports, too. Regex-based by necessity, but it seems to catch what I can test it with.
0.4 (2009-12-10)
- Supporting "from zope import interface"-style imports where you really want to be told you're missing an "zope.interface" dependency instead of just "zope" (which is just a namespace package).
0.3 (2009-12-08)
- Sorted "unneeded requirements" reports and filtered out duplicates.
- Reporting separately on dependencies that should be moved from the regular to the test dependencies.
0.2 (2009-12-08)
- Added tests. Initial quick test puts coverage at 86%.
- Fixed bug in test requirement detection.
- Added documentation.
- Moved source code to zope's svn repository.
0.1 (2009-12-02)
- Also reporting on unneeded imports.
- Added note on re-running buildout after a setup.py change.
- Added zcml lookup to detect even more missing imports.
- Added reporting on missing regular and test imports.
- Grabbing existing requirements from egginfo directory.
- Copied over Martijn Faassen's zope importchecker script.
| File | Type | Py Version | Uploaded on | Size | # downloads |
|---|---|---|---|---|---|
| z3c.dependencychecker-1.2.tar.gz (md5) | Source | 2011-09-19 | 16KB | 284 | |
- Author: The Health Agency
- Home Page: http://www.thehealthagency.com
- License: ZPL
- Package Index Owner: reinout, jw, janjaapdriessen
- DOAP record: z3c.dependencychecker-1.2.xml
