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
인증을 제공하지 않고 개인 저장소에 액세스하려고하기 때문입니다. 따라서 ssh
pip가 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+ssh
URI 체계 를 사용할 수 있지만 반드시 username을 설정해야합니다.
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
그냥 설치하고 싶다면.
암호 프롬프트가 필요없는 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
파일 을 만듭니다 . 다음 내용을 추가하십시오. 'Host'값은 원하는 값이 될 수 있습니다 (나중에 사용할 것이므로 기억하십시오). 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
암호 프롬프트없이 패키지가 설치됩니다.
SSH 키보다 토큰을 사용하는 것이 훨씬 쉽다는 것을 알았습니다. 나는 이것에 대해 많은 훌륭한 문서를 찾을 수 없었기 때문에 주로 시행 착오를 통해이 솔루션을 발견했습니다. 또한 pip & setuptools에서 설치하면 약간의 차이가 있습니다. 그러나이 방법은 둘 다 작동해야합니다.
GitHub는 (현재 2016 년 8 월 현재) 개인 저장소의 우편 / 타르볼을 쉽게 얻을 수있는 방법을 제공하지 않습니다. 따라서 setuptools가 git repo를 가리키고 있음을 알리려면 setuptools를 가리켜 야합니다.
from setuptools import setup
import os
# get 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에 포함시키는 것입니다.
- PyPI에 패키지가없는 경우에도 링크 끝에 일부 버전 번호 (여기서는
0
) 를 포함해야합니다 . 이것은 단어가 아니라 실제 숫자 여야합니다. - 당신은 서문 필요
git+
오히려 우편 / 타르 가리키는보다는 REPO를 복제의 setuptools에 알려 version
분기, 태그 또는 커밋 해시 일 수 있습니다.--process-dependency-links
pip에서 설치하는 경우 공급해야합니다
github에서 설치할 때 다음을 사용할 수있었습니다.
pip install git+ssh://git@github.com/<username>/<projectname>.git#egg=<eggname>
그러나 pip as를 실행해야했기 때문에 sudo
SSH 키가 더 이상 github에서 작동하지 않아 "git clone"이 "Permission denied (publickey)"에서 실패했습니다. 를 사용 git+https
하여 명령을 sudo로 실행하고 github에서 사용자 / 암호를 묻습니다.
sudo pip install git+https://github.com/<username>/<projectname>.git#egg=<eggname>
파일 과 함께 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"
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}
.
이 방법은 분명한 장점이 있으며 모든 종속성을 포함하는 단일 요구 사항 파일이 있습니다.
oxyum의 솔루션은이 답변에 적합 sudo
합니다. 키를 루트 용으로도 저장해야하므로 설치하는 경우 조심해야한다는 것을 지적하고 싶습니다 (예 :)/root/.ssh
.
그런 다음 입력 할 수 있습니다
sudo pip install git+ssh://git@github.com/echweb/echweb-utils.git
당신은 시도 할 수 있습니다
pip install git+git@gitlab.mycorp.com/my_name/my_repo.git
ssh없이 : ... 그것은 나를 위해 작동합니다.
github / gitlab 등에 자체 라이브러리 / 패킷이있는 경우 v2.0 버전의 구체적인 버전으로 커밋하려면 태그를 추가해야합니다. 패킷을 설치할 수 있습니다
pip install git+ssh://link/name/repo.git@v2.0
이것은 나를 위해 작동합니다. 다른 솔루션은 효과가 없었습니다.
ssh를 사용하지 않으려면 https URL에 사용자 이름과 비밀번호를 추가하십시오.
아래 코드는 비밀번호가 포함 된 작업 디렉토리에 "pass"라는 파일이 있다고 가정합니다.
export PASS=$(cat pass)
pip install git+https://<username>:$PASS@github.com/echweb/echweb-utils.git
'Programing' 카테고리의 다른 글
std :: unique_lock (0) | 2020.03.10 |
---|---|
파이썬에서 문자열을 연결하는 가장 좋은 방법은 무엇입니까? (0) | 2020.03.10 |
유형이 하위 유형인지 또는 객체 유형인지 어떻게 확인합니까? (0) | 2020.03.10 |
Android 앱을 출시하기 전에 "해야 할 일"목록 (0) | 2020.03.10 |
웹 사이트 favicon을 동적으로 변경 (0) | 2020.03.10 |