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.