pip를 사용하여 개인 GitHub 리포지토리에서 패키지를 설치할 수 있습니까?


349

개인 GitHub 리포지토리에서 Python 패키지를 설치하려고합니다. 공용 저장소의 경우 다음 명령을 실행하면 정상적으로 작동합니다.

pip install git+git://github.com/django/django.git

그러나 개인 저장소에 이것을 시도하면 :

pip install git+git://github.com/echweb/echweb-utils.git

다음과 같은 결과가 나타납니다.

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

인증을 제공하지 않고 개인 저장소에 액세스하려고하기 때문입니다. 따라서 sshpip가 SSH 공개 키를 사용하여 인증하기를 기대하면서 Git +를 사용하려고했습니다 .

pip install git+ssh://github.com/echweb/echweb-utils.git

결과는 다음과 같습니다.

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

내가 달성하려고하는 것이 가능합니까? 그렇다면 어떻게해야합니까?


2
확실히 정답은 아니지만 repo를 수동으로 복제 한 다음 github 대신 pip를 localhost로 지정하면 생산성을 높이려는 경우이를 지나칠 수 있습니다.
nmichaels

@nmicheals 지금까지 내가 한 일이지만, 별도의 virtualenvs가있는 많은 웹 사이트에 배포하기 위해 요구 사항 파일에 넣어야합니다.
Adam J. Forster

그는 확실히 : 이미 github에 ssh 키 지원을 설정 했습니까? 그것이 작동하지 않는다면 .... git + git : // user : pass@github.com / ....을 URI로 사용해 보셨습니까?
Jason LeBrun

pip.pypa.io/en/stable/reference/pip_install/#git에eval $(ssh-agent); ssh-add ~/.ssh/github_id_rsa 따라 pip 설치를 사용 하고 실행 하십시오
Darren Weber

답변:


375

git+sshURI 체계를 사용할 수 있지만 사용자 이름을 설정 해야합니다 .

pip install git+ssh://git@github.com/echweb/echweb-utils.git

당신은 볼 수 있습니까 git@URI를에 부분?

추신 : 또한 배포 키 에 대해 읽으십시오 .

PPS : 설치시 "git + ssh"URI 체계는 "편집 가능"요구 사항에서만 작동합니다.

pip install -e URI#egg=EggName

알아두기 : 명령 에서 리모트 주소를 사용하기 전에 :문자로 git remote -v인쇄 하는 문자를 변경하십시오 ./pip

$ git remote -v
origin  git@github.com:echweb/echweb-utils.git (fetch)
                      ^ change this to a '/' character

잊어 버린 경우 다음 오류가 발생합니다.

ssh: Could not resolve hostname github.com:echweb:
         nodename nor servname provided, or not known

3
덕분에 git @ 부분이 누락되었습니다. 우연히 'pip install git + ssh : //git@github.com/echweb/echweb-utils.git'명령이 작동했지만 -e 스위치가 필요하지 않았습니다.
Adam J. Forster

2
.ssh / config 파일을 사용하여 올바른 사용자 이름을 설정할 수도 있습니다
Stefano

2
이것은 나를 위해 일했지만 지금은 작동하지 않습니다 git+ssh://git@github.com/echweb/echweb-utils.git. 요구 사항 파일에 올바른 구성표를 사용하고 있습니다. 나는 여기에 새로운 질문을 열어 : stackoverflow.com/questions/18883430/...를 . 어떤 도움이라도 좋을 것입니다.
Robeezy

2
완전한. 퍼팅 git+ssh://git@github.com/echweb/echweb-utils.gitrequirements.txt굉장하다, 너무 작품.
Avindra Goolcharan

2
특정 지점에서 설치하려는 경우 :pip install git+ssh://git@github.com/echweb/echweb-utils.git@branch-name
Guilherme Beltramini

73

추가 기술로 개인 저장소를 로컬로 복제 한 경우 다음을 수행 할 수 있습니다.

pip install git+file://c:/repo/directory

보다 현대적인 방법으로이 작업을 수행 할 수 있습니다 (그리고 -e변경 사항이 반영되기 전에 변경 사항을 커밋하지 않아도 됨).

pip install -e C:\repo\directory

9
이것은 매우 도움이되었습니다. 분명히 로컬 변경 사항은 pip를 통해 설치하기 전에 git-commit '해야합니다.
ramhiser

5
사실입니다. 파일의 작업 복사본이 아닌 git 저장소 (.git)에서 가져옵니다.
Scott Stafford 12

47

다음과 같이 HTTPS URL을 사용하여 직접 수행 할 수 있습니다.

pip install git+https://github.com/username/repo.git

예를 들어 Django 프로젝트 의 requirements.txt에 해당 줄을 추가해도됩니다 .


19
비공개 리포지토리의 경우 콘솔에서 사용자 이름 / 암호 프롬프트를 트리거합니다. 이는 아마도 원하는 것이 아닙니다.
rascalking

31

Bitbucket 과도 작동합니다 .

pip install git+ssh://git@bitbucket.org/username/projectname.git

이 경우 Pip은 SSH 키를 사용합니다.


15

요구 사항 파일의 구문은 다음과 같습니다.

https://pip.pypa.io/en/latest/reference/pip_install.html#requirements-file-format

예를 들어 다음을 사용하십시오.

-e git+http://github.com/rwillmer/django-behave#egg=django-behave

설치 후 소스를 고수하려는 경우.

아니면 그냥

git+http://github.com/rwillmer/django-behave#egg=django-behave

그냥 설치하고 싶다면.


요구 사항 파일 구문의 URL이 변경되었습니다. 새로운 URL은 다음과 같습니다. pip.pypa.io/en/latest/reference/…
sphere

15

SSH 키보다 토큰을 사용하는 것이 훨씬 쉽다는 것을 알았습니다. 나는 이것에 대해 많은 훌륭한 문서를 찾을 수 없었기 때문에 주로 시행 착오를 통해이 솔루션을 발견했습니다. 또한 pip 및 setuptools에서 설치하면 약간의 차이가 있습니다. 그러나이 방법은 둘 다 작동해야합니다.

GitHub는 (현재 2016 년 8 월 현재) 개인 저장소의 우편 / 타르볼을 얻는 쉬운 방법을 제공하지 않습니다. 따라서 setuptools가 Git 저장소를 가리키고 있음을 알리려면 setuptools를 가리켜 야합니다.

from setuptools import setup
import os
# Get the deploy key from https://help.github.com/articles/git-automation-with-oauth-tokens/
github_token = os.environ['GITHUB_TOKEN']

setup(
    # ...
    install_requires='package',
    dependency_links = [
    'git+https://{github_token}@github.com/user/{package}.git/@{version}#egg={package}-0'
        .format(github_token=github_token, package=package, version=master)
        ]

여기 몇 가지 메모가 있습니다.

  • 개인 리포지토리의 경우 GitHub로 인증해야합니다. 내가 찾은 가장 간단한 방법은 OAuth 토큰 을 생성 하여 환경에 놓은 다음 URL에 포함시키는 것입니다.
  • 패키지가없는 경우에도 링크 끝에 일부 버전 번호 (여기서는 0) 를 포함해야 합니다.PyPI에 . 이것은 단어가 아니라 실제 숫자 여야합니다.
  • 당신은 서문 필요 git+오히려 우편 / 타르 가리키는 것보다, 저장소를 복제의 setuptools에 알려
  • version 분기, 태그 또는 커밋 해시 일 수 있습니다.
  • --process-dependency-linkspip에서 설치하는 경우 공급해야합니다

1
참고 setup.py는 구체적인 종속성을 포함해서는 안되며 추상적 인 종속성 만 포함해야합니다. 에 대한 구체적인 종속성을 지정합니다 setup.py.
Jorge Leitao

1
pip 버전 19.0 릴리스에서는 --process-dependency-links 옵션이 더 이상 사용되지 않습니다.
yardstick17

14

암호 프롬프트가 필요없는 GitLab 개인 저장소를 자동으로 'pip install'하는 방법을 찾았습니다. 이 방법은 GitLab "Deploy Keys"및 SSH 구성 파일을 사용하므로 개인 SSH 키 이외의 키를 사용하여 배포 할 수 있습니다 (제 경우에는 '봇'이 사용함). 아마도 친절한 영혼은 GitHub를 사용하여 확인할 수 있습니다.

새 SSH 키를 작성하십시오.

ssh-keygen -t rsa -C "GitLab_Robot_Deploy_Key"

파일이 ~/.ssh/GitLab_Robot_Deploy_Key및 로 표시되어야합니다 ~/.ssh/GitLab_Robot_Deploy_Key.pub.

내용을 복사하여 붙여 넣기 ~/.ssh/GitLab_Robot_Deploy_Key.pub파일 하여 GitLab "Deploy Keys"대화 상자에 .

새 배포 키 테스트

다음 명령은 SSH가 새 배치 키를 사용하여 연결을 설정하도록 지시합니다. 성공하면 "GitLab, UserName에 오신 것을 환영합니다!"라는 메시지가 나타납니다.

ssh -T -i ~/.ssh/GitLab_Robot_Deploy_Key git@gitlab.mycorp.com

SSH 구성 파일 작성

그런 다음 편집기를 사용하여 ~/.ssh/config파일 을 만듭니다 . 다음 내용을 추가하십시오. '호스트'값은 원하는 값이 될 수 있습니다 (나중에 사용할 것이므로 기억하십시오). HostName은 GitLab 인스턴스의 URL입니다. 식별 파일은 첫 번째 단계에서 작성한 SSH 키 파일의 경로입니다.

Host GitLab
  HostName gitlab.mycorp.com
  IdentityFile ~/.ssh/GitLab_Robot_Deploy_Key

SSH를 구성 파일로 지정

oxyum은 SSH와 함께 pip를 사용하는 레시피를 제공했습니다.

pip install git+ssh://git@gitlab.mycorp.com/my_name/my_repo.git

SSH가 새로운 배포 키를 사용하도록 약간 수정하면됩니다. SSH를 SSH 구성 파일의 호스트 항목으로 지정하여이를 수행합니다. 명령의 'gitlab.mycorp.com'을 SSH 구성 파일에서 사용한 호스트 이름으로 바꾸십시오.

pip install git+ssh://git@GitLab/my_name/my_repo.git

암호 프롬프트없이 패키지가 설치됩니다.

참조 A
참조 B


7

GitHub에서 설치할 때 다음을 사용할 수있었습니다.

pip install git+ssh://git@github.com/<username>/<projectname>.git#egg=<eggname>

그러나 pip as를 실행해야했기 때문에 sudoSSH 키가 더 이상 GitHub와 작동하지 않아 "git clone"이 "Permission denied (publickey)"에서 실패했습니다. 를 사용 git+https하여 명령을 sudo로 실행하고 GitHub가 사용자 / 암호를 묻도록했습니다.

sudo pip install git+https://github.com/<username>/<projectname>.git#egg=<eggname>

다른 사용자 계정이 프로젝트에 액세스해야합니까? 그렇지 않다면, 너드 월러의 제안
Michael-Clay Shirky의 위치

7

파일 과 함께 curl 에 대한 로그인 자격 증명 (로그인 및 비밀번호 또는 배포 토큰)을 제공 하여 git + https : //github.com / ... URL을 통해 개인 저장소 종속성을 설치할 수도 있습니다..netrc

echo "machine github.com login ei-grad password mypasswordshouldbehere" > ~/.netrc
pip install "git+https://github.com/ei-grad/my_private_repo.git#egg=my_private_repo"

5

CI 서버 등 의 요구 사항 파일에서 종속성을 설치하려는 경우 다음 을 수행 할 수 있습니다.

git config --global credential.helper 'cache'
echo "protocol=https
host=example.com
username=${GIT_USER}
password=${GIT_PASS}
" | git credential approve
pip install -r requirements.txt

내 경우에는, 내가 사용 GIT_USER=gitlab-ci-token하고 GIT_PASS=${CI_JOB_TOKEN}.

이 방법은 분명한 장점이 있습니다. 모든 종속성을 포함하는 단일 요구 사항 파일이 있습니다.


3

SSH를 사용하지 않으려면 HTTPS URL에 사용자 이름과 비밀번호를 추가 할 수 있습니다.

아래 코드는 비밀번호가 포함 된 작업 디렉토리에 "pass"라는 파일이 있다고 가정합니다.

export PASS=$(cat pass)
pip install git+https://<username>:$PASS@github.com/echweb/echweb-utils.git

0

oxyum의 솔루션은이 답변에 좋습니다. sudo루트를 위해 키도 저장해야하기 때문에 사용하여 설치하는 경우 조심해야한다고 지적하고 싶습니다 (예 :/root/.ssh .

그런 다음 입력 할 수 있습니다

sudo pip install git+ssh://git@github.com/echweb/echweb-utils.git

6
쉬운 해결책 : sudo를 설치하지 마십시오. 대신 --user플래그 또는 virtualenv를 사용하십시오 .
nerdwaller 2016

0

GitHub, GitLab 등에 자체 라이브러리 / 패키지가있는 경우 구체적인 버전의 라이브러리 (예 : v2.0)로 커밋 할 태그를 추가 한 다음 패키지를 설치할 수 있습니다.

pip install git+ssh://link/name/repo.git@v2.0

이것은 나를 위해 작동합니다. 다른 솔루션은 효과가 없었습니다.


0

나를 위해 일한 빠른 방법이 있습니다. 단순히 repo를 포크하고 자신의 GitHub 계정에서 설치하십시오.

pip install git+https://github.com/yourName/repoName

-1

원래 git clone명령 (또는)에서 리모컨을 복사하면 git remote -v됩니다. 다음과 같은 것을 얻을 것입니다 :

  • 비트 버킷 : git+ssh://git@bitbucket.org:your_account/my_pro.git

  • GitHub : git+ssh://git@github.com:your_account/my_pro.git

다음으로, 당신은 교체해야 :/도메인 이름 옆에.

따라서 다음을 사용하여 설치하십시오.

pip install git+ssh://git@bitbucket.org/your_account/my_pro.git

"copy git clone command"는 무슨 뜻 입니까? " 'git clone'명령을 사용한 복사" 를 의미 합니까? 또는 " 'git clone'명령을 복사 하시겠습니까? " 또는 다른 것? ( 여기서 주석이 아닌 답변편집하여 응답 하십시오 (적절한 경우). 미리 감사드립니다.).
Peter Mortensen

-2

당신은 시도 할 수 있습니다

pip install git+git@gitlab.mycorp.com/my_name/my_repo.git

없이 ssh:.... 그것은 나를 위해 작동합니다.


OP가 github을 요청했습니다.
Karuhanga
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.