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


85

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개인 저장소를 별도로 다운로드해야한다는 경고를 인쇄했습니다. 이것은 분명히 이상적이지 않습니다. 내가 놓친 것이 분명한 것 같지만 그것이 무엇인지 생각할 수 없습니다. :)

여기에 답변이없는 중복 질문입니다 .


해결책을 수락하십시오.
wieczorek1990

답변:


69

나는 이것을 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


이제 그 #egg=...부분은 불필요 해 보입니다.
Huazuo Gao

1
감사! 당신은 절대적으로 옳으며 둘 다 선택 사항 #egg이며 branch(편집 참조) git+https.
Tom Hemmes dec.

1
당신이 사용하는 경우 ssh://와로 실행 Could not resolve hostname변경 :/당신의 복제 URL에. gitlab 에서이 오류가 발생했습니다.
delijati 2011

11
setuptools가 종속성 이름 : Reading https://pypi.org/simple/some-fake-name/, 그리고 Couldn't find index page for 'some_fake_name' (maybe misspelled?). 결국, 마지막 오류는 표시error: Could not find suitable distribution for Requirement.parse('some_fake_name@ git+ssh://git@github.com/cglacet/quadtree.git')
cglacet

1
<dependency_name>은 <repo_name>과 동일하지 않으며 공용 저장소 인 경우 'ssh : // git @'를 'https : //'로 대체 할 수 있음을 강조합니다.
Phil P

41

나를 위해 일한 것은 다음과 같습니다.

  install_requires=[
      'private_package_name==1.1',
  ],
  dependency_links=[
      'git+ssh://git@github.com/username/private_repo.git#egg=private_package_name-1.1',
  ]

달걀 이름에 버전 번호가 있어야합니다. 그렇지 않으면 패키지를 찾을 수 없다고 표시됩니다.


3
안녕하세요 vadimg-어떤 버전의 setuptools / distribute를 사용하고 있습니까? 배포 0.7.3 (최신 버전)을 사용하여 "Unknown url type : git + ssh"가 표시됩니다.
Eric P

2
이 ... 나중에 3 년 나에게있어 작동하지 않았다 버전을 찾을 수 없습니다 만족 요구 사항
jsmedmar

7
2016 년 10 월 28 일 현재이 접근 방식은 깨져 보입니다
Max

1
현대 핍의 경우 다음과 같은 옵션을 포함해야합니다pip install --process-dependency-links ...
Ash Berlin-Taylor

2
--process-dpendency-links사용되지 않습니다, PEP508 URL을 지정하여 내 대답을 참조
톰 Hemmes

10

이에 대한 좋은 문서를 찾을 수 없었지만 주로 시행 착오를 통해 해결책을 찾았습니다. 또한 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에서 설치하는 경우 제공해야합니다.

태그 또는 분기를 찾을 수 없다는 메시지가 나타납니다. 복제하려는 개인 저장소에 태그가 있다는 사실에도 불구하고.
trendsetter37

1
문제가 무엇인지 알아 냈습니다. 태그는 vgithub에서 앞에 추가되었습니다. 그래서 내 setup.py 스크립트 v1.1.0대신에 사용해야 했습니다 1.1.0.
trendsetter37

4

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

#!/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'] )

설정 스크립트에서 시스템 호출을하는 데 윤리적 문제가 있다는 것을 이해하지만이를 수행하는 다른 방법을 생각할 수 없습니다.


예 이것은 또한 다음과 같은 이유로 우리에게 추악한 해결 방법이었습니다. github.com/pypa/pip/issues/2822
Tommy

를 사용했지만 이것이 작동하도록 할 수있는 유일한 방법입니다 import pip. @vadimg의 답변이나 pypa / pip 의이 제안이 작동하지 않았습니다 .
gens

5
이것은 설치와 관련이없는 것을 실행하더라도 의존성을 설치합니다 python setup.py --version.
WhyNotHugo

1

Tom Hemmes의 답변을 통해 나는 이것이 나를 위해 일한 유일한 것임을 알았습니다.

    install_requires=[
        '<package> @ https://github.com/<username>/<package>/archive/<branch_name>.zip']

0

github의 아카이브 URL을 사용하면 공용 저장소의 경우 저에게 효과적입니다. 예

dependency_links = [
  'https://github.com/username/reponame/archive/master.zip#egg=eggname-version',
]

어떻게 찾 eggname-version습니까?
cglacet

-1

편집 : 이것은 공용 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"을 추가하는 구문은 문서 배포 를 위해 제공 한 링크에 문서화되어 있습니다 .


여전히 동일한 404 오류가 발생합니다. 귀하의 경우 저장소는 비공개입니까? # egg = 구문을 알고 있지만 인증에 영향을 주는지 모르겠습니다.
Eric P

죄송합니다. 물론 공개 리포지토리 프로젝트였습니다. https // <username> : <password> @ ... tarball URL이 githubs 개인 리포지토리에서 작동하지 않는 경우 현재 설정 도구로이 작업을 수행 할 수있는 방법이 없을 것입니다.이 질문은 다음을 나타내는 것으로 보입니다. having-trouble-downloading -git-archive-tarballs-from-private-repo
wor

setuptools의 개발 버전을 시도하거나 코드를 확인할 수도 있습니다. 관련 코드는 다음과 같습니다. package_index : fetch_distribution () : 534 package_index.py:_download_url():736
wor

-2

이것은 시나리오에서 작동합니다.

  1. 패키지는 개인 저장소의 github에 있습니다.
  2. -e를 사용하여 ./src가 아닌 사이트 패키지에 설치하려고합니다.
  3. pip install -r requirements.txt를 사용할 수 있음
  4. pip install -e reposdir (또는 github에서)를 사용할 수 있으며, 여기서 종속성은 requirements.txt에만 지정됩니다.

https://github.com/pypa/pip/issues/3610#issuecomment-356687173

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.