Próbuję zainstalować pakiet Python z prywatnego repozytorium GitHub. W przypadku publicznego repozytorium mogę wydać następujące polecenie, które działa dobrze:
pip install git+git://github.com/django/django.git
Jeśli jednak spróbuję tego dla prywatnego repozytorium:
pip install git+git://github.com/echweb/echweb-utils.git
Otrzymuję następujące dane wyjściowe:
Downloading/unpacking git+git://github.com/echweb/echweb-utils.git
Cloning Git repository git://github.com/echweb/echweb-utils.git to /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build
Complete output from command /usr/local/bin/git clone git://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build:
fatal: The remote end hung up unexpectedly
Cloning into /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build...
----------------------------------------
Command /usr/local/bin/git clone git://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-VRsIoo-build failed with error code 128
Chyba dlatego, że próbuję uzyskać dostęp do prywatnego repozytorium bez uwierzytelnienia. Dlatego próbowałem użyć Git +, ssh
mając nadzieję, że pip użyje mojego klucza publicznego SSH do uwierzytelnienia:
pip install git+ssh://github.com/echweb/echweb-utils.git
Daje to następujące dane wyjściowe:
Downloading/unpacking git+ssh://github.com/echweb/echweb-utils.git
Cloning Git repository ssh://github.com/echweb/echweb-utils.git to /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build
Complete output from command /usr/local/bin/git clone ssh://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build:
Cloning into /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build...
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
----------------------------------------
Command /usr/local/bin/git clone ssh://github.com/echweb/echweb-utils.git /var/folders/cB/cB85g9P7HM4jcPn7nrvWRU+++TI/-Tmp-/pip-DQB8s4-build failed with error code 128
Czy to, co próbuję osiągnąć, jest w ogóle możliwe? Jeśli tak, jak mogę to zrobić?
eval $(ssh-agent); ssh-add ~/.ssh/github_id_rsa
a następnie uruchom instalacje pip, postępując zgodnie z pip.pypa.io/en/stable/reference/pip_install/#gitOdpowiedzi:
Możesz użyć
git+ssh
schematu URI, ale musisz ustawić nazwę użytkownika:Czy widzisz tę
git@
część w URI?PS: Przeczytaj także o wdrażaniu kluczy .
PPS: W mojej instalacji schemat URI „git + ssh” działa tylko z wymaganiami „edytowalnymi”:
Pamiętaj : zmień
:
znakgit remote -v
drukowany na/
znak przed użyciem adresu pilota wpip
poleceniu:Jeśli zapomnisz, pojawi się ten błąd:
źródło
git+ssh://[email protected]/echweb/echweb-utils.git
schematu w pliku wymagań. Otworzyłam nowe pytanie tutaj: stackoverflow.com/questions/18883430/... . Każda pomoc byłaby świetna.git+ssh://[email protected]/echweb/echweb-utils.git
wrequirements.txt
prace też jest niesamowite.pip install git+ssh://[email protected]/echweb/echweb-utils.git@branch-name
Jako dodatkową technikę, jeśli masz prywatne klonowane lokalnie repozytorium, możesz:
Bardziej nowoczesnie, możesz to po prostu zrobić (a
-e
to oznacza, że nie musisz zatwierdzać zmian, zanim zostaną odzwierciedlone):źródło
Możesz to zrobić bezpośrednio za pomocą adresu URL HTTPS:
Działa to również po prostu dodając tę linię na przykład w pliku wymagania.txt w projekcie Django .
źródło
Działa również z Bitbucket :
W tym przypadku Pip użyje kluczy SSH.
źródło
Składnia pliku wymagań znajduje się tutaj:
https://pip.pypa.io/en/latest/reference/pip_install.html#requirements-file-format
Na przykład użyj:
jeśli chcesz, aby źródło pozostało po instalacji.
Lub tylko
jeśli chcesz go tylko zainstalować.
źródło
Uznałem, że łatwiej jest używać tokenów niż kluczy SSH. Nie mogłem znaleźć dużo dobrej dokumentacji na ten temat, więc natknąłem się na to rozwiązanie głównie metodą prób i błędów. Ponadto instalacja z pip i setuptools ma pewne subtelne różnice; ale ten sposób powinien działać dla obu.
GitHub nie oferuje (obecnie od sierpnia 2016 r.) Łatwego sposobu na uzyskanie zip / tarball prywatnych repozytoriów. Musisz więc wskazać setuptools, aby powiedzieć setuptools, że wskazujesz repozytorium Git:
Kilka uwag tutaj:
0
) na końcu łącza, nawet jeśli nie jest to dowolny pakiet na PyPI . To musi być liczba rzeczywista, a nie słowo.git+
poprzedzić to, aby powiedzieć setuptools, że ma sklonować repozytorium, zamiast wskazywać na zip / tarballversion
może być odgałęzieniem, znacznikiem lub skrótem zatwierdzenia--process-dependency-links
jeśli instalujesz z pipźródło
setup.py
nie powinna zawierać konkretnych zależności, tylko abstrakcyjne. To określa konkretną zależnośćsetup.py
.Wymyśliłem sposób na automatyczne „pipowanie” instalacji prywatnego repozytorium GitLab, które nie wymaga podania hasła. Podejście to wykorzystuje GitLab „Wdróż klucze” i plik konfiguracyjny SSH, więc możesz wdrożyć, używając kluczy innych niż osobiste klucze SSH (w moim przypadku do użytku przez „bota”). Być może ktoś miły dusza może zweryfikować za pomocą GitHub.
Utwórz nowy klucz SSH:
Plik powinien pojawić się jako
~/.ssh/GitLab_Robot_Deploy_Key
i~/.ssh/GitLab_Robot_Deploy_Key.pub
.Skopiuj i wklej zawartość
~/.ssh/GitLab_Robot_Deploy_Key.pub
pliku do okna dialogowego „Wdróż klucze” GitLab.Przetestuj nowy klucz wdrażania
Następujące polecenie informuje SSH, aby użył nowego klucza wdrażania do skonfigurowania połączenia. Po sukcesie powinieneś otrzymać komunikat: „Witamy w GitLab, nazwa użytkownika!”
Utwórz plik konfiguracyjny SSH
Następnie użyj edytora, aby utworzyć
~/.ssh/config
plik. Dodaj następującą zawartość. Wartość „Host” może być dowolna (pamiętaj o niej, ponieważ będziesz jej później używać). Nazwa hosta to adres URL Twojej instancji GitLab. IdentifyFile to ścieżka do pliku kluczy SSH utworzonego w pierwszym kroku.Wskaż SSH na plik konfiguracyjny
oxyum dał nam przepis na używanie pipa z SSH:
Musimy go tylko trochę zmodyfikować, aby SSH używał naszego nowego klucza do wdrażania. Robimy to, wskazując SSH na pozycję Host w pliku konfiguracyjnym SSH. Po prostu zamień „gitlab.mycorp.com” w poleceniu na nazwę hosta, której użyliśmy w pliku konfiguracyjnym SSH:
Pakiet powinien teraz zainstalować się bez pytania o hasło.
Odniesienie A
Odniesienie B
źródło
Podczas instalacji z GitHub mogłem używać:
Ale ponieważ musiałem uruchomić pip
sudo
, klucze SSH nie działały już z GitHub, a „git clone” zawiódł w przypadku „Odmowa dostępu (publickey)”. Użyciegit+https
pozwoliło mi uruchomić polecenie jako sudo i poprosić GitHub o podanie mojego użytkownika / hasła.źródło
Możesz także zainstalować zależność prywatnego repozytorium za pomocą git + https: //github.com / ... URL, podając dane logowania (login i hasło lub wdróż token) do zwijania się z
.netrc
plikiem:źródło
Jeśli chcesz zainstalować zależności z pliku wymagań na serwerze CI lub w podobny sposób, możesz to zrobić:
W moim przypadku użyłem
GIT_USER=gitlab-ci-token
iGIT_PASS=${CI_JOB_TOKEN}
.Ta metoda ma wyraźną zaletę. Masz jeden plik wymagań, który zawiera wszystkie twoje zależności.
źródło
Jeśli nie chcesz korzystać z SSH, możesz dodać nazwę użytkownika i hasło w adresie URL HTTPS.
Poniższy kod zakłada, że masz plik o nazwie „pass” w katalogu roboczym, który zawiera twoje hasło.
źródło
rozwiązanie oxyum jest w porządku dla tej odpowiedzi. Chcę tylko zaznaczyć, że musisz zachować ostrożność, jeśli instalujesz za pomocą,
sudo
ponieważ klucze muszą być również przechowywane dla roota (na przykład/root/.ssh
).Następnie możesz wpisać
źródło
--user
flagi lub virtualenv.Jeśli masz własną bibliotekę / pakiet na GitHub, GitLab itp., Musisz dodać znacznik, aby zatwierdzić konkretną wersję biblioteki, na przykład v2.0, a następnie możesz zainstalować pakiet:
To działa dla mnie. Inne rozwiązania nie działały dla mnie.
źródło
Oto szybka metoda, która zadziałała dla mnie. Po prostu rozwidlaj repozytorium i zainstaluj je z własnego konta GitHub
źródło
Wystarczy skopiować pilota z oryginalnego
git clone
polecenia (lub zgit remote -v
). Otrzymasz coś takiego:Bitbucket:
git+ssh://[email protected]:your_account/my_pro.git
GitHub:
git+ssh://[email protected]:your_account/my_pro.git
Następnie trzeba wymienić
:
z/
obok nazwy domeny.Więc zainstaluj używając:
źródło
Możesz spróbować
bez
ssh:...
. To działa dla mnie.źródło