직접 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.