skip to navigation
skip to content

z3c.dependencychecker 1.2

Downloads ↓

z3c.dependencychecker

Checks which imports are done and compares them to what's in setup.py and warn when discovering missing or unneeded dependencies.

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.

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