pip 설치가 github에서 작동하도록 구성


226

프로덕션 서버에 개인 패키지를 설치하기 위해 github과 함께 pip를 사용하고 싶습니다. 이 질문은 설치가 성공하기 위해 github 저장소에 무엇이 필요한지에 관한 것입니다.

다음 명령 줄을 가정합니다 (잘 인증하고 설치하려고 함).

pip install git+ssh://git@github.com/BlahCo/search/tree/prod_release_branch/ProductName

ProductName에 무엇이 있어야합니까? sdist 옵션으로 setup.py를 실행 한 후 tar 파일에 일반적으로 포함되는 내용입니까, 아니면 실제 tar.gz 파일입니까?

여러 변형을 시도했지만 작동하지 않기 때문에 여기에 묻습니다. 도움을 주셔서 감사합니다.

답변:


290

파일이 들어있는 전체 파이썬 패키지가 필요합니다 setup.py.

패키지 이름 foo은 다음과 같습니다.

foo # the installable package
├── foo
   ├── __init__.py
   └── bar.py
└── setup.py

그리고 github에서 다음과 같이 설치하십시오.

$ pip install git+https://github.com/myuser/foo.git@v123
or
$ pip install git+https://github.com/myuser/foo.git@newbranch

https://pip.pypa.io/en/stable/reference/pip_install/#vcs-support 에서 자세한 정보


3
위의 작품은 대단히 감사합니다. 그러나 repo 내의 하위 디렉토리에 릴리스가 있으면 foo.git 대신 foo / releases / ProductVer 찾고 있습니다. 가능합니까? 그렇다면 어떻게됩니까? 도움을 주셔서 대단히 감사합니다!
ccgillett

4
아니요, 불가능합니다. pip는 적어도 git에 대해서는 루트 리포지토리 디렉토리에서만 설치합니다. 어떻게 Subversion을 동작합니다 몰라 ...
휴고 타바레스


-e옵션 (편집 가능 모드)을 pip에 전달하지 않은 이유는 무엇 입니까?
Amelio Vazquez-Reina

14
새로운 URL 체계는 다음과 같습니다. pip install git+https://github.com/pypa/pip.git 출처 : pip Github repo
aboutaaron

111

github repo에서 설치해야 할 때 비슷한 문제가 있었지만 git 등을 설치하고 싶지 않았습니다.

간단한 방법은 패키지의 zip 아카이브를 사용하는 것입니다. /zipball/master리포지토리 URL에 추가하십시오 .

    $ pip install https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
Downloading/unpacking https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
  Downloading master
  Running setup.py egg_info for package from https://github.com/hmarr/django-debug-toolbar-mongo/zipball/master
Installing collected packages: django-debug-toolbar-mongo
  Running setup.py install for django-debug-toolbar-mongo
Successfully installed django-debug-toolbar-mongo
Cleaning up...

이렇게하면 github 소스 리포지토리에서 pip를 사용할 수 있습니다.


2
이것은 Windows에서도 작동하는 유일한 답변입니다
divenex

개인 리포지토리를 사용하여 어떻게이 작업을 수행 할 수 있습니까? (질문과 같이)
로드리고 E. 프린시 페

29

requirements.txt파일 을 사용하려면 git아래의 항목과 같이에서 마스터 분기를 익명으로 가져와야합니다 requirements.txt.

정기적 인 설치 :

git+git://github.com/celery/django-celery.git

" 편집 가능 "설치의 경우 :

-e git://github.com/celery/django-celery.git#egg=django-celery

편집 가능한 모드는 프로젝트의 소스 코드를 ./src현재 디렉토리에 다운로드합니다 . pip freeze패키지의 올바른 github 위치를 출력 할 수 있습니다 .


3
계란 이름은 어디에서 왔습니까? pip 패키지를 github repo로 대체 한 후 django에서 패키지를로드하지 못함
holms

setup.py에서 @holms 조회 이름
wieczorek1990

무엇입니까 #egg=django-celery? 자리 표시 자입니까?
enchance의

@enchance 패키지 이름입니다.
wieczorek1990

13

다른 프로젝트를 복제하는 것과 같은 방식으로 대상 저장소를 복제하십시오.

git clone git@github.com:myuser/foo.git

그런 다음 개발 모드로 설치하십시오.

cd foo
pip install -e .

원하지 않는 것을 변경할 수 있으며 foo패키지를 사용하는 모든 코드 는 수정 된 코드를 사용합니다.

이 솔루션에는 2 가지 이점이 있습니다.

  1. 홈 프로젝트 디렉토리에 패키지를 설치할 수 있습니다.
  2. 패키지에는 .gitdir이 포함되어 있으므로 일반 Git 저장소입니다. 바로 포크로 밀 수 있습니다.

2
이 솔루션이 마 법적이라고 증언 할 수 있습니다. 필자의 경우 해킹을 원했기 pip때문에 pip리포지토리를 복제하고 virtualenv를 생성하고 활성화하여 수행했습니다 pip install -e .. 그런 다음 pipvirtualenv의 개발 모드에있었습니다! 이것이 패키지 관리자 자체에서도 작동한다는 것에 깊은 인상을 받았습니다.
Radon Rosborough

대단해! 이 방법을 사용하여 설치 한 다음 실행 pip list하면 문제의 패키지가 Git 분기와 패키지가 설치된 절대 경로에 대한 참조가 있음을 알았 습니다. 해당 참조를 유지합니까, 아니면 소스를 삭제할 수 있습니까?
MadPhysicist

0

Colab에서이 방법으로 시도 할 수 있습니다

!git clone https://github.com/UKPLab/sentence-transformers.git
!pip install -e /content/sentence-transformers
import sentence_transformers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.