Jak podać w pliku wymagania.txt bezpośrednie źródło github


448

Zainstalowałem bibliotekę za pomocą polecenia

pip install git+git://github.com/mozilla/elasticutils.git

który instaluje go bezpośrednio z repozytorium Github. To działa dobrze i chcę mieć tę zależność w sobie requirements.txt. Szukałem w innych biletów, takich jak ten , ale to nie rozwiązuje mojego problemu. Jeśli umieszczę coś takiego

-f git+git://github.com/mozilla/elasticutils.git
elasticutils==0.7.dev

w requirements.txtpliku pip install -r requirements.txtwynikiem są następujące dane wyjściowe:

Downloading/unpacking elasticutils==0.7.dev (from -r requirements.txt (line 20))
  Could not find a version that satisfies the requirement elasticutils==0.7.dev (from -r requirements.txt (line 20)) (from versions: )
No distributions matching the version for elasticutils==0.7.dev (from -r requirements.txt (line 20))

Dokumentacja pliku wymagań nie wspomina linki za pomocą git+gitspecyfikator protokołu, więc może jest to po prostu nie działa.

Czy ktoś ma rozwiązanie mojego problemu?

Odpowiedzi:


327

Składni „edytowalnych” pakietów można użyć requirements.txtdo importowania pakietów z różnych VCS (git, hg, bzr, svn) :

-e git://github.com/mozilla/elasticutils.git#egg=elasticutils

Możliwe jest również wskazanie konkretnego zatwierdzenia:

-e git://github.com/mozilla/elasticutils.git@000b14389171a9f0d7d713466b32bc649b0bed8e#egg=elasticutils

3
Nie udało mi się wyewidencjonować lokalnie takiej edytowalnej wersji (prawdopodobnie z powodu problemów ze składnią) i dlatego skorzystałem z git+gitwariantu (który działał). W requirements.txttwojej wersji działa, więc bardzo dziękuję :)
Alfe

1
docsLink nie działa dla mnie; Użyłem starszego .
osa

42
Nie zrozumiałem, że pokazana składnia jest dokładnie zgodna z wymaganiami, tzn. Przed -e nie ma nazwy pakietu.
mędrzec

5
Dodanie „-e” nie jest konieczne w zależności od tego, czy chcesz, aby pakiet był w trybie edytowalnym, zobacz odpowiedź @qff.
Niebo

17
Nie powinno być -e git+git://zamiast -e git://? Mam komunikat „powinna być ścieżka do lokalnego projektu lub adres URL VCS rozpoczynający się od komunikatu o błędzie svn +, git +, hg + lub bzr +” .
Bruce Wayne

424

Zwykle twój requirements.txtplik wyglądałby mniej więcej tak:

package-one==1.9.4
package-two==3.7.1
package-three==1.0.1
...

Aby określić repozytorium Github, nie potrzebujesz package-name==konwencji.

Poniższe przykłady są aktualizowane package-twoprzy użyciu repozytorium GitHub. Tekst pomiędzy @i #oznacza specyfikę pakietu.

Określ hash zatwierdzenia ( 41b95ecw kontekście zaktualizowanego requirements.txt):

package-one==1.9.4
git+git://github.com/path/to/package-two@41b95ec#egg=package-two
package-three==1.0.1

Podaj nazwę oddziału ( master):

git+git://github.com/path/to/package-two@master#egg=package-two

Określ tag ( 0.1):

git+git://github.com/path/to/package-two@0.1#egg=package-two

Określ release ( 3.7.1):

git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-two

Uwaga #egg=package-two: tutaj nie ma komentarza, należy wyraźnie podać nazwę pakietu

Ten post na blogu zawiera więcej dyskusji na ten temat.


54
Ze wszystkich innych odpowiedzi nie mogę uwierzyć, że żadna z nich nie pokazała pliku wymagań z mieszanką „normalnych” wymagań z gitem, który został do niego porównany. Tak bardzo mnie zaskoczyły -eopcje, które wyglądały jak opcje wiersza poleceń ( ). Dzięki za pokazanie mieszanki obu, abym mógł to umieścić w kontekście!
Hendy

Wskazywanie na wersję 3.7.1z git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-twonie działało dla mnie. To, co zadziałało, było dla mnie git+git://github.com/path/to/package-two@3.7.1#egg=package-two.
Jean Paul

Ta odpowiedź była bardzo pomocna. Jedna rzecz jednak. Ci, git+git://...notacja jakoś spowodowały błędy ssh względne na moim Linuksie. Skończyło się to na przełączeniu ich na git+https://...notację, a potem działały idealnie.
RayLuo

174

requirements.txtumożliwia następujące sposoby określania zależności od pakietu w repozytorium git od pip 7.0: 1

[-e] git+git://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+https://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+ssh://git.myproject.org/SomeProject#egg=SomeProject
-e git+git@git.myproject.org:SomeProject#egg=SomeProject

W przypadku Github oznacza to, że możesz to zrobić (zauważ pominięte -e):

git+git://github.com/mozilla/elasticutils.git#egg=elasticutils

Dlaczego dodatkowa odpowiedź?
W -einnych odpowiedziach byłem nieco zdezorientowany flagą, więc oto moje wyjaśnienie:

-eLub --editableśrodki znacznika, że jest instalowany w <venv path>/src/SomeProjecti dlatego nie w głęboko ukryty <venv path>/lib/pythonX.X/site-packages/SomeProjectewentualnie będzie umieszczony w. 2

Dokumentacja


9
Pamiętaj jednak, że jeśli pominiesz, -enastępny pip freezemoże nie dać poprawnych wyników dla tego pakietu
Maccesch

82

Najpierw zainstaluj za pomocą git+gitlub git+https, w dowolny sposób, jaki znasz. Przykład instalacji kronokgałęzi brabeionprojektu:

pip install -e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion

Po drugie, użyj, pip freeze > requirements.txtaby uzyskać właściwą rzecz w swoim requirements.txt. W takim przypadku otrzymasz

-e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion-master

Po trzecie, przetestuj wynik:

pip uninstall brabeion
pip install -r requirements.txt

4
pip freeze wciąż wyświetla pakiet, którego używam jako zamkniętą, przednią wersję. a nie bezpośrednia realizacja transakcji na
githubie

4
Aby wygenerować adres URL, musisz użyć opcji „-e” do „pip freeze”
Janusz Skonieczny

2
pip 9.0.1:no such option: -e
sds

Masz na myśli git+https? W tekście, który mówisz, git+giti w kodziegit+https
Antony Hatchkins

@AntonyHatchkins naprawione.
osa

17

Od v1.5wydania pipa (wydanego 1 stycznia 2014 r .: CHANGELOG , PR ) możesz również określić podkatalog repozytorium git, aby zawierał moduł. Składnia wygląda następująco:

pip install -e git+https://git.repo/some_repo.git#egg=my_subdir_pkg&subdirectory=my_subdir_pkg # install a python package from a repo subdirectory

Uwaga: Jako autor modułu pip, najlepiej byłoby, gdybyś mógł opublikować swój moduł we własnym repozytorium najwyższego poziomu. Ta funkcja jest jednak przydatna w przypadku niektórych istniejących repozytoriów zawierających moduły python w podkatalogach. Możesz być zmuszony do zainstalowania ich w ten sposób, jeśli nie zostaną one również opublikowane w pypi.


1

Uważam, że trochę trudno jest pobrać pip3 (v9.0.1, zainstalowany przez menedżera pakietów Ubuntu 18.04), aby faktycznie zainstalować to, co mu polecam. Publikuję tę odpowiedź, aby oszczędzić czas każdemu, kto napotka ten problem.

Nie udało się wstawić tego do pliku wymagania.txt:

git+git://github.com/myname/myrepo.git@my-branch#egg=eggname

Przez „nieudane” mam na myśli to, że podczas pobierania kodu z Git zakończyło się instalowaniem oryginalnej wersji kodu, takiego jak znalezione w PyPi, zamiast kodu w repozytorium w tej gałęzi.

Jednak instalacja commmit zamiast nazwy oddziału działa:

git+git://github.com/myname/myrepo.git@d27d07c9e862feb939e56d0df19d5733ea7b4f4d#egg=eggname

Czy na pewno Twój oddział jest również zdalny?
Alfe,

To nie wskazywało na lokalną kopię, jeśli o to się zastanawiasz.
Wyrzuć konto
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.