Author: Ronald Oussoren


        modulegraph determines a dependency graph between Python modules primarily
by bytecode analysis for import statements.

modulegraph uses similar methods to modulefinder from the standard library,
but uses a more flexible internal representation, has more extensive 
knowledge of special cases, and is extensible.

Release history


* Issue #145: Don't exclude the platform specific 'path' modules (like ntpath)


This is a feature release


* Hardcode knowlegde about the compatibility aliases in the email
  module (for python 2.5 upto 3.0).

  This makes it possible to remove a heavy-handed recipe from py2app.

* Added :func:`modegraph.zipio.getmode` to fetch the Unix file mode
  for a file.

* Added some handy methods to :class:`modulegraph.modulegraph.ModuleGraph`.


This is a bugfix release

* Don't look at the file extension to determine the file type
  in modulegraph.find_modules.parse_mf_results, but use the
  class of the item.

* Issue #13: Improved handing of bad relative imports
  ("from .foo import bar"), these tended to raise confusing errors and
  are now handled like any other failed import.


This is a bugfix release

* There were no 'classifiers' in the package metadata due to a bug


This is a bugfix release


* ``modulegraph.find.modules.parse_mf_results`` failed when the main script of
  a py2app module didn't have a file name ending in '.py'.


This is a bugfix release


* Issue #12: modulegraph would sometimes find the wrong package *__init__*
  module due to using the wrong search method. One easy way to reproduce the
  problem was to have a toplevel module named *__init__*.

  Reported by Kentzo.


This is a bugfix release


* Issue #11: creating xrefs and dotty graphs from modulegraphs (the --xref
  and --graph options of py2app) didn't work with python 3 due to use of
  APIs that aren't available in that version of python.

  Reported by Andrew Barnert.


This is a minor feature release


* ``modulegraph.find_modules.find_needed_modules`` claimed to automaticly
  include subpackages for the "packages" argument as well, but that code
  didn't work at all.

* Issue #9: The modulegraph script is deprecated, use
  "python -mmodulegraph" instead.

* Issue #10: Ensure that the result of "" can be used
  in a with statement (that is, ``with as fp``.

* No longer use "2to3" to support Python 3.

  Because of this modulegraph now supports Python 2.6
  and later.

* Slightly improved HTML output, which makes it easier
  to manipulate the generated HTML using JavaScript.

  Patch by anatoly techtonik.

* Ensure modulegraph works with changes introduced after
  Python 3.3b1.

* Implement support for PEP 420 ("Implicit namespace packages")
  in Python 3.3.

* ``modulegraph.util.imp_walk`` is deprecated and will be
  removed in the next release of this package.


* The module graph was incomplete, and generated incorrect warnings
  along the way, when a subpackage contained import statements for

  An example of this is ``sqlalchemy.util``, the ```` file
  for this package contains imports of modules in that modules using
  the classic relative import syntax (that is ``import compat`` to
  import ``sqlalchemy.util.compat``). Until this release modulegraph
  searched the wrong path to locate these modules (and hence failed
  to find them).


This is a bugfix release


* The 'packages' option to modulegraph.find_modules.find_modules ignored
  the search path argument but always used the default search path.

* The 'imp_find_modules' function in modulegraph.util has an argument 'path',
  this was a string in previous release and can now also be a sequence.

* Don't crash when a module on the 'includes' list doesn't exist, but warn
  just like for missing 'packages' (modulegraph.find_modules.find_