Metadata-Version: 1.1
Name: pydeps
Version: 1.9.3
Summary: Display module dependencies
Home-page: https://github.com/thebjorn/pydeps
Author: bjorn
Author-email: bp@datakortet.no
License: BSD
Description: 
        pydeps
        ======
        
        .. image:: https://readthedocs.org/projects/pydeps/badge/?version=latest
           :target: https://readthedocs.org/projects/pydeps/?badge=latest
           :alt: Documentation Status
        
        .. image:: https://travis-ci.org/thebjorn/pydeps.svg
           :target: https://travis-ci.org/thebjorn/pydeps
        
        
        .. image:: https://coveralls.io/repos/github/thebjorn/pydeps/badge.svg?branch=master
           :target: https://coveralls.io/github/thebjorn/pydeps?branch=master
        
        .. image:: https://pepy.tech/badge/pydeps
           :target: https://pepy.tech/project/pydeps
           :alt: Downloads
        
        Python module dependency visualization. This package installs the ``pydeps``
        command, and normal usage will be to use it from the command line.
        
        How to install
        ==============
        ::
        
            pip install pydeps
        
        Basic Usage
        -----------
        From the shell::
        
            shell> pydeps [flags] module-directory
        
        Detailed usage examples can be found below the version history.
        
        **Note:** pydeps finds imports by looking for import-opcodes in
        python bytecodes (think `.pyc` files). Therefore, only imported files
        will be found (ie. pydeps will not look at files in your directory that
        are not imported). Additionally, only files that can be found using
        the Python import machinery will be considered (ie. if a module is
        missing or not installed, it will not be included regardless if it is
        being imported). This can be modified by using the ``--include-missing``
        flag described below.
        
        **Creating the graph:**
        
        To create graphs you need to install Graphviz_ Please follow the
        installation instructions provided in the Graphviz link (and make
        sure the ``dot`` command is on your path).
        
        **Displaying the graph:**
        
        
        To display the resulting `.svg` files, ``pydeps`` by default
        calls ``firefox foo.svg``.  This is can be overridden with
        the ``--display PROGRAM`` option, where ``PROGRAM`` is an
        executable that can display the image file of the graph.
        
        **Feature requests and bug reports:**
        
        Please report bugs and feature requests on GitHub at
        https://github.com/thebjorn/pydeps/issues
        
        Version history
        ---------------
        
        **Version 1.9.1** graphs are now stable on Python 3.x as well - 
        this was already the case for Py2.7 (thanks to pawamoy_ for reporting
        and testing the issue and to kinow_ for helping with testing).
        
        **Version 1.9.0** supports Python 3.8.
        
        **Version 1.8.7** includes a new flag ``--rmprefix`` which lets you remove
        prefixes from the node-labels in the graph. The _name_ of the nodes are not effected
        so this does not cause merging of nodes, nor does it change coloring - but it
        can lead to multiple nodes with the same label (hovering over the node will
        give the full name). Thanks to  aroberge_ for the enhancement request.
        
        **Version 1.8.5** With svg as the output format (which is the default),
        paths are now hilighted on mouse hover (thanks to tomasito665_ for the
        enhancement request).
        
        **Version 1.8.2** incldes a new flag ``--only`` that causes pydeps to 
        only report on the paths specified::
        
            shell> pydeps mypackage --only mypackage.a mypackage.b
        
        **Version 1.8.0** includes 4 new flags for drawing external dependencies as
        clusters. See below for examples.
        Additionally, the arrowheads now have the color of the source node.
        
        **Version 1.7.3** includes a new flag ``-xx`` or ``--exclude-exact`` which
        matches the functionality of the ``--exclude`` flag, except it requires an
        exact match, i.e. ``-xx foo.bar`` will exclude foo.bar, but not
        ``foo.bar.blob`` (thanks to AvenzaOleg_ for the PR).
        
        **Version 1.7.2** includes a new flag, ``--no-output``, which prevents
        creation of the .svg/.png file.
        
        **Version 1.7.1** fixes excludes in .pydeps files (thanks to eqvis_
        for the bug report).
        
        **Version 1.7.0** The new ``--reverse`` flag reverses the direction
        of the arrows in the dependency graph, so they point _to_ the imported
        module instead of _from_ the imported module (thanks to goetzk_ for
        the bug report and tobiasmaier_ for the PR!).
        
        **Version 1.5.0** Python 3 support (thanks to eight04_ for the PR).
        
        **Version 1.3.4** ``--externals`` will now include modules that 
        haven't been installed (what ``modulefinder`` calls ``badmodules``).
        
        **Version 1.2.8** A shortcut for finding the direct external dependencies
        of a package was added::
        
            pydeps --externals mypackage
        
        which will print a json formatted list of module names to the screen, e.g.::
        
            (dev) go|c:\srv\lib\dk-tasklib> pydeps --externals dktasklib
            [
                "dkfileutils"
            ]
        
        which means that the ``dktasklib`` package only depends on the ``dkfileutils``
        package.
        
        This functionality is also available programmatically::
        
            import os
            from pydeps.pydeps import externals
            # the directory that contains setup.py (one level up from actual package):
            os.chdir('package-directory')
            print externals('mypackage')
        
        **Version 1.2.5:** The defaults are now sensible, such that::
        
            shell> pydeps mypackage
        
        will likely do what you want. It is the same as
        ``pydeps --show --max-bacon=2 mypackage`` which means display the
        dependency graph in your browser, but limit it to two hops (which
        includes only the modules that your module imports -- not continuing
        down the import chain).  The old default behavior is available with
        ``pydeps --noshow --max-bacon=0 mypackage``.
        
        
        
        Usage
        -----
        
        This is the result of running ``pydeps`` on itself (``pydeps pydeps``):
        
        .. image:: https://raw.githubusercontent.com/thebjorn/pydeps/master/docs/_static/pydeps.svg?sanitize=true
        
        (full disclosure: this is for an early version of pydeps)
        
        Bacon
        ~~~~~
        
        ``pydeps`` also contains an Erdős-like scoring function (a.k.a. Bacon
        number, from Six degrees of Kevin Bacon
        (http://en.wikipedia.org/wiki/Six_Degrees_of_Kevin_Bacon) that lets
        you filter out modules that are more than a given number of 'hops'
        away from the module you're interested in.  This is useful for finding
        the interface a module has to the rest of the world.
        
        
        To find pydeps' interface to the Python stdlib (less some very common
        modules).
        
        ::
        
            shell> pydeps pydeps --show --max-bacon 2 --pylib -x os re types _* enum
        
        .. image:: https://raw.githubusercontent.com/thebjorn/pydeps/master/docs/_static/pydeps-pylib.svg?sanitize=true
        
        ``--max-bacon 2`` (the default) gives the modules that are at most 2
        hops away, and modules that belong together have similar colors.
        Compare that to the output with the ``--max-bacon=0`` (infinite)
        filter:
        
        .. image:: https://raw.githubusercontent.com/thebjorn/pydeps/master/docs/_static/pydeps-pylib-all.svg?sanitize=true
           :width: 40%
        
        .pydeps
        -------
        
        All options can also be set in a ``.pydeps`` file using ``.ini`` file
        syntax (parsable by ``ConfigParser``). Command line options override
        options in the ``.pydeps`` file in the current directory, which again
        overrides options in the user's home directory
        (``%USERPROFILE%\.pydeps`` on Windows and ``${HOME}/.pydeps``
        otherwise).
        
        An example .pydeps file::
        
            [pydeps]
            max_bacon = 2
            verbose = 0
            pylib = False
            exclude =
                os
                re
                sys
                collections
                __future__
        
        
        
        Import cycles
        -------------
        
        ``pydeps`` can detect and display cycles with the ``--show-cycles``
        parameter.  This will _only_ display the cycles, and for big libraries
        it is not a particularly fast operation.  Given a folder with the
        following contents (this uses yaml to define a directory structure,
        like in the tests)::
        
                relimp:
                    - __init__.py
                    - a.py: |
                        from . import b
                    - b.py: |
                        from . import a
        
        ``pydeps relimp --show-cycles`` displays:
        
        .. image:: https://raw.githubusercontent.com/thebjorn/pydeps/master/docs/_static/pydeps-cycle.svg?sanitize=true
        
        Clustering externals
        --------------------
        
        Running `pydeps pydeps --max-bacon=4` on version 1.8.0 of pydeps gives the following graph:
        
        .. image:: https://raw.githubusercontent.com/thebjorn/pydeps/master/docs/_static/pydeps-18-bacon4.svg?sanitize=true
        
        If you are not interested in the internal structure of external modules, you can add the ``--cluster`` flag, which
        will collapse external modules into folder-shaped objects::
        
            shell> pydeps pydeps --max-bacon=4 --cluster
        
        .. image:: https://raw.githubusercontent.com/thebjorn/pydeps/master/docs/_static/pydeps-18-bacon4-cluster.svg?sanitize=true
        
        To see the internal structure _and_ delineate external modules, use the ``--max-cluster-size`` flag, which controls
        how many nodes can be in a cluster before it is collapsed to a folder icon::
        
            shell> pydeps pydeps --max-bacon=4 --cluster --max-cluster-size=1000
        
        .. image:: https://raw.githubusercontent.com/thebjorn/pydeps/master/docs/_static/pydeps-18-bacon4-cluster-max1000.svg?sanitize=true
        
        or, using a smaller max-cluster-size::
        
            shell> pydeps pydeps --max-bacon=4 --cluster --max-cluster-size=3
        
        .. image:: https://raw.githubusercontent.com/thebjorn/pydeps/master/docs/_static/pydeps-18-bacon4-cluster-max3.svg?sanitize=true
        
        To remove clusters with too few nodes, use the ``--min-cluster-size`` flag::
        
            shell> pydeps pydeps --max-bacon=4 --cluster --max-cluster-size=3 --min-cluster-size=2
        
        .. image:: https://raw.githubusercontent.com/thebjorn/pydeps/master/docs/_static/pydeps-18-bacon4-cluster-max3-min2.svg?sanitize=true
        
        In some situations it can be useful to draw the target module as a cluster::
        
            shell> pydeps pydeps --max-bacon=4 --cluster --max-cluster-size=3 --min-cluster-size=2 --keep-target-cluster
        
        .. image:: https://raw.githubusercontent.com/thebjorn/pydeps/master/docs/_static/pydeps-18-bacon4-cluster-max3-min2-keep-target.svg?sanitize=true
        
        ..and since the cluster boxes include the module name, we can remove those prefixes::
        
            shell> pydeps pydeps --max-bacon=4 --cluster --max-cluster-size=3 --min-cluster-size=2 --keep-target-cluster --rmprefix pydeps. stdlib_list.
        
        .. image:: https://raw.githubusercontent.com/thebjorn/pydeps/master/docs/_static/pydeps-rmprefix.svg?sanitize=true
        
        
        Intermediate format
        -------------------
        
        An attempt has been made to keep the intermediate formats readable,
        eg. the output from ``pydeps --show-deps ..`` looks like this::
        
            ...
            "pydeps.mf27": {
                "imported_by": [
                    "__main__",
                    "pydeps.py2depgraph"
                ],
                "kind": "imp.PY_SOURCE",
                "name": "pydeps.mf27",
                "path": "pydeps\\mf27.py"
            },
            "pydeps.py2depgraph": {
                "imported_by": [
                    "__main__",
                    "pydeps.pydeps"
                ],
                "imports": [
                    "pydeps.depgraph",
                    "pydeps.mf27"
                ],
                "kind": "imp.PY_SOURCE",
                "name": "pydeps.py2depgraph",
                "path": "pydeps\\py2depgraph.py"
            }, ...
        
        Usage (parameters)
        ------------------
        ::
        
            usage: pydeps [-h] [--debug] [--config FILE] [--no-config] [--version]
                          [-L LOG] [-v] [-o file] [-T FORMAT] [--display PROGRAM]
                          [--noshow] [--show-deps] [--show-raw-deps] [--show-dot]
                          [--nodot] [--no-output] [--show-cycles] [--debug-mf INT]
                          [--noise-level INT] [--max-bacon INT] [--pylib] [--pylib-all]
                          [--include-missing] [-x PATTERN [PATTERN ...]]
                          [-xx MODULE [MODULE ...]] [--only MODULE_PATH [MODULE_PATH ...]]
                          [--externals] [--reverse] [--cluster] [--min-cluster-size INT]
                          [--max-cluster-size INT] [--keep-target-cluster]
                          [--rmprefix PREFIX [PREFIX ...]]
                          fname
        
        positional arguments:
          fname                 filename
        
        optional arguments:
          -h, --help                             show this help message and exit
          --config FILE                          specify config file
          --no-config                            disable processing of config files
          --version                              print pydeps version
          -L LOG, --log LOG                      set log-level to one of CRITICAL, ERROR, WARNING, INFO, DEBUG, NOTSET.
          -v, --verbose                          be more verbose (-vv, -vvv for more verbosity)
          -o file                                write output to 'file'
          -T FORMAT                              output format (svg|png)
          --display PROGRAM                      program to use to display the graph (png or svg file depending on the T parameter)
          --noshow                               don't call external program to display graph
          --show-deps                            show output of dependency analysis
          --show-raw-deps                        show output of dependency analysis before removing skips
          --show-dot                             show output of dot conversion
          --nodot                                skip dot conversion
          --no-output                            don't create .svg/.png file, implies --no-show (-t/-o will be ignored)
          --show-cycles                          show only import cycles
          --debug                                turn on all the show and verbose options (mainly for debugging pydeps itself)
          --noise-level INT                      exclude sources or sinks with degree greater than noise-level
          --max-bacon INT                        exclude nodes that are more than n hops away (default=2, 0 -> infinite)
          --pylib                                include python std lib modules
          --pylib-all                            include python all std lib modules (incl. C modules)
          --include-missing                      include modules that are not installed (or can't be found on sys.path)
          --x PATTERN, --exclude PATTERN         input files to skip (e.g. `foo.*`), multiple patterns can be provided
          --xx MODULE, --exclude-exact MODULE    same as --exclude, except requires the full match. `-xx foo.bar` will exclude foo.bar, but not foo.bar.blob
          --only MODULE_PATH                     only include modules that start with MODULE_PATH, multiple paths can be provided
          --externals                            create list of direct external dependencies
          --reverse                              draw arrows to (instead of from) imported modules
          --cluster                              draw external dependencies as separate clusters
          --min-cluster-size INT                 the minimum number of nodes a dependency must have before being clustered (default=0)
          --max-cluster-size INT                 the maximum number of nodes a dependency can have before the cluster is collapsed to a single node (default=0)
          --keep-target-cluster                  draw target module as a cluster
          --rmprefix PREFIX                      remove PREFIX from the displayed name of the nodes (multiple prefixes can be provided)
        
        
             
        You can of course import ``pydeps`` from Python (look in the
        ``tests/test_relative_imports.py`` file for examples.
        
        Contributing
        ------------
        #. Fork it
        #. It is appreciated (but not required) if you raise an issue first: https://github.com/thebjorn/pydeps/issues
        #. Create your feature branch (`git checkout -b my-new-feature`)
        #. Commit your changes (`git commit -am 'Add some feature'`)
        #. Push to the branch (`git push origin my-new-feature`)
        #. Create new Pull Request
        
        
        .. _Graphviz: http://www.graphviz.org/download/
        .. _AvenzaOleg: https://github.com/avenzaoleg
        .. _eqvis: https://github.com/eqvis
        .. _goetzk: https://github.com/goetzk
        .. _tobiasmaier: https://github.com/tobiasmaier
        .. _eight04: https://github.com/eight04
        .. _tomasito665: https://github.com/Tomasito665
        .. _aroberge: https://github.com/aroberge
        .. _pawamoy: https://github.com/pawamoy
        .. _kinow: https://github.com/kinow
        
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: Natural Language :: English
Classifier: License :: OSI Approved :: BSD License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Software Development :: Libraries :: Python Modules
