Debian通过包内文件查找包名
saltstack笔记

pip reverse dependency

Craynic posted @ 2015年3月23日 20:53 in 未分类 with tags python pip , 12410 阅读

运行一个工具时,其先后要求包pyparsing版本>=2.0.1和<2,即安装2.0.1版本后出错要求<2,安装1.5.7后弹错要求>=2.0.1。我猜测是因为此工具依赖某包A,A依赖pyparsing。此工具依赖低版本pyparsing,依赖任意版本包A,包A默认安装了最新版本,包A的最新版本依赖高版本pyparsing,由此导致了冲突。然而pip不像apt那样智能会自动降级,它只是在安装的时候自动安装依赖而已,安装完以后就什么都不管了,删除或者降级的时候完全不关心依赖。解决问题的关键就是找到这个包A。

pip包内有记录正向依赖信息,但pip不提供反向的依赖查询。网上搜到了如下方法:

import pip
package_name = 'pymongo'
rev_dep = [
    pkg.project_name for pkg in pip.get_installed_distributions() if package_name in 
    [requirement.project_name for requirement in pkg.requires()]
]

这条语句写得非常棒,值得学习。

事后证明我的猜想是正确的,包A即cliff。

  • 无匹配

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter