직접 github 소스를 requirements.txt에 기술하는 방법


448

명령을 사용하여 라이브러리를 설치했습니다.

pip install git+git://github.com/mozilla/elasticutils.git

Github 리포지토리에서 직접 설치합니다. 이것은 잘 작동하며 내 의존성을 갖고 싶습니다 requirements.txt. 내가 좋아하는 다른 티켓을 검토 한 결과 이 있지만 그건 내 문제가 해결되지 않았다. 내가 뭔가를 넣으면

-f git+git://github.com/mozilla/elasticutils.git
elasticutils==0.7.dev

에서 requirements.txt파일, pip install -r requirements.txt다음과 같은 출력 결과 :

Downloading/unpacking elasticutils==0.7.dev (from -r requirements.txt (line 20))
  Could not find a version that satisfies the requirement elasticutils==0.7.dev (from -r requirements.txt (line 20)) (from versions: )
No distributions matching the version for elasticutils==0.7.dev (from -r requirements.txt (line 20))

요구 사항 파일 의 문서 에는 git+git프로토콜 지정자를 사용하는 링크가 언급 되어 있지 않으므로 지원되지 않을 수 있습니다.

아무도 내 문제에 대한 해결책을 가지고 있습니까?

답변:


327

“편집 가능한”패키지 구문 을 사용 requirements.txt하여 다양한 VCS (git, hg, bzr, svn) 에서 패키지를 가져올 수 있습니다 .

-e git://github.com/mozilla/elasticutils.git#egg=elasticutils

또한 특정 커밋을 가리킬 수 있습니다.

-e git://github.com/mozilla/elasticutils.git@000b14389171a9f0d7d713466b32bc649b0bed8e#egg=elasticutils

3
편집 가능한 버전 (구문 문제로 인해)을 로컬에서 체크 아웃하지 않았으므로 git+git변형 (작동 한)을 사용했습니다. 에서 requirements.txt버전 작업, 그래서 아주 많이 :) 감사합니다
— 에 AlFe

1
docs링크 나를 위해 작동하지 않는; 나는 오래된 것을 사용 했습니다 .
— osa

42
내가 이해하지 못한 것은 보여지는 구문이 정확히 요구 사항에 들어간다는 것입니다. 즉, -e 앞에 패키지 이름이 없습니다.
— 현인

5
패키지를 편집 가능한 모드로 만들지 여부에 따라 "-e"를 추가 할 필요는 없습니다. @qff의 답변을 참조하십시오.
— Sky

17
-e git+git://대신 해서는 안 -e git://됩니까? 내가 가지고 "중 로컬 프로젝트 또는 SVN +, 자식 +, HG +, 또는 BZR +와 VCS의 URL의 시작에 대한 경로 여야합니다" 오류 메시지.
— 브루스 웨인

424

일반적으로 requirements.txt파일은 다음과 같습니다.

package-one==1.9.4
package-two==3.7.1
package-three==1.0.1
...

Github 저장소를 지정하기 위해 package-name==규칙이 필요하지 않습니다 .

아래 예제 package-two는 GitHub 저장소를 사용하여 업데이트 합니다. 사이의 텍스트 @및 #패키지의 세부 사항을 표시한다.

commit 해시를 지정하십시오 ( 41b95ecupdated의 컨텍스트에서 requirements.txt).

package-one==1.9.4
git+git://github.com/path/to/package-two@41b95ec#egg=package-two
package-three==1.0.1

지점 이름 ( master)을 지정하십시오 .

git+git://github.com/path/to/package-two@master#egg=package-two

태그 ( 0.1)를 지정하십시오 .

git+git://github.com/path/to/package-two@0.1#egg=package-two

릴리스 ( 3.7.1)를 지정하십시오 .

git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-two

참고 #egg=package-two여기에 코멘트하지 않습니다, 그것은 것입니다 명시 적으로 패키지 이름을 명시

이 블로그 게시물 에는 주제에 대한 추가 토론이 있습니다.


54
다른 모든 답변 중에서, 나는 그들 중 누구도 비교를 위해 던져진 자식과 "정상적인"요구 사항이 혼합 된 요구 사항 파일을 보여 주지 않았다는 것을 믿을 수 없습니다 . 나는 명령 줄 ( -e) 옵션 처럼 보이는 것에 빠져 버렸습니다 . 문맥에 넣을 수 있도록 두 가지를 혼합 해 주셔서 감사합니다!
— Hendy

릴리스 3.7.1를 가리키는 것이 git+git://github.com/path/to/package-two@releases/tag/v3.7.1#egg=package-two나에게 효과 가 없었습니다. 나를 위해 일한 것은 git+git://github.com/path/to/package-two@3.7.1#egg=package-two.
— 장 폴

이 답변은 매우 도움이되었습니다. 그래도 한가지. 이 git+git://...표기법은 어떻게 든 Linux 상자에서 ssh 관련 오류를 일으켰습니다. 그래서 나는 그것들을 git+https://...표기법 으로 바꾸 었고 완벽하게 작동했습니다.
— RayLuo

174

requirements.txtpip 7.0에서 git 저장소의 패키지에 대한 종속성을 지정하는 다음 방법을 허용합니다. 1

[-e] git+git://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+https://git.myproject.org/SomeProject#egg=SomeProject
[-e] git+ssh://git.myproject.org/SomeProject#egg=SomeProject
-e git+git@git.myproject.org:SomeProject#egg=SomeProject

Github의 경우 다음을 수행 할 수 있음을 의미합니다 (생략 됨 -e).

git+git://github.com/mozilla/elasticutils.git#egg=elasticutils

왜 추가 답변이 필요한가요?
나는 -e다른 답변에서 깃발에 다소 혼란 스러웠 으므로 여기에 설명이 있습니다.

-e또는 --editable패키지가 설치되어 있는지 플래그 수단 <venv path>/src/SomeProject따라서가 아니라 깊이 묻혀에서 <venv path>/lib/pythonX.X/site-packages/SomeProject이 다르게 배치 될 것이다. 2

선적 서류 비치


9
그러나 -e다음 pip freeze패키지 를 생략하면 이 패키지에 대한 올바른 결과를 얻지 못할 수도 있습니다.
— Maccesch

82

먼저 git+git또는 git+https알고있는 방식 으로 또는로 설치하십시오 . 프로젝트 kronok의 분기 를 설치하는 예 brabeion:

pip install -e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion

둘째, pip freeze > requirements.txt에서 올바른 것을 얻는 데 사용 하십시오 requirements.txt. 이 경우에는

-e git+https://github.com/kronok/brabeion.git@12efe6aa06b85ae5ff725d3033e38f624e0a616f#egg=brabeion-master

셋째, 결과를 테스트하십시오.

pip uninstall brabeion
pip install -r requirements.txt

4
pip freeze는 여전히 닫힌 전방 버전으로 사용하는 패키지를 나열합니다. 직접 github 체크 아웃이 아님
— Antoine Claval

4
URL을 생성하려면 'pip freeze'에`-e '옵션을 사용해야합니다
— Janusz Skonieczny

2
pip 9.0.1 :no such option: -e
— sds

당신은 의미 git+https합니까? 당신이 말하는 텍스트 git+git와 코드에서git+https
— Antony Hatchkins

@AntonyHatchkins가 수정되었습니다.
— osa

17

pip 이후 v1.5(2014 년 1 월 1 일 릴리스 : CHANGELOG , PR ) 모듈을 포함하도록 git repo의 하위 디렉토리를 지정할 수도 있습니다. 구문은 다음과 같습니다.

pip install -e git+https://git.repo/some_repo.git#egg=my_subdir_pkg&subdirectory=my_subdir_pkg # install a python package from a repo subdirectory

참고 : pip 모듈 작성자는 가능한 경우 자신의 최상위 리포지토리에 모듈을 게시하고 싶을 것입니다. 그러나이 기능은 하위 디렉토리에 파이썬 모듈이 포함 된 일부 기존 저장소에 유용합니다. pypi에 게시되지 않은 경우 이러한 방법으로 설치해야 할 수도 있습니다.


1

pip3 (Ubuntu 18.04의 패키지 관리자가 설치 한 v9.0.1)을 실제로 설치하도록 지시하는 것을 설치하는 것이 까다로운 것으로 나타났습니다. 이 문제에 부딪 치는 사람의 시간을 절약하기 위해이 답변을 게시하고 있습니다.

이것을 requirements.txt 파일에 넣지 못했습니다 :

git+git://github.com/myname/myrepo.git@my-branch#egg=eggname

"실패"는 Git에서 코드를 다운로드하는 동안 해당 지점의 저장소에있는 코드 대신 PyPi에있는 코드의 원래 버전을 설치하는 것을 의미합니다.

그러나 지점 이름 대신 커밋을 설치하면 작동합니다.

git+git://github.com/myname/myrepo.git@d27d07c9e862feb939e56d0df19d5733ea7b4f4d#egg=eggname

지점도 멀리 떨어져 있습니까?
— Alfe

궁금한 점이 있다면 로컬 사본을 가리 키지 않았습니다.
— 계정 멀리 던져
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.