programing

개인 GitHub 저장소에서 pip을 사용하여 패키지를 설치할 수 있습니까?

yoursource 2022. 10. 23. 16:13
반응형

개인 GitHub 저장소에서 pip을 사용하여 패키지를 설치할 수 있습니까?

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

이는 인증을 제공하지 않고 개인 저장소에 액세스하려고 하기 때문일 수 있습니다.그래서 Git+를 사용하려고 했다.ssh하는 것을 하고 있습니다.pip ssh SSH 용 、 SSH の hoping hoping hoping hoping 。

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 스킴이지만, 유저명을 설정할 필요가 있습니다.URI 의 일부에 주의해 주세요.

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

전개 키에 대해서도 읽어 주세요.

PS: 인스톨에서는, 「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 프로젝트에서 txt를 사용합니다.

Bitbucket에서도 동작합니다.

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

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

SSH 키보다 토큰을 사용하는 것이 훨씬 쉽다는 것을 알았습니다.이에 대한 좋은 문서를 찾을 수 없었기 때문에 주로 시행착오를 통해 이 솔루션을 발견하게 되었습니다.또, pip 와 setuptools 로부터의 인스톨에는 몇개의 미묘한 차이가 있습니다만, 이 방법은 양쪽 모두에 유효합니다.

GitHub don't (현재 2016년 8월 현재)는 개인 저장소의 zip/tarball을 쉽게 얻을 수 있는 방법을 제공합니다.따라서 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에 포함시키는 것입니다.
  • 일부 버전 번호를 포함해야 합니다(여기서 참조).0PyPI에 패키지가 없는 경우에도 링크 끝에 있습니다.이것은 단어가 아니라 실제 숫자여야 합니다.
  • 을 써야 요.git+에게 말하는 /tarball을 것이 입니다.
  • version 해시입니다.
  • 입니다.--process-dependency-linkspippip에서하는

비밀번호 프롬프트가 필요 없는 GitLab 개인 저장소를 자동으로 'pip install'하는 방법을 알아냈다.이 방법에서는 GitLab "Deploy Keys"와 SSH 구성 파일을 사용하기 때문에 개인 SSH 키 이외의 키를 사용하여 배포할 수 있습니다(내 경우 '봇'에서 사용).아마도 친절한 누군가가 GitHub을 사용하여 검증할 수 있을 것이다.

새 SSH 키 생성:

ssh-keygen -t rsa -C "GitLab_Robot_Deploy_Key"

은 「Dr.C.C.F」로 됩니다.~/.ssh/GitLab_Robot_Deploy_Key ★★★★★★★★★★★★★★★★★」~/.ssh/GitLab_Robot_Deploy_Key.pub.

해서 붙여넣습니다.~/.ssh/GitLab_Robot_Deploy_Key.pubGitLab "Deploy Keys" deploy keys keys 。

새 배포 키 테스트

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

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

SSH 컨피규레이션파일 생성

해서 '아저씨'를 .~/.ssh/config contentsfile을 합니다. 다음 내용을 추가합니다.'호스트' 값은 원하는 모든 값을 사용할 수 있습니다(나중에 사용할 예정이므로 기억해 두십시오).HostName git GitLab の URL 。Identify' 은 첫입니다.파일은 첫 번째 단계에서 작성한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가 새로운 Deploy Key를 사용하도록 하려면 조금 수정해야 합니다.이를 수행하려면 SSH 컨피규레이션파일 내의 호스트엔트리를 SSH로 포인트합니다.명령어 내의 'gitlab.mycorp.com'을 SSH 컨피규레이션파일로 사용한 호스트명으로 치환합니다.

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

이것으로, 패스워드 프롬프트 없이 패키지가 인스톨 됩니다.

레퍼런스 A
레퍼런스 B

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}.

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

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

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

설치만 원하시면 됩니다.

예를 들어 명령줄 원라이너에서 이 작업을 수행해야 하는 경우에도 가능합니다.Google Colab에 도입하기 위해 다음과 같이 할 수 있었습니다.

  1. 퍼스널 액세스토큰을 만듭니다.https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token
  2. 행::pip install git+https://<PERSONAL ACCESS TOKEN>@github.com/<USERNAME>/<REPOSITORY>.git

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"

내 사건은 답변에 나와 있는 대부분의 사건보다 좀 더 복잡했다.는 개인 두 를 소유하고 .repo_A ★★★★★★★★★★★★★★★★★」repo_B에서는 Github에 합니다.pip install repo_Apython의 끝없는.repo_B, Github 액션으로서.

이 작업을 해결하기 위해 수행한 단계:

  • 내 계정에 대한 개인 액세스 토큰 생성.권한에 대해서는 기본 권한인 .repo - 개인 저장소의 완전한 제어만 유지하면 되었습니다.
  • 아래 저장소 비밀 생성repo_B, 「」라고 이름을 붙였습니다.PERSONAL_ACCESS_TOKENJamie제안한 솔루션과는 달리 소중한 개인 액세스 토큰을 github 액션 내에서 명시적으로 노출할 필요가 없었기 때문에 이것은 중요했습니다..ymlfilename을 클릭합니다.
  • ㅇㅇㅇㅇㅇ.pip install송신원으로부터의 패키지(SSH가 아닌)를 HTTPS 경유로 다음과 같이 설정합니다.
export PERSONAL_ACCESS_TOKEN=${{ secrets.PERSONAL_ACCESS_TOKEN }}

pip install git+https://${PERSONAL_ACCESS_TOKEN}@github.com/MY_ORG_NAME/repo_A.git

SSH 를 사용하지 않는 경우는, HTTPS URL 에 유저명과 패스워드를 추가할 수 있습니다.

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

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

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

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

을 지지로 에 가을 pip 을을 을 but 을 but but but but but but but but but but but but but 。sudoSSH GitHub " Permission denied (public key)" "git clone" 입니다.「」를 사용합니다.git+https명령어를 sudo로 실행하고 GitHub에서 사용자/비밀번호를 요청하도록 했습니다.

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

GitHub, GitLab 등에 자신의 라이브러리/패키지가 있는 경우, 예를 들어 v2.0과 같은 구체적인 버전의 라이브러리로 커밋하기 위한 태그를 추가해야 하며, 그 후 패키지를 설치할 수 있습니다.

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

난 이거면 돼.다른 해결방법은 나에게 효과가 없었다.

옥시엄의 용액은 이 답변에 OK입니다.다만, 다음의 방법으로 인스톨 하는 경우는, 주의할 필요가 있습니다.sudo 때문에( too too ((((((((((((((((((((((((((((:/root/.ssh를 참조해 주세요.

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

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

만 하면 .git clone ( from 또또또또또또 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

시도해 보세요

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

없이ssh:...전 좋아요.

언급URL : https://stackoverflow.com/questions/4830856/is-it-possible-to-use-pip-to-install-a-package-from-a-private-github-repository

반응형