pip를 사용하여 git 하위 디렉토리에서 어떻게 설치할 수 있습니까?


104

많은 폴더가있는 git 저장소가 있는데 그중 하나는 다음과 같이 pip로 설치할 수있는 python 모듈입니다.

repo.git/
repo.git/folder1/
repo.git/folder2/
repo.git/mymodule/
repo.git/mymodule/__init__.py
repo.git/mymodule/setup.py
repo.git/mymodule/...

지금 설치하려면 다음을 수행해야합니다.

git clone http://server/repo.git
cd repo
pip install mymodule
cd ..
rm -rf repo

명시 적으로 복제하지 않고 pip로 모듈을 직접 설치할 수 있습니까?

나는 시도했다 :

pip install git+https://server/repo.git/mymodule/
pip install git+https://server/repo.git:mymodule/

그러나 나는 얻는다 :

IOError: [Errno 2] No such file or directory: '/tmp/pip-88tlLm-build/setup.py'

1
이 질문은 이미 답변 된 것 같습니다 : stackoverflow.com/questions/10847764/pip-install-from-git-repo
synthesizerpatel

1
연결 한 질문은 MANIFEST.in이 없기 때문에 누락 된 파일에 대한 것이 었습니다. 내 질문은 pip로 하위 디렉토리를 설치하는 방법에 관한 것입니다. 전체 저장소를 복제하여 패키지를 설치할 수 있기 때문에 파일이 누락되지 않았습니다.
J. Martinot-Lagarde 2011

@synthesizerpatel 연결 한 질문은 다른 것에 대해 묻지 만 제목이 오해의 소지가있어서 수정했습니다. 귀하의 (내 생각에) 반대표를 제거하는 것을 고려할 수 있습니다.
Piotr Dobrogost

답변:


120

이 기능에 대한 풀 리퀘스트 가 있으며 , 한 달 전에 브랜치를 개발하기 위해 병합 된 것 같습니다. 구문은 다음과 같습니다 .

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

마스터에 병합되어 배포 될 때까지 잠시 기다려야 할 것입니다.

업데이트 : 이제 https://pip.readthedocs.io/en/stable/reference/pip_install/#vcs-support 에서 다음과 같이 사용할 수 있으며 문서화 됩니다.

setup.py가 프로젝트의 루트에없는 프로젝트의 경우 "하위 디렉토리"구성 요소가 사용됩니다. "하위 디렉터리"구성 요소의 값은 프로젝트 루트에서 setup.py가있는 경로 여야합니다.

따라서 저장소 레이아웃이 다음과 같은 경우 :

- pkg_dir/
  - setup.py  # setup.py for package ``pkg``
  - some_module.py
- other_dir/
  - some_file
- some_other_file

당신은 사용할 필요가 있습니다

pip install -e vcs+protocol://repo_url/#egg=pkg&subdirectory=pkg_dir

참고 : Windows에서는 URL을 큰 따옴표로 묶어야합니다. 그렇지 않으면 " '하위 디렉토리'가 내부 또는 외부 명령으로 인식되지 않습니다."라는 오류 메시지가 표시됩니다. 예를 들어 다음을 사용하십시오.

pip install -e "vcs+protocol://repo_url#egg=pkg&subdirectory=pkg_dir"

4
방금 확인했고 2014 년 1 월 1 일에 출시 된 pip v1.5의 일부입니다. github.com/pypa/pip/blob/develop/CHANGES.txt
tomka

20
우분투를 사용하는 경우 실제 git 위치 앞에 작은 따옴표를 사용해야합니다. 그렇지 않으면 & subdirectory가 무시됩니다! 예 : pip install -e 'git + git.repo /… '
Lin

7
주의 사항 : 하위 디렉토리에 진입 점이 있는 패키지에 대해서는 작동하지 않는 것 같습니다 (적어도 pip v1.5.6에서는 6+ 버전에 대해서는 확실하지 않음) . pip install -e 'git+https://…/repo.git@branch#egg=package&subdirectory=package'패키지의 결과가 나타나는 설치하고, package.egg-link파일은 사이트 패키지에 넣어지고 - 그러나의 루트 디렉토리를 가리키는 src/repo, 하지src/repo/package내가 기대하는 것처럼. 즉 py_modules, 가져올 entry_points수 없으며 실제로 작동하지 않습니다 ImportError: No module named package. 둘 다 .
Mark G.

2
-e그렇지 않으면 pip freeze전체 경로가 표시되지 않고 계란 만 표시됩니다. 이 일이 일어났습니다pip-1.5.4
zyxue

2
다른 사용자를위한 팁 : git + https를 사용해야합니다. git + git이 작동하지 않고 치명적입니다. 원격 오류 : 저장소를 찾을 수 없습니다. 아마도 "쿼리"문자열을 올바르게 구문 분석하지 않았기 때문일 것입니다. 방금 기록했습니다 : github.com/pypa/pip/issues/4898
amohr

33

정답 아래 주석 중 하나에 이미 언급되어 있지만이 문제를 강조하기 위해 Linux 명령 줄에서 실행할 때 앰퍼샌드가 명령 줄에 백그라운드에서 명령을 실행하도록 지시하므로-문자를 이스케이프 해야합니다& .

git+https://git.repo/some_repo.git#egg=version_subpkg\&subdirectory=repo

앰퍼샌드 앞에 백 슬래시가 있습니다. 이스케이프 동작은 Linux 배포판에 따라 달라질 수 있습니다. 나는 전문가가 아닙니다.
이것을 무시하면 다음과 같은 암호 오류가 발생할 수 있습니다.

bash: (...) command not found

1
URL을 작은 따옴표로 묶으면 앰퍼샌드를 이스케이프 할 필요가 없습니까? cURL에서 URL로 작업 할 때 유용하다는 것을 알고 있습니다.
Josh Peak

1
또한 주목할 가치가 있습니다. Windows 명령 줄에서이를 실행할 때 URL을 큰 따옴표로 묶어야합니다. 그렇지 않으면 " '하위 디렉터리'가 내부 또는 외부 명령으로 인식되지 않습니다."라는 오류 메시지가 표시됩니다. 예를 들면, 사용 핍은 -e 설치 "자식 + myURL이 / PROJ # 계란 = subpkg 및 하위 디렉토리 = 하위 디렉터리 "

일반적으로 쉘 스크립트로 작업 할 때 인수 주위에 큰 따옴표를 사용하여 안전을 유지하십시오. 이상 모범 사례를 참조하십시오 shellcheck.net 또는 github.com/koalaman/shellcheck
에릭 Aronesty

2
(리눅스 배포판의 일종으로) 이스케이프뿐만 아니라 OSX 필요하다
ygesher

6
분기 기반 설치 사용 :pip install git+ssh://git@github.com/org_or_username/repo.git@branch#subdirectory=path/to/dubdir
RDK
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.