Checks which imports are done and compares them to what's in setup.py and
warn when discovering missing or unneeded dependencies.
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
pydnswhich is used asimport DNSin 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. It also supports Plone's generic setup files. - Python files,
.txtand.rstfiles for imports in doctests.
The tests are quite sensitive to other python packages being available. If the tests do not run, first wrap the buildout in a virtualenv to make double sure there are no interfering packages. Or make sure you use a clean (system) python.
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 added the dependency checker functionality and packaged it (mostly while working at The Health Agency).
- Quite some fixes from Jonas Baumann.
The source code can be found on github: https://github.com/reinout/z3c.dependencychecker
You can fork and fix it from there. And you can add issues and feature requests in the github issue tracker.