有哪些方法可以在debian/control中定义分组条件依赖项?

drd*_*man 9 python debian packaging dpkg python-2.x

我正在对一个Python包进行debianization,它有一些奇怪的依赖.它要么:

  • 依赖于取决于 python2.7
  • 取决于python2.6python-ordereddict(我ordereddict在PyPI上的自建包)

例如,我setup.py自己:

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

setup(
    …
    install_requires=deps,
    …
)
Run Code Online (Sandbox Code Playgroud)

我没有在Debian包装文档中找到任何关于此事的内容.突然之间,我试过写作

Depends: ..., python2.7 | (python2.6, python-ordereddict)
Run Code Online (Sandbox Code Playgroud)

但是,毫不奇怪,这是一个错误的语法,不起作用:

dpkg-gencontrol: warning: can't parse dependency (python2.6
Run Code Online (Sandbox Code Playgroud)

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

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

有了这样的依赖关系列表,它会要求python-ordereddict进行python2.7,不存在.显然我无法补丁python2.7-minimalProvides: python-ordereddict(就像它完成的那样python-argparse).

关于如何正确打包这样的库的任何建议,好吗?

Fre*_*Foo 6

一种选择是让python-ordereddict依赖python2.6,然后让你的主包依赖python2.7 | python-ordereddict.我认为python-ordereddict使用2.7 进行安装是没有意义的,因为OrderedDict在该版本中可用.

当然,这很难看,因为它将主包的依赖性推入了库中.另一种方法是认识到依赖关系必须是联合正规形式(CNF)的命题公式.通过应用命题逻辑的分配律,你可以转换

python2.7 | (python2.6, python-ordereddict)
Run Code Online (Sandbox Code Playgroud)

相当于CNF

python2.7 | python2.6, python2.7 | python-ordereddict
Run Code Online (Sandbox Code Playgroud)

(我承认,这也不是特别漂亮).