在debian/control文件中如何定义分组的条件依赖关系?

9

我正在对一个Python软件包进行Debian打包,它的依赖关系有点奇怪。要么:

  • 依赖于python2.7
  • 依赖于python2.6python-ordereddict(我在PyPI上自己构建的ordereddict软件包)

例如,在我的setup.py文件中我有:

deps = ["Flask >=0.8"]
if not hasattr(collections, "OrderedDict"): # Python 2.6
    deps.append("ordereddict")

setup(
    …
    install_requires=deps,
    …
)

我在Debian的打包文档中没有找到这方面的内容。但是我随意尝试编写了以下代码:

Depends: ..., python2.7 | (python2.6, python-ordereddict)

但是,毫不意外的是,这是一种错误的语法,无法正常工作:

dpkg-gencontrol: warning: can't parse dependency (python2.6

我正在使用dh_python2,${python:Depends}提供的列表非常不合理,例如

Depends: python2.7 | python2.6, python (>= 2.7.1-0ubuntu2),
    python (<< 2.8), python-flask, python-ordereddict

有了这样的依赖列表,它将需要 python-ordereddict 适用于 python2.7,但这并不存在。显然,我不能修补 python2.7-minimal 来说 Provides: python-ordereddict(就像 python-argparse 一样)。
如果对如何正确打包这样的库有任何建议,请告诉我。
1个回答

7
一种选择是让python-ordereddict依赖于python2.6,然后让您的主要软件包依赖于python2.7 | python-ordereddict。我假设在2.7中安装python-ordereddict没有意义,因为该版本中已经有了OrderedDict
当然,这很丑陋,因为它将主包的依赖关系推到库中。另一种选择是意识到依赖关系必须是命题公式,并且处于合取范式(CNF)中。通过应用命题逻辑的分配律,您可以进行转换。
python2.7 | (python2.6, python-ordereddict)

转换为等价的CNF形式

python2.7 | python2.6, python2.7 | python-ordereddict

(我承认)这并不是特别美观。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接