GitHub 리포지토리를 requirements.txt에 포함

6445 단어 파이썬GitHubpip

개요




PyPI에는 등록되지 않았지만 GitHub에 게시 된 라이브러리를 종속성에 포함시키는 방법.
또한 setup.py에서 requirements.txt를 참조하는 경우의 대응 방법을 망비록으로 정리한다.

requirements.txt



GitHub 리포지토리의 URL이 htps : // 기주 b. 코 m / rg 미닌 g / 코몬이면,
requirements.txt의 경우,

requirements.txt
-e git+https://github.com/rgmining/common.git#egg=rgmining_common-0.9.0

같이 쓴다. #egg= 이후는 <패키지 이름>-<버전>이라는 형식으로 하는 것 같다.
또한 pip-tools를 사용하여 requirements.txt를 생성하는 경우,requirements.in는 위와 동일한 문자열을 입력합니다.

설 p. py



지금까지 setup.py에서는 아래와 같이 requirements.txt의 내용을 install_requires에 건네주었다.

setup.py
from setuptools import setup, find_packages

def load_requires_from_file(filepath):
    with open(filepath) as fp:
        return [pkg_name.strip() for pkg_name in fp.readlines()]

setup(
    # その他の項目は省略
    install_requires=load_requires_from_file("requirements.txt")
)
requirements.txt에 URL이 포함되어 있으면 조금 더 개선하여 패키지 이름 만 나열합니다.

setup.py
def take_package_name(name):
    if name.startswith("-e"):
        return name[name.find("=")+1:name.rfind("-")]
    else:
        return name.strip()

def load_requires_from_file(filepath):
    with open(filepath) as fp:
        return [take_package_name(pkg_name) for pkg_name in fp.readlines()]

또한 URL 부분은 setup 함수의 키워드 인수 dependency_link에 전달됩니다.

setup.py
def load_links_from_file(filepath):
    res = []
    with open(filepath) as fp:
        for pkg_name in fp.readlines():
            if pkg_name.startswith("-e"):
                res.append(pkg_name.split(" ")[1])
    return res

setup(
    # 他の項目は省略
    install_requires=load_requires_from_file("requirements.txt"),
    dependency_links=load_links_from_file("requirements.txt"),
)

따라서 python setup.py test와 같이 GitHub에서 패키지를 준비하고 테스트를 실행할 수 있습니다.

참고


  • pip에 github 리포지토리 설치
  • 좋은 웹페이지 즐겨찾기