[python] Python setuptools : install_requires 아래에 개인 저장소를 나열하려면 어떻게해야합니까?

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대신 사용 하고 있습니다.distutilsinstall_requiresdependency_links

위의 설정 파일은 404 오류로 개인 저장소에 액세스하지 못합니다. 이는 GitHub가 개인 저장소에 대한 승인되지 않은 요청에 404를 반환하기 때문에 예상되는 오류입니다. 그러나 setuptools인증 방법을 알 수 없습니다 .

내가 시도한 몇 가지 사항은 다음과 같습니다.

  1. 을 사용 하여 repo를 설치하는 경우처럼 in git+ssh://대신 사용하십시오 . 배포 문서에서 확인 해야한다고 하지만 setuptools가이 프로토콜 ( “unknown url type : git + ssh”)을 인식하지 못하기 때문에 실패 합니다. Ditto 및 .https://dependency_linkspipgit+httpsgit+http

  2. https://<username>:<password>@github.com/...– 여전히 (함께 작업을이 방법하지 않는 (404)을받을 curl또는 wget중 하나를 명령 줄에서 – 비록 curl -u <username> <repo_url> -O <output_file_name>않는 일을.)

  3. 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과 함께 포함하는 것입니다.
  • 당신은 포함 할 필요가 일부 버전 번호 (여기 0PyPI에 어떤 패키지가 없어도, 링크의 끝을). 이것은 단어가 아니라 실제 숫자 여야합니다.
  • git+zip / tarball을 가리키는 대신 repo를 복제하는 것을 setuptools에 알리기 위해 서문이 필요합니다.
  • version 분기, 태그 또는 커밋 해시 일 수 있습니다.
  • --process-dependency-linkspip에서 설치하는 경우 제공해야합니다.


답변

(해키) 해결 방법을 찾았습니다.

#!/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”을 추가하는 구문은 문서 배포 를 위해 제공 한 링크에 문서화되어 있습니다 .