获取python项目使用的所有模块/包

Posted

技术标签:

【中文标题】获取python项目使用的所有模块/包【英文标题】:Get all modules/packages used by a python project 【发布时间】:2016-06-18 05:49:05 【问题描述】:

我有一个 python GUI 应用程序。现在我需要知道应用程序链接到的所有库。这样我就可以检查所有库的许可证兼容性。

我尝试过使用 strace,但 strace 似乎报告了所有的包,即使它们没有被应用程序使用。

而且,我尝试了 python ModuleFinder,但它只返回 python2.7 内部的模块,而不是链接的系统级包。

那么有什么方法可以获取从我的应用程序链接的所有库?

【问题讨论】:

所有已安装软件包的 pip 冻结 pip install yolk,它会为您提供环境中所有鸡蛋的列表:yolk -l @wolendranh,我担心pip freeze 的使用,因为我猜 pip freeze 会简单地列出该虚拟环境中存在的所有包,但这可能不会被我的应用程序使用,并且我可能通过添加一些不需要的包来搞乱我的环境..如何解决这个问题?我对清理依赖项列表更感兴趣,有点!! 【参考方案1】:

你可以试试图书馆 https://github.com/bndr/pipreqs 按照指南找到 https://www.fullstackpython.com/application-dependencies.html


pipreqs 可通过pip 安装并自动生成文件requirements.txt

它包含您在 virtualenv 或正确安装的 python 中使用的版本的所有导入库。 只需输入:

pip install pipreqs
pipreqs /home/project/location

它将打印:

INFO: Successfully saved requirements file in /home/project/location/requirements.txt

此外,它与 pip install -r 命令兼容:如果您需要创建项目的 venv,或使用兼容的库更新当前 python 版本,您只需键入:

pip install -r requirements.txt

我遇到了同样的问题,这个库为我解决了这个问题。不确定它是否适用于多层依赖关系,即如果您有嵌套级别的依赖库。

-- 编辑1:

如果需要更高级的版本管理器,请同时考虑 pyvenv https://github.com/pyenv/pyenv。它将virtualenvpipreqs 混合在同一个工具中,对pipreqs 的版本规范进行了一些改进。

-- 编辑 2:

如果你想将你的库依赖拆分成不同的文件(例如 base、test、dev、docs)并有办法管理依赖树,请查看pip-compile-multi

【讨论】:

似乎安装的是 latest 版本的软件包,而不是您正在使用的当前版本。 可能得到的最佳答案之一 @ennepi:对我来说不是这样。您是在虚拟环境中使用它吗? @ennepi,好的,知道了。您可能需要添加标志 --use-local 以获取您要查找的内容 重要! pipreqs 和其他扫描包在路径中任何 .py 文件的开头都因 BOM 字符 (UTF-8) 而失败。它失败得很丑...所以,如果您遇到错误的字符语法错误,请删除 bom 字符(例如使用 nodepad++...),您就可以开始了。【参考方案2】:

安装蛋黄:

pip install yolk

调用以下命令获取您环境中的鸡蛋列表:

yolk -l

或者,您可以使用snakefood 绘制依赖关系图,如this question 中所述。

您可以尝试进入存放解压的鸡蛋的站点包文件夹,然后运行:

ls -l */LICENSE*

这将为您提供每个项目的许可证文件列表(如果它们存储在 egg 的根目录中,它们通常是)。

【讨论】:

以上是关于获取python项目使用的所有模块/包的主要内容,如果未能解决你的问题,请参考以下文章

库包模块

创建从 Web 获取 Python 模块的安装包

Python学习笔记-打包发布Python模块或程序,安装包

python18 时间模块 系统模块(os,os.path) 项目开发目录规范

全面学习 Python 包:包的构建与分发

如何导入 Python 命名空间包的所有子模块?