2016-10-15 34 views
10

Potrzebuję dołączyć pakiety Pythona dostępne za pośrednictwem publicznych repozytoriów Github wraz z moim pakietem Python (2.7). Mój pakiet powinien zostać zainstalowany za pomocą pip przy użyciu setup.py.Jak dołączyć git zależności w setup.py do instalacji pip

Jak dotąd, można to zrobić za pomocą dependency_links w pliku setup.py:

setuptools.setup(
    name="my_package", 
    version="1.0", 
    install_requires=[ 
     "other_package==1.2" 
    ], 
    dependency_links=[ 
     "https://github.com/user/other_package/tarball/master#egg=other_package-1.2" 
    ]  
) 

ten nadal działa, gdy pakiet zostanie zainstalowany z flagą --process-dependency-links, ale funkcjonalność dependency_links wydaje się być przestarzałe, ponieważ:

pip install git+https://github.com/user/[email protected]#egg=my_package-1.0 --process-dependency-links 

daje mi następujące ostrzeżenie:

DEPRECATION: Dependency Links processing has been deprecated and will be removed in a future release. 

Czy istnieje inny sposób uwzględnienia zależności git w pliku z obsługą instalacji pip?

Edit (17.10.2016), aby wyjaśnić mój przypadek użycia:

Powiedzmy znajdę błąd w other_package. Rozdzielam odpowiednie repo na Github, naprawiam błąd i wykonam żądanie ściągnięcia. Moje żądanie pobrania nie zostanie natychmiast zaakceptowane (lub nigdy nie będzie, ponieważ pakiet nie jest już aktywnie utrzymywany). Chciałbym rozpowszechniać my_package wraz z moim widelcem other_package i chcieć, aby użytkownicy mogli zainstalować instalację my_package bez żadnej wiedzy o szczegółach tego wymagania i bez konieczności dostarczania dodatkowych flag podczas instalacji. Użytkownicy domeny my_package powinni dodatkowo móc dołączyć my_package jako wymaganie do własnych niestandardowych pakietów.

Jak można to osiągnąć mając na myśli różne sposoby instalacji (koła, jaja, rozwój, ...)?

Odpowiedz

2

Osobiście uniknęłbym włączenia repozytoriów git jako zależności. W scenariuszach, które opisujesz, widzę dwie opcje.

gdzie pakiet jest rozwój został porzucony

Jeśli pakiet jest unmaintained, można talerza projektu i rozpowszechniać swoją własną wersję, czy można rozpowszechniać rozdwojony kod jako jako modułem własnego kodu (czyli m.in. zewnętrzna zależność bezpośrednio w pakiecie dystrybucyjnym)

Osobiście preferuję dystrybucję mojej własnej wersji.

Jeżeli pakiet ma jeszcze podać swojego bugfix

W tym przypadku, chciałbym rozprowadzić ustaloną kod jako część pakietu aż do czasu, gdy problem został rozwiązany.