Skip to main content

查找python模块导入

项目描述

import_deps

PyPI 版本 Python 版本 CI Github 操作

查找 python 模块的导入依赖项。

import_deps基于标准库中的ast 模块,因此执行正在分析的模块。

安装

pip install import_deps

用法

import_deps旨在仅跟踪一组已知包和模块中的导入。

给定一个包含模块的包:

  • foo/__init__.py
  • foo/foo_a.py
  • foo/foo_b.py
  • foo/foo_c.py

哪里foo_a.py有以下进口:

from . import foo_b
from .foo_c import obj_c
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'):
    print(imported)

# foo.foo_c
# foo.foo_b

模块集

ModuleSet您可以通过路径或模块的完整限定名获取所有模块的列表。

by_path

请注意,key forby_path必须与 ModuleSet 初始化时提供的完全相同。

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

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

by_name

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

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

ast_imports(文件路径)

ast_imports是一个低级函数,它返回模块中 import 语句的条目列表。参数file_path可以是字符串或pathlib.Path实例。

返回值是一个包含值的 4 元组项列表:

  • 模块名称(“from”语句的,None如果是普通的import
  • 对象名称
  • 作为名字
  • 相对导入的级别(父级的数量,None如果是普通的import
from import_deps import ast_imports

ast_imports('foo.py')
# 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)

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

import_deps-0.2.0.tar.gz (6.0 kB 查看哈希

已上传 source

内置分布

import_deps-0.2.0-py3-none-any.whl (7.4 kB 查看哈希

已上传 py3