9

我正在 debianizing 一个 Python 包,它有一些奇怪的依赖关系。它要么:

  • 取决于python2.7
  • 取决于python2.6和(我在 PyPI 上python-ordereddict的自建包)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-ordereddictfor python2.7,那是不存在的。显然我不能python2.7-minimalProvides: python-ordereddict(就像它完成了python-argparse)。

请对如何正确打包此类库有任何建议吗?

4

1 回答 1

7

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

当然,这很丑陋,因为它将主包的依赖项推入库中。另一种方法是认识到依赖关系必须是合取范式(CNF) 中的命题公式。通过应用命题逻辑的分配律,你可以转换

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

到等效的 CNF

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

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

于 2012-12-19T16:03:06.147 回答