Skip to main content

Find all the imports in your library

Project description

depfinder

image

image

Installation

depfinder is on pypi. It is tested against Python 2.7 and 3.6-3.8.

pip install depfinder

It is available via conda.

conda install -c conda-forge depfinder

It is also via github.

git clone git@github.com:ericdill/depfinder
cd depfinder
python setup.py install

Using depfinder

$ depfinder -h
usage: depfinder [-h] [-y] [-V] [--no-remap] [-v] [-q] [-k KEY] [--conda]
                [--pdb]
                file_or_directory

Tool for inspecting the dependencies of your python project.

positional arguments:
    file_or_directory  Valid options are a single python file, a single jupyter
                        (ipython) notebook or a directory of files that include
                        python files

optional arguments:
    -h, --help         show this help message and exit
    -y, --yaml         Output in syntactically valid yaml when true. Defaults to
                        False
    -V, --version      Print out the version of depfinder and exit
    --no-remap         Do not remap the names of the imported libraries to their
                        proper conda name
    -v, --verbose      Enable debug level logging info from depfinder
    -q, --quiet        Turn off all logging from depfinder
    -k KEY, --key KEY  Select some or all of the output keys. Valid options are
                        'required', 'optional', 'builtin', 'relative', 'all'.
                        Defaults to 'all'
    --conda            Format output so it can be passed as an argument to conda
                        install or conda create
    --pdb              Enable PDB debugging on exception

Ok, great. That's the help output. Not super helpful. What does the output of depfinder look like when we run it on the source code for depfinder?

$ depfinder depfinder
{'builtin': ['__future__',
                'argparse',
                'ast',
                'collections',
                'copy',
                'errno',
                'json',
                'logging',
                'os',
                'pprint',
                're',
                'subprocess',
                'sys'],
    'relative': ['_version', 'main'],
    'required': ['pyyaml', 'stdlib-list']}

So, what do these things mean? Well builtin are modules that are built in to the standard library. required are modules that are not from the standard library or from within the depfinder package and relative are modules that are imported from one module to another within the depfinder source code.

Also see this notebook

Description

Find all the unique imports in your library, automatically, because who likes do it by hand? depfinder uses the ast (Abstract Syntax Tree) module (and more ast docs) to find all :pyast.Try{.interpreted-text role="class"} and :pyast.ImportFrom{.interpreted-text role="class"} nodes. These :pyast.Import{.interpreted-text role="class"} and :pyast.ImportFrom{.interpreted-text role="class"} nodes are then grouped according to the following categories, in order of decreasing precedence:

  • relative : The import is a relative import from within the same library

  • builtin : The import is built into the standard library, as determined by scraping the official python docs for the builtins with stdlib-list

  • questionable : The import occurs inside any combination of

    • {py:class}ast.Try ({py:class}ast.TryExcept on py27)
    • {py:class}ast.FunctionDef
    • {py:class}ast.ClassDef

    The module may be importable without these imports, but the it will likely not have full functionality.

  • required : The import occurs at the top level of the module and will get executed when the module is imported. These imports must be accounted for in an environment, or the module will not be importable.

Testing

It has dependencies on, stdlib-list and pyyaml. I use stdlib-list to get the list of libraries built in to the standard library. These requirements can be installed via pip :

pip install -r requirements.txt

Also install the test-requiements :

pip install -r test-requirements.txt

Then you can run the tests from the root of the git repository :

coverage run run_tests.py

Releasing

manual:

  1. create an annotated tag and push it to github. git tag -a TAG and then git push --tags`
  2. git checkout TAG
  3. python -m build --sdist --wheel . --outdir dist
  4. twine check dist/*
  5. twine upload dist/* --verbose

API

.. currentmodule:: depfinder.main
.. autofunction:: get_imported_libs
.. autofunction:: iterate_over_library
.. autofunction:: simple_import_search

IPython/Jupyter Notebook support

depfinder has support for v4 Jupyter notebooks.

.. autofunction:: notebook_path_to_dependencies

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

depfinder-2.9.2.tar.gz (96.2 kB view details)

Uploaded Source

Built Distribution

depfinder-2.9.2-py3-none-any.whl (83.5 kB view details)

Uploaded Python 3

File details

Details for the file depfinder-2.9.2.tar.gz.

File metadata

  • Download URL: depfinder-2.9.2.tar.gz
  • Upload date:
  • Size: 96.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.2

File hashes

Hashes for depfinder-2.9.2.tar.gz
Algorithm Hash digest
SHA256 5acce2df2b221241640a42078143e8528c8fda15f690c2be94dd95f3096701d6
MD5 2ff80e21e69a86c9a46d91100f487a86
BLAKE2b-256 c151f6df1e85fc6c2cf76aee9de6eab6d2ebc7fa60e6b506c0781c0353ca3e1f

See more details on using hashes here.

File details

Details for the file depfinder-2.9.2-py3-none-any.whl.

File metadata

  • Download URL: depfinder-2.9.2-py3-none-any.whl
  • Upload date:
  • Size: 83.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.2

File hashes

Hashes for depfinder-2.9.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1d995bbc4ca498b787bc1bef250605d96e4c8186f3ed1023fdbaed1c68fc2536
MD5 cead629704cbd904df8781ce4ae6032a
BLAKE2b-256 24ad2234e2cb7538196d0119169ae5156e8e00f43a57e9e04cdecbf9460505a1

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page