2012-12-19 18 views
8

Jestem debianizing pakiet Python, który ma nieco dziwne zależności. Jest albo:Jakieś sposoby definiowania zgrupowanych zależności warunkowych w debian/control?

  • Zależy python2.7
  • Zależy python2.6 i python-ordereddict (moja własna konstrukcja pakietu dla ordereddict na PyPI)

Na przykład w moim setup.py mam:

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

setup(
    … 
    install_requires=deps, 
    … 
) 

Nie znalazłem niczego w dokumentacji pakietów Debiana na ten temat. Tylko z niebieskim Próbowałem pisać

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

Ale, nie jest zaskoczeniem, że jest źle składnia że nie działa:

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

używam dh_python2 i ${python:Depends} zapewnia zupełnie nieuzasadnione lista jak

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

Z takiej listy zależności, będzie to wymagać python-ordereddict dla python2.7, który nie istnieje. I oczywiście nie mogę załatać python2.7-minimal, aby powiedzieć Provides: python-ordereddict (podobnie jak w przypadku python-argparse).

Wszelkie sugestie, jak poprawnie spakować taką bibliotekę, proszę?

Odpowiedz

5

Jedną opcją jest, aby python-ordereddict zależało od, a następnie niech twój pakiet główny będzie zależał od python2.7 | python-ordereddict. Zakładam, że nie ma sensu instalować python-ordereddict z 2.7, ponieważ OrderedDict jest dostępny w tym wydaniu.

Oczywiście jest to brzydkie, ponieważ przesyła zależność głównego pakietu do biblioteki. Alternatywą jest uświadomienie sobie, że zależności muszą być formułami zdaniowymi w conjunctive normal form (CNF). Dzięki zastosowaniu distributive law z logiki zdań, można konwertować

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

do analogicznego CNF

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

(która, przyznaję, nie jest szczególnie ładny albo).