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?

Alfe
źródło

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
łodyga
źródło
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.

YPCrumble
źródło
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/[email protected]#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

qff
źródło
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
osa
źródło
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.

TrinitronX
źródło
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
Konto wyrzucenia
źródło
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