setuptools가 PyPI에없는 패키지를 설치하도록하려면 어떻게해야합니까?


142

방금 setuptools 및 virtualenv로 작업하기 시작했습니다. 내 패키지에는 GitHub에서만 제공되는 최신 python-gearman이 필요합니다. PyPI에있는 python-gearman 버전은 이전 버전입니다. Github 소스는 setuptools와 호환됩니다 (예 : setup.py 등). PyPI에서 새 버전을 찾고 설치하는 대신 setuptools를 다운로드하여 설치하는 방법이 있습니까?

참고로 새로운 python-gearman은 http://github.com/mtai/python-gearman입니다.


1
소스를 다운로드 python setup.py install하여 소스 디렉토리에서 사용하는 대신 Git에서 직접 파이썬 패키지를 설치하려는 이유가 있습니까?
앤드류

4
패키지를 여러 컴퓨터에 배포하고 모든 종속성을 자동으로 설치하고 싶습니다.
andrei

2
Github에서 직접 사용 easy_install하거나 pip설치할 수 있습니다 . 그러나 또 다른 해결책이 있습니다 .PyPI에 패키지를 추가하는 것을 고려 했습니까?
Wolph

2
단순히 배포 용이므로 사용하지 buildout않겠습니까? 기성품 Git 플러그인이 몇 개 있습니다.
Wolph

답변:


156

핵심은 easy_install에게 패키지를 다운로드 할 수있는 위치를 알려주는 것입니다. 이 경우 URL http://github.com/mtai/python-gearman/tarball/master 에서 찾을 수 있습니다 . 그러나 easy_install은 URL을보고 얻는 것만으로 알 수 없기 때문에 해당 링크 자체는 작동하지 않습니다.

대신 http://github.com/mtai/python-gearman/tarball/master#egg=gearman-2.0.0beta 로 변경하면 easy_install이 패키지 이름과 버전을 식별 할 수 있습니다.

마지막 단계는 패키지의 dependency_links에 URL을 추가하는 것입니다. 예 :

setup(
   ...
   dependency_links = ['http://github.com/mtai/python-gearman/tarball/master#egg=gearman-2.0.0beta']
)

이제 패키지가 설치 될 때 easy_install은 해당 URL에서 다운로드 할 수있는 "gearman 2.0.0beta"가 있음을 발견하고 "gearman> = 2.0.0beta"를 지정하면 PyPI의 것을 선택합니다. 당신의 의존성에서 ..

(일반적으로 이런 종류의 작업은 PyPI 페이지에 다운로드 가능한 소스에 대한 링크를 포함시키는 것입니다.이 경우 gearman 패키지의 작성자가 위와 같은 링크를 포함했다면 이미 설정되어 있습니다. 일반적으로 사람들은 개발 버전을 'myproject-dev'로 표시 한 다음 'myproject> = somever, == dev'요구 사항을 사용하므로 패키지가 없거나 더 높은 패키지가없는 경우 easy_install은 릴리스를 확인하거나 다운로드하십시오.)

--process-dependency-links사용할 때 지정해야합니다 pip. 종속성 링크 처리는 더 이상 사용되지 않으며 향후 릴리스에서 제거 될 것입니다.


1
제안한 것을 수행했지만 "python setup.py develop"을 실행하면 "foo.egg-info / dependency_links.txt에 dependency_links 작성"이라는 메시지가 표시되지만 실제로 패키지를 다운로드하여 설치하지는 않습니다. 도움이된다면 setuptools 기반 virtualenv를 사용하고 있습니다.
andrei

15
또한 install_requires = 'gearman> = 2.0.0beta'; 당신은 그것을 포함 했습니까?
PJ Eby

3
betaPyPI의 기존 버전에 접미사가 있으면 작동하지 않습니다 dependency_links.에 정의 된 패키지 대신 PyPI에서 패키지를 계속 설치합니다 . 로 PyPI에있는 것보다 높은 버전을 설정하려고 #egg=package-version하면 설정 도구가 Could not find a version that satisfies the requirement오류와 PyPI에서 사용 가능한 모든 버전 목록을 표시합니다. 로 패키지를 빌드 sdist한 다음로 설치하려고합니다 pip install http://url/to/my/generated/tar.
zazabe

1
좋아, 내 패키지를 설치 easy_install http://url/to/my/generated/tar하면 모든 것이 예상대로 작동합니다 ... 왜 그런지 아십니까?
zazabe

3
--process-dependency-linkspip19 일 현재 삭제되었습니다 ! 참조 : github.com/pypa/pip/issues/6162
피닉스

67

pip install protocol+location[@tag][#egg=Dependency]형식을 사용하여 pip를 사용하여 소스에서 직접 설치할 수 있습니다 .

힘내

pip install git+https://github.com/username/repo.git
pip install git+https://github.com/username/repo.git@MyTag
pip install git+https://github.com/username/repo.git@MyTag#egg=ProjectName

수은제

pip install hg+https://hg.myproject.org/MyProject/

SVN

pip install svn+svn://svn.myproject.org/svn/MyProject

Bzr

pip install bzr+http://bzr.myproject.org/MyProject/trunk

다음과 같은 프로토콜이 지원됩니다. [+git, +svn, +hg, +bzr]

버전

@tag 체크 아웃 할 특정 버전 / 태그를 지정할 수 있습니다.

#egg=name 프로젝트를 다른 사람의 종속성으로 지정할 수 있습니다.

순서는 항상이어야합니다 @tag#egg=name.

개인 리포지토리

프로토콜을 SSH ( ssh://) 로 변경하고 적절한 사용자 ( git@)를 추가하여 개인 리포지토리에서 설치할 수도 있습니다 .

git+ssh://git@github.com/username/my_private_repo

사용자 이름 / 암호를 사용하여 개인 리포지토리에서 설치할 수도 있습니다.

git+https://<username>:<password>@github.com/<user>/<repo>.git

Github은 순환 가능한 개인 OAuth 토큰 을 생성하는 기능을 제공 합니다

git+https://<oauth token>:x-oauth-basic@github.com/<user>/<repo>.git

requirements.txt

requirements.txt 프로젝트 종속성을 지정하는 데 사용됩니다.

requirements.txt

package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git

이들은 패키지와 함께 자동으로 설치되지 않으며 명령을 사용하여 설치해야합니다 pip -r requirements.txt.

요구 사항 파일 포함

요구 사항 파일에는 다른 요구 사항 파일이 포함될 수 있습니다.

requirements-docs.txt

sphinx
-r requirements-dev.txt

requirements-dev.txt

some-dev-tool
-r requirements.txt

requirements.txt

package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git

setup.py

요구 사항 파일은 setup.py다음 명령으로 지정된 종속성을 설치할 수 있습니다 .

-e .

setup.py위와 동일한 구문을 사용하지만 이 답변dependency_links 에서 언급 한 값을 사용하여 리포지토리에서 설치할 수도 있습니다 .

참고 문헌 :

https://pip.pypa.io/en/latest/user_guide.html#installing-packages https://pip.pypa.io/en/latest/reference/pip_install.html


2
setup.py 리포지토리에서 설치할 수 있습니다. 그냥 'setup.py dependency_links'를 검색하십시오
TomDotTom

1
@TomDotTom Derp, 나는 그 대답을 찬성했지만 어떻게 든 그것을 = P하지 않았다. 나는 대답을 업데이트 할 것이다. 지적 해 주셔서 감사합니다! 내가하고있는 일에 도움이 될 것입니다.
Rebs

dependency_links 나는 (?) github.com/pypa/pip/issues/3939 하지만 감가 상각되고 있다고 생각 합니다. 나는이 답변을 좋아하고 (setup.py에서) 가능하기 때문에 더 낫다고 생각합니다.extras_require={'all': [repo @ git+https://github.com/username/repo.git]}
Josiah L.

21

난 그냥 같은 일을했다, 나는대로이 작업을 수행하는 또 다른 방법 발견 pip의가 --process-dependency-links에서 제거 될 예정 pip에 따라 19.0 이 댓글을 .

pip 18.1은 다음 기능을 포함합니다

PEP 508 URL 요구 사항이 종속성으로 사용되도록 허용하십시오.

에서 설명 PEP (508)의 같은 URL에 대한 구문은 외모처럼 종속 관계 :

최소 URL 기반 조회 :

핍 @ https://github.com/pypa/pip/archive/1.3.1.zip#sha1=da9234ee9982d4bbb3c72346a6de940a148ea686

그래서 당신의 setup.py모습은

setup(
   ...
   install_requires = [
   ...
   'python-gearman @ https://github.com/mtai/python-gearman/archive/master.zip'
   ...
   ]
)

링크는 아카이브 파일이며이 답변에 설명 대로 특정 릴리스 또는 리포지토리의 분기 일 수도 있습니다 . 또한 다른 리포지토리 호스트 작업에 대한 답변을 참조하십시오.

내가 아는 한, 종속성을 업데이트하는 가장 쉬운 방법 pip install -I .은 디렉토리에서 패키지를 설치할 때 사용 하는 것입니다.


이것은 pip installgit URL 등과 같이 지원되는 모든 것을 지원 #subdirectory=...합니까? 아니면 서로 다른 호환되지 않는 방식으로 노출 된 다른 기능을 가진 새로운 구문을 생각해 냈습니까?
remram 2019

setuptools를 사용하지 않고 명령 줄에서 수동으로 종속성을 관리하는 경우 여전히 @Rebs 'answer에 설명 된 방법을 사용해야하는 것처럼 보입니다 .
Phil

1
그냥이 작품을 확인 distutils.core.setup하고pip 19.1.1
shouldsee

결과는 requirements.txt, 그러나,와 호환되지 않습니다pip install -r requirments.txt
shouldsee

@ requirments.txt당신은 어느 쪽 을 언급하고 있습니까?
Phil

6

Vanilla setuptools는 git 저장소에서 직접 다운로드를 지원하지 않지만 다음 과 같이 해당 페이지 의 다운로드 소스 링크 중 하나를 사용할 수 있습니다 .

easy_install http://github.com/mtai/python-gearman/tarball/master

따라서이 버전의 python-gearman이 패키지를 설치할 서버에 설치되도록하려면 패키지를 설치하기 전에 easy_install을 수동으로 실행해야합니까?
andrei

easy_install을 사용하는 경우 예. 다른 사람이 지적하지만, 당신은으로 전환 할 수 pip또는 buildout더 복잡한 요구 사항 관리를한다. 예를 들면 다음과 같습니다. pip.openplans.org/#requirements-files
Ned Deily

실제로, easy_install을 수동으로 실행할 필요는 없습니다. setup.py에 추가 링크를 추가하기 만하면됩니다. 자세한 내용을 설명하는 답변을 작성하겠습니다.
PJ Eby

2
위의 내 의견에서 언급했듯이 setup.py는 의존성 링크를 제공하여 gti 저장소에서 다운로드 할 수 있습니다
TomDotTom
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.