首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测是否按名称安装了python pip子包

检测是否按名称安装了python pip子包
EN

Stack Overflow用户
提问于 2017-07-04 07:28:50
回答 1查看 1.1K关注 0票数 4

Airflow模块附带一个主pip包apache-airflow和多个子包,只安装我们需要的(查看文档https://airflow.incubator.apache.org/installation.html#extra-packages)

我想测试是否安装了一个子包(例如,获取一个bash命令以了解是否安装了apache-airflow[mysql] )。

要知道是否安装了apache-airflow,我可以执行pip show apache-airflow,如果已安装,则获取0作为退出代码,否则获取1。如果我执行pip show apache-airflow['mysql'],我总是得到1作为退出代码,无论是否安装了子包。

我找不到任何解决方案。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-04 07:42:12

您在这里提到的“子包”称为"setuptools extra“。pip不会将它们记录在文件系统中的任何位置。但是,您可以通过迭代安装元数据并测试是否安装了每个依赖包来检测它们是否已安装。

幸运的是,在pkg_resources中有一个方法,does this for you

我使用jsonschema[format]进行了测试,因为它对我来说很容易安装/卸载。

安装了jsonschema[format]

代码语言:javascript
复制
$ python -c 'import pkg_resources; pkg_resources.require("jsonschema[format]")'
$ echo $?
0

没有额外的[format]依赖项

代码语言:javascript
复制
$ python -c 'import pkg_resources; pkg_resources.require("jsonschema[format]")'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 967, in require
    needed = self.resolve(parse_requirements(requirements))
  File "venv/lib/python3.6/site-packages/pkg_resources/__init__.py", line 853, in resolve
    raise DistributionNotFound(req, requirers)
pkg_resources.DistributionNotFound: The 'webcolors; extra == "format"' distribution was not found and is required by jsonschema

$ echo $?
1
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44894985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档