2012-12-19 36 views
8

Tôi đang debianizing một gói Python, trong đó có một chút phụ thuộc lạ. Nó hoặc là:Bất kỳ cách nào để xác định các phụ thuộc nhóm được nhóm trong debian/control?

  • Phụ thuộc vào python2.7
  • Phụ thuộc vào python2.6python-ordereddict (gói tự xây dựng của tôi cho ordereddict trên PyPI)

Ví dụ, trong setup.py của tôi, tôi có:

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

setup(
    … 
    install_requires=deps, 
    … 
) 

Tôi chưa tìm thấy bất kỳ thứ gì trong tài liệu đóng gói Debian về vấn đề này. Chỉ cần ra khỏi màu xanh Tôi đã thử viết

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

Nhưng, không có gì đáng ngạc nhiên, đó là một cú pháp sai mà không làm việc:

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

Tôi đang sử dụng dh_python2 và ${python:Depends} cung cấp khá bất hợp lý danh sách như

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

với danh sách phụ thuộc như vậy, nó sẽ đòi hỏi python-ordereddict cho python2.7, điều đó không tồn tại. Và rõ ràng là tôi không thể vá python2.7-minimal để nói Provides: python-ordereddict (giống như được thực hiện với python-argparse).

Bất kỳ đề xuất nào về cách gói đúng thư viện như vậy, vui lòng?

Trả lời

5

Một tùy chọn là để cho python-ordereddict phụ thuộc vào python2.6, sau đó để gói chính của bạn phụ thuộc vào python2.7 | python-ordereddict. Tôi giả sử nó không có ý nghĩa để cài đặt python-ordereddict với 2,7, kể từ OrderedDict có sẵn trong bản phát hành đó.

Tất nhiên, điều đó thật xấu vì nó đẩy sự phụ thuộc của gói chính vào thư viện. Cách khác là nhận ra rằng các phụ thuộc phải là các công thức đề xuất trong conjunctive normal form (CNF). Bằng cách áp dụng các distributive law của logic mệnh đề, bạn có thể chuyển đổi

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

để CNF tương đương

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

(mà, tôi thừa nhận, không phải là đặc biệt xinh đẹp hoặc là).

Các vấn đề liên quan