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

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

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



답변

핵심은 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. 종속성 링크 처리는 더 이상 사용되지 않으며 향후 릴리스에서 제거 될 것입니다.


답변

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


답변

난 그냥 같은 일을했다, 나는대로이 작업을 수행하는 또 다른 방법 발견 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 .은 디렉토리에서 패키지를 설치할 때 사용 하는 것입니다.


답변

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

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


답변