在每个应用程序中,都有一些库提供具有相同名称的功能。例如,可以在OpenCV,Scikit映像以及Matplotlib库中找到“ imread()”。
是否可以在所有已安装的软件包中搜索并列出具有相同名称的功能?
答案 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']