Konfigurowanie tak, aby instalacja pip mogła działać z github

226

Chcemy używać pipa z githubem do instalowania prywatnych pakietów na naszych serwerach produkcyjnych. To pytanie dotyczy tego, co musi być w repozytorium github, aby instalacja zakończyła się powodzeniem.

Zakładając następujący wiersz polecenia (który uwierzytelnia się dobrze i próbuje zainstalować):

pip install git+ssh://git@github.com/BlahCo/search/tree/prod_release_branch/ProductName

Co musi znajdować się w ProductName? Czy jest to zawartość tego, co normalnie byłoby w pliku tar po uruchomieniu setup.py z opcją sdist, czy jest to rzeczywisty plik tar.gz lub coś innego?

Pytam tutaj, ponieważ wypróbowałem kilka odmian i nie mogę tego zrobić. Każda pomoc doceniona.

ccgillett
źródło

Odpowiedzi:

290

Potrzebujesz całego pakietu Pythona z setup.pyplikiem.

Nazwany pakiet footo:

foo # the installable package
├── foo
   ├── __init__.py
   └── bar.py
└── setup.py

I zainstaluj z github jak:

$ pip install git+https://github.com/myuser/foo.git@v123
or
$ pip install git+https://github.com/myuser/foo.git@newbranch

Więcej informacji na https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support

Hugo Tavares
źródło
3
Powyższe działa, dziękuję bardzo. Ale co jeśli mam wydania w podkatalogu w ramach repo, więc zamiast foo.git szukam foo / releases / ProductVer. Czy to możliwe, a jeśli tak, to w jaki sposób? Dziękuję bardzo za pomoc!
ccgillett,
4
Nie, nie jest to możliwe. pip instaluje się tylko z katalogu głównego repozytorium, przynajmniej dla git. Nie wiem, jak zachowuje się subwersja ...
Hugo Tavares
3
Jeśli chcesz to zrobić za pośrednictwem ssh i prywatnych repo, to jest post o tym, jak to zrobić
Jonathan
Dlaczego nie przekazałeś tej -eopcji (tryb edytowalny) do pipa?
Amelio Vazquez-Reina
14
Oto nowy schemat url: pip install git+https://github.com/pypa/pip.git Źródło: pip Github repo
aboutaaron
111

Miałem podobny problem, gdy musiałem instalować z repozytorium github, ale nie chciałem instalować git itp.

Najprostszym sposobem na to jest skorzystanie z archiwum zip pakietu. Dodaj /zipball/masterdo adresu URL repozytorium:

    $ pip install https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
Downloading/unpacking https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
  Downloading master
  Running setup.py egg_info for package from https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
Installing collected packages: django-debug-toolbar-mongo
  Running setup.py install for django-debug-toolbar-mongo
Successfully installed django-debug-toolbar-mongo
Cleaning up...

W ten sposób sprawisz, że pip będzie działał z repozytoriami źródeł github.

Dmitry
źródło
2
To jedyna odpowiedź, która działa również w systemie Windows
divenex
Jak można to zrobić za pomocą prywatnych repozytoriów? (jak zadaje pytanie)
Rodrigo E. Principe
29

Jeśli chcesz użyć requirements.txtpliku, będziesz potrzebować gitczegoś takiego jak poniższy wpis, aby anonimowo pobrać gałąź master w swoim requirements.txt.

Do regularnej instalacji:

git+git://github.com/celery/django-celery.git

W przypadku instalacji „ edytowalnej ”:

-e git://github.com/celery/django-celery.git#egg=django-celery

Tryb edytowalny pobiera kod źródłowy projektu do ./srcbieżącego katalogu. Pozwala pip freezena wyprowadzenie poprawnej lokalizacji pakietu github.

wieczorek1990
źródło
3
skąd pochodzą te nazwy jaj? nie można załadować pakietu w django po zamianie pakietu pip na repozytorium github
holms
@holms Lookup name w setup.py
wieczorek1990
Co jest #egg=django-celery? Czy to jest symbol zastępczy?
zaklęcie
@ enchance To nazwa pakietu.
wieczorek1990
13

Klonuj repozytorium docelowe w taki sam sposób, jak klonujesz każdy inny projekt:

git clone git@github.com:myuser/foo.git

Następnie zainstaluj go w trybie programowania:

cd foo
pip install -e .

Możesz zmienić wszystko, czego nie chcesz, a każdy kod korzystający z foopakietu użyje zmodyfikowanego kodu.

Istnieją 2 zalety tego rozwiązania:

  1. Możesz zainstalować pakiet w katalogu projektów domowych.
  2. Pakiet zawiera .gitkatalog, więc jest to zwykłe repozytorium Git. Możesz od razu wcisnąć widelec.
lawinowy
źródło
2
Mogę zaświadczyć, że to rozwiązanie jest magiczne. W moim przypadku chciałem się włamać pip, więc sklonowałem piprepozytorium, utworzyłem virtualenv, aktywowałem go i zrobiłem pip install -e .. Następnie pipw virtualenv był w trybie programowania! Jestem pod wrażeniem, że działa to nawet z samym menedżerem pakietów.
Radon Rosborough
To jest świetne! Zauważam, że kiedy instalowałem przy użyciu tej metody, a następnie uruchomiałem pip list, dany pakiet zawiera odniesienia do gałęzi Git i bezwzględnej ścieżki, z której został zainstalowany. Czy przechowuje jakieś odniesienia do nich lub czy można usunąć źródło?
MadPhysicist,
0

możesz spróbować w ten sposób w Colab

!git clone https://github.com/UKPLab/sentence-transformers.git
!pip install -e /content/sentence-transformers
import sentence_transformers
Shaina Raza
źródło