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.

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


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.


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.


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.

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
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.