在所有程序包中搜索特定功能

时间:2019-07-18 07:26:24

标签: python package

在每个应用程序中,都有一些库提供具有相同名称的功能。例如,可以在OpenCV,Scikit映像以及Matplotlib库中找到“ imread()”。

是否可以在所有已安装的软件包中搜索并列出具有相同名称的功能?

2 个答案:

答案 0 :(得分:2)

您可以从项目目录(如果使用的是虚拟环境)或主目录(假设已安装的软件包在grep中)使用~/.local/lib/python3.7/site-packages

grep -R "def imread"

输出:

venv/Lib/site-packages/matplotlib/image.py:def imread(fname, format=None):
venv/Lib/site-packages/matplotlib/pyplot.py:def imread(fname, format=None):
venv/Lib/site-packages/scipy/misc/pilutil.py:def imread(name, flatten=False, mode=None):
venv/Lib/site-packages/scipy/ndimage/io.py:def imread(fname, flatten=False, mode=None):

答案 1 :(得分:1)

根据我们的谈话。该脚本仅限于检查所有已加载模块中的特定功能。结果将是一个字典,其中的键是函数,值是所有模块的集合,您可以在其中找到相同的功能。

多个键表示同一个名称的多个定义。

import sys
from collections import defaultdict
import types

def find_functions_by(function_name):
    definitions = defaultdict(set)
    for _, module in sys.modules.items():
        if fn in dir(module):
            definitions[getattr(module, fn)].add(module)
    return definitions


# Just testing:
import skimage
import matplotlib

fn = "imread"
[print("Found function:", key, list(map(lambda x: x.__name__, modules))) for key, modules in find_functions_by(fn).items()]

在我的计算机上,它提供输出:

Found function: <function imread at 0x0DE8D8A0> ['skimage.io', 'skimage.io._io', 'skimage.data']
Found function: <function imread at 0x0DE621E0> ['skimage.external.tifffile.tifffile', 'skimage.external.tifffile']
Found function: <function imread at 0x0E283ED0> ['skimage.io._plugins.imageio_plugin', 'imageio.core.functions', 'imageio', 'imageio.plugins.lytro']
Found function: <function imread at 0x0EA56DF8> ['matplotlib.image', 'skimage.io._plugins.matplotlib_plugin']