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

개인 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

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



답변

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


답변

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

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

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

pip install -e C:\repo\directory


답변

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

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

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


답변

Bitbucket 과도 작동합니다 .

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

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


답변

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

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

그냥 설치하고 싶다면.


답변

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에서 설치하는 경우 공급해야합니다

답변

암호 프롬프트가 필요없는 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