Skip to main content

find python module imports

Project description


PyPI version Python versions CI Github actions

Find python module's import dependencies.

import_deps is based on ast module from standard library, so the modules being analysed are not executed.


pip install import_deps


import_deps is designed to track only imports within a known set of package and modules.

Given a package with the modules:

  • foo/
  • foo/
  • foo/
  • foo/

Where has the following imports:

from . import foo_b
from .foo_c import obj_c

Usage (CLI)

> import_deps foo/

Usage (lib)

import pathlib
from import_deps import ModuleSet

# First initialise a ModuleSet instance with a list str of modules to track
pkg_paths = pathlib.Path('foo').glob('**/*.py')
module_set = ModuleSet([str(p) for p in pkg_paths])

# then you can get the set of imports
for imported in module_set.mod_imports('foo.foo_a'):

# foo.foo_c
# foo.foo_b


You can get a list of all modules in a ModuleSet by path or module's full qualified name.


Note that key for by_path must be exactly the as provided on ModuleSet initialization.

for mod in sorted(module_set.by_path.keys()):

# results in:
# foo/
# foo/
# foo/
# foo/


for mod in sorted(module_set.by_name.keys()):

# results in:
# foo.__init__
# foo.foo_a
# foo.foo_b
# foo.foo_c


ast_imports is a low level function that returns a list of entries for import statement in the module. The parameter file_path can be a string or pathlib.Path instance.

The return value is a list of 4-tuple items with values:

  • module name (of the "from" statement, None if a plain import)
  • object name
  • as name
  • level of relative import (number of parent, None if plain import)
from import_deps import ast_imports

# import datetime
(None, 'datetime', None, None)

# from datetime import time
('datetime', 'time', None, 0)

# from datetime import datetime as dt
('datetime', 'datetime', 'dt', 0)

# from .. import bar
(None, 'bar', None, 2)

# from .acme import baz
('acme', 'baz', None, 1)

# note that a single statement will contain one entry per imported "name"
# from datetime import time, timedelta
('datetime', 'time', None, 0)
('datetime', 'timedelta', None, 0)

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

import_deps-0.3.0.tar.gz (6.6 kB view hashes)

Uploaded Source

Built Distribution

import_deps-0.3.0-py3-none-any.whl (7.6 kB view hashes)

Uploaded Python 3

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