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

use*_*788 21 python linux pyinstaller strace

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

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

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

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

SeF*_*SeF 44

你可以给一个尝试到图书馆 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
Run Code Online (Sandbox Code Playgroud)

它将打印:

INFO: Successfully saved requirements file in /home/project/location/requirements.txt
Run Code Online (Sandbox Code Playgroud)

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

pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

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

- 编辑 - 更新:

如果要寻找更复杂的版本管理器,请考虑pyvenv https://github.com/pyenv/pyenv.它在同一工具中融合virtualenv,pipreqs并对版本规范进行了一些改进pipreqs.

  • @ennepi,好的,明白了.您可能需要添加标志--use-local来获取您要查找的内容 (2认同)
  • 重要的!在路径中任何 .py 文件的开头,pipreqs 和其他扫描包都会在 BOM 字符 (UTF-8) 上失败。它失败了...所以,如果您遇到错误的字符语法错误,请删除 bom 字符(例如,使用 nodepad++...),您就可以开始了。 (2认同)

dat*_*man 2

使用以下命令为 python2 安装 yolk:

pip install yolk
Run Code Online (Sandbox Code Playgroud)

或者为 python3 安装 yolk:

pip install yolk3k
Run Code Online (Sandbox Code Playgroud)

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

yolk -l
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用Snakefood来绘制依赖关系图,如本问题中的回答。

您可以尝试进入存储解压鸡蛋的 site-packages 文件夹,然后运行以下命令:

ls -l */LICENSE*
Run Code Online (Sandbox Code Playgroud)

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