假设python包A需要B,C和D;
有没有一种方法可以列出A→B C D而不加载它们?
元数据中的Requires
(yolk -M A
)通常不完整,格林
可以下载A.tar / A.egg,然后查看A / setup.py,
但其中一些非常血腥。
(我认为至少可以获得第一级依赖关系; 即使是98%的解决方案也会比雪崩下载更好。)
答案 0 :(得分:28)
sfood -fuq package.py | sfood-target-files
将列出依赖项。
`-f` tells sfood to follow dependencies recursively
`-u` tells sfood to ignore unused imports
`-q` tells sfood to be quiet about debugging information
要从标准库中过滤掉模块,可以使用
sfood -fuq package.py | sfood-filter-stdlib | sfood-target-files
正如您已经指出的那样,如果您想忽略其他目录,也可以使用sfood -I
标记。
答案 1 :(得分:13)
2.3版中的新功能。
此模块提供ModuleFinder 可用于确定的类 由a导入的模块集 脚本。 modulefinder.py也可以 作为脚本运行,给出文件名 一个Python脚本作为其参数, 之后进口的报告 模块将被打印。
我不确定它是否符合您关于不加载模块的要求。 From here:
modulefinder使用字节码检查 找到依赖关系,因此是 没有任何可能的副作用 导入模块导致的 研究
关于使用pylint或Gui2exe here
的其他提示答案 2 :(得分:6)
如果by package是指一个pip安装包(而不是带有__init__.py的目录),那么你可以使用名为pip的Python包。例如:
def get_all_package_dependencies():
"""Return dictionary of installed packages to list of package dependencies."""
return {
dist.key: [r.key for r in dist.requires()]
for dist in pip.get_installed_distributions()
}