获取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。它将virtualenv
和pipreqs
混合在同一个工具中,对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项目使用的所有模块/包的主要内容,如果未能解决你的问题,请参考以下文章
Python学习笔记-打包发布Python模块或程序,安装包