我有一个Python GUI应用程序。现在,我需要知道应用程序链接到的所有库。这样我就可以检查所有库的许可证兼容性。
我尝试使用strace,但是strace似乎报告了所有软件包,即使应用程序未使用它们。
而且,我尝试使用python ModuleFinder,但它只返回python2.7内的模块,而不返回链接的系统级包。
所以有什么办法可以获取从我的应用程序链接的所有库?
您可以尝试图书馆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命令兼容:如果您需要创建项目的虚拟版本,或者使用兼容的库更新当前的python版本,则只需键入:
pip install -r requirements.txt
我有同样的问题,这个图书馆为我解决了。不知道它是否适用于多层依赖关系,即如果您嵌套了层次的依赖库。
-编辑-更新:
如果要寻找更高级的版本管理器,请同时考虑pyvenv https://github.com/pyenv/pyenv。它在同一工具中融合了virtualenv
和pipreqs
,并且对pipreqs
的版本规范进行了一些改进。
用以下方法安装蛋黄:
pip install yolk
致电以下内容以获取您环境中的鸡蛋清单:
yolk -l
或者,您可以使用snakefood来绘制依赖关系的图形,如this question中的回答。
您可以尝试进入存储未包装鸡蛋的site-packages文件夹,然后运行此文件:
ls -l */LICENSE*
这将为您提供每个项目的许可证文件列表(如果它们通常存储在egg的根目录中。)>
由于编码原因而失败:
P:\>pipreqs --encoding cp1251 /app > x
Traceback (most recent call last):
File "i:\python37\lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "i:\python37\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "I:\Python37\Scripts\pipreqs.exe\__main__.py", line 9, in <module>
File "i:\python37\lib\site-packages\pipreqs\pipreqs.py", line 470, in main
init(args)
File "i:\python37\lib\site-packages\pipreqs\pipreqs.py", line 409, in init
follow_links=follow_links)
File "i:\python37\lib\site-packages\pipreqs\pipreqs.py", line 122, in get_all_imports
contents = f.read()
File "i:\python37\lib\encodings\cp1251.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 955: character maps to <undefined>
与其他选项相同,没有任何其他选项。没有帮助:
P:\>pipreqs --encoding utf8 /app > x
P:\>pipreqs /app > x
项目效果很好。