这适用于pydeps --externals
(https://github.com/thebjorn/pydeps)上的工作,其中列出了模块导入的外部软件包,例如:
c:\github\pydeps> pydeps --externals pydeps
[
"configparser",
"enum",
"stdlib_list",
"yaml"
]
意味着这四个模块是唯一需要安装的依赖软件包的导入(*)。这可以例如被输入创建(或检查)requirements.txt
文件的文件中。
我意识到这四行都存在问题,但是这个问题与最后两个(stdlib_list
和yaml
)有关,它们来自名为stdlib-list
和{{ 1}}。
IIUC无法从模块名称中找到软件包名称,即使已安装依赖项也是如此。这仍然正确吗?
我找到了PyYAML
,但似乎我不能相信它总是存在的文件(https://www.python.org/dev/peps/pep-0427/#the-dist-info-directory)。这样就可以在site-packages/*.dist-info/top_level.txt
中搜索site-packages/*.dist-info/RECORD
,是否存在用于访问此信息的现有API? <importname>/__init__.pyc?
看起来很有前途,但没有:
pkginfo
另一个选择是保留模块/导入名称->包/ pip安装名称的较大映射。我看到其他人有这个想法,例如https://github.com/bndr/pipreqs/blob/master/pipreqs/mapping,但是还有更正式的方式(或pypi包?)
(*)我没有找到import pkginfo, stdlib_list
print pkginfo.Installed(yaml).package_name # print "yaml"
版的“事物”的任何唯一且一致使用的名称。我尝试将“事物”称为程序包,并将其导入为 modules 的“事物”-我确信这是有争议的;-)