setup.py
비공개 GitHub 저장소에 의존하는 프로젝트 파일을 만들고 있습니다. 파일의 관련 부분은 다음과 같습니다.
from setuptools import setup
setup(name='my_project',
...,
install_requires=[
'public_package',
'other_public_package',
'private_repo_1',
'private_repo_2',
],
dependency_links=[
'https://github.com/my_account/private_repo_1/master/tarball/',
'https://github.com/my_account/private_repo_2/master/tarball/',
],
...,
)
후자 가이 답변에 따라 및 인수를 지원하지 않기 때문에 setuptools
대신 사용 하고 있습니다.distutils
install_requires
dependency_links
위의 설정 파일은 404 오류로 개인 저장소에 액세스하지 못합니다. 이는 GitHub가 개인 저장소에 대한 승인되지 않은 요청에 404를 반환하기 때문에 예상되는 오류입니다. 그러나 setuptools
인증 방법을 알 수 없습니다 .
내가 시도한 몇 가지 사항은 다음과 같습니다.
-
을 사용 하여 repo를 설치하는 경우처럼 in
git+ssh://
대신 사용하십시오 . 배포 문서에서 확인 해야한다고 하지만 setuptools가이 프로토콜 ( “unknown url type : git + ssh”)을 인식하지 못하기 때문에 실패 합니다. Ditto 및 .https://
dependency_links
pip
git+https
git+http
-
https://<username>:<password>@github.com/...
– 여전히 (함께 작업을이 방법하지 않는 (404)을받을curl
또는wget
중 하나를 명령 줄에서 – 비록curl -u <username> <repo_url> -O <output_file_name>
않는 일을.) -
setuptools (0.9.7) 및 virtualenv (1.10)를 최신 버전으로 업그레이드합니다. 이 개요 는 setuptools로 다시 병합되었다고 말하지만 배포를 설치하려고 시도 했습니다. 어느 쪽이든, 주사위는 없습니다.
현재 setup.py
개인 저장소를 별도로 다운로드해야한다는 경고를 인쇄했습니다. 이것은 분명히 이상적이지 않습니다. 내가 놓친 것이 분명한 것 같지만 그것이 무엇인지 생각할 수 없습니다. 🙂
여기에 답변이없는 중복 질문입니다 .
답변
나는 이것을 pip와 함께 설치하기 위해 작동 시키려고 노력했지만 위의 것은 나를 위해 작동하지 않았습니다. [1]에서 PEP508
표준을 사용해야한다는 것을 이해했습니다. [2]에서 실제로 작동하는 예제를 검색했습니다 (적어도 제 경우에는).
참고하십시오; 이것은 pip 20.0.2
켜짐Python 3.7.4
setup(
name='<package>',
...
install_requires=[
'<normal_dependency>',
# Private repository
'<dependency_name> @ git+ssh://git@github.com/<user>/<repo_name>@<branch>',
# Public repository
'<dependency_name> @ git+https://github.com/<user>/<repo_name>@<branch>',
],
)
이 방식으로 내 패키지를 지정하면 설치가 잘 작동합니다 ( -e
설정이 있고 지정할 필요가 없음 --process-dependency-links
).
참고 문헌
[1] https://github.com/pypa/pip/issues/4187
[2] https://github.com/pypa/pip/issues/5566
답변
나를 위해 일한 것은 다음과 같습니다.
install_requires=[
'private_package_name==1.1',
],
dependency_links=[
'git+ssh://git@github.com/username/private_repo.git#egg=private_package_name-1.1',
]
달걀 이름에 버전 번호가 있어야합니다. 그렇지 않으면 패키지를 찾을 수 없다고 표시됩니다.
답변
이에 대한 좋은 문서를 찾을 수 없었지만 주로 시행 착오를 통해 해결책을 찾았습니다. 또한 pip 및 setuptools에서 설치하는 데 약간의 차이가 있습니다. 그러나이 방법은 둘 다 작동합니다.
GitHub는 (현재 2016 년 8 월 현재) 개인 저장소의 zip / tarball을 얻는 쉬운 방법을 제공하지 않습니다. 따라서 git repo를 가리키고 있음을 setuptools에 알리려면 setuptools를 가리켜 야합니다.
from setuptools import setup
import os
# get 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과 함께 포함하는 것입니다.
- 당신은 포함 할 필요가 일부 버전 번호 (여기
0
PyPI에 어떤 패키지가 없어도, 링크의 끝을). 이것은 단어가 아니라 실제 숫자 여야합니다. git+
zip / tarball을 가리키는 대신 repo를 복제하는 것을 setuptools에 알리기 위해 서문이 필요합니다.version
분기, 태그 또는 커밋 해시 일 수 있습니다.--process-dependency-links
pip에서 설치하는 경우 제공해야합니다.
답변
(해키) 해결 방법을 찾았습니다.
#!/usr/bin/env python
from setuptools import setup
import os
os.system('pip install git+https://github-private.corp.com/user/repo.git@master')
setup( name='original-name'
, ...
, install_requires=['repo'] )
설정 스크립트에서 시스템 호출을하는 데 윤리적 문제가 있다는 것을 이해하지만이를 수행하는 다른 방법을 생각할 수 없습니다.
답변
Tom Hemmes의 답변을 통해 나는 이것이 나를 위해 일한 유일한 것임을 알았습니다.
install_requires=[
'<package> @ https://github.com/<username>/<package>/archive/<branch_name>.zip']
답변
github의 아카이브 URL을 사용하면 공용 저장소의 경우 저에게 효과적입니다. 예
dependency_links = [
'https://github.com/username/reponame/archive/master.zip#egg=eggname-version',
]
답변
편집 : 이것은 공용 github 저장소에서만 작동하는 것으로 보입니다. 주석을 참조하십시오.
dependency_links=[
'https://github.com/my_account/private_repo_1/tarball/master#egg=private_repo_1',
'https://github.com/my_account/private_repo_2/tarball/master#egg=private_repo_2',
],
위의 구문은 setuptools 1.0에서 작동하는 것 같습니다. 현재 VCS 종속성에 “# egg = project_name-version”을 추가하는 구문은 문서 배포 를 위해 제공 한 링크에 문서화되어 있습니다 .