如何在不加载它们的情况下列出Python软件包的依赖关系?

8 浏览
0 Comments

如何在不加载它们的情况下列出Python软件包的依赖关系?

有一种方法可以列出A → B C D,而不加载它们吗?

元数据中的“Requires”(使用“yolk -M A”)经常不完整,很烦人。

可以下载A.tar / A.egg,然后查看A/setup.py,但其中一些相当庞大。

(我本以为至少可以机械化获取一级依赖关系;即使是98%的解决方案也比大量下载要好。)

相关问题:

pip-upgrade-package-without-upgrading-dependencies

0
0 Comments

问题:如何在不加载它们的情况下列出Python软件包的依赖项?

在Python中,有时候我们需要知道一个脚本所引入的所有模块,以及这些模块所依赖的其他模块。Python标准库中的modulefinder模块提供了一个ModuleFinder类,可以用于确定脚本引入的模块集合。同时,modulefinder.py也可以作为一个脚本运行,需要传入一个Python脚本的文件名作为参数,然后会打印出被引入的模块的报告。

然而,对于modulefinder模块是否满足“不加载模块”的要求,还有些不确定。在这里的一个链接中提到,modulefinder使用字节码检查来查找依赖项,因此不会导致导入的模块产生任何副作用。

除了modulefinder模块外,还有一些其他的工具可以用于查找Python包的依赖关系,如pylint和Gui2exe。然而,使用modulefinder模块可能会显示出很多无用的信息和间接依赖(可能被依赖项使用,但实际上并没有使用)。可以在这里找到一个使用modulefinder模块的示例脚本,以及一个使用AST解析方法的替代脚本(对我来说效果更好)。

总结起来,要在不加载模块的情况下列出Python软件包的依赖项,可以使用modulefinder模块的ModuleFinder类来检查脚本引入的模块。另外,还可以考虑使用AST解析方法或其他工具来获取更精确和准确的依赖关系信息。

0
0 Comments

问题:如何列出Python包的依赖项而不加载它们?

在Python中,我们可以使用pip这个包来获取已安装包的依赖项。具体的做法是通过调用pip.get_installed_distributions()方法来获取已安装的包,并遍历这些包,获取每个包的依赖项。下面是一个示例代码:

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()
    }

如果我们想要查看某个包的依赖项,可以使用命令

pip install --no-deps

来安装该包但不安装其依赖项,然后通过查看安装过程中的输出来获取依赖项的信息。

而且,我们还可以使用pprint模块来美化上述代码产生的输出结果。

需要注意的是,方法get_installed_distributions()已经被废弃,我们可以参考这里来获取替代方法。

0
0 Comments

Snakefood是一个Python软件包,用于查找Python包的依赖关系。它可以通过以下命令来列出Python包的依赖关系:

sfood -fuq package.py | sfood-target-files 

其中,

-f

参数告诉sfood递归跟踪依赖关系,

-u

参数告诉sfood忽略未使用的导入,

-q

参数告诉sfood在调试信息方面保持安静。

为了从标准库中过滤掉模块,可以使用以下命令:

sfood -fuq package.py | sfood-filter-stdlib | sfood-target-files 

如果还有其他要忽略的目录,可以使用sfood -I标志。

然而,有用户报告说sfood-filter-stdlib命令并不能完全从Python标准库中过滤掉模块。这是因为sfood-filter-stdlib命令中硬编码了/usr/lib/python路径,而且对于sfood-imports命令也不起作用。

对此,有人建议使用sfood-filter-stdlib命令从Python标准库中删除条目。同时,还提供了一个有关2008年打包方法的优秀链接

另外,还有人报告说在Ubuntu 13.04上无法找到sfood-target-files命令。但是在Ubuntu 12.04和14.04上都可以找到。建议尝试按照官方文档中的安装指南安装或升级到支持的Ubuntu版本。

总结起来,Snakefood是一个用于查找Python软件包依赖关系的工具,通过一系列命令可以列出依赖关系,并可以通过sfood-filter-stdlib命令过滤掉Python标准库中的模块。然而,在某些情况下,这些命令可能会出现问题,例如sfood-filter-stdlib命令中硬编码的路径以及sfood-target-files命令在某些Ubuntu版本中无法找到。

0