2012-12-11 4 views
2

가정하자 내가 좋아하는 요구 사항 파일의 무리가 있습니다해결 파이썬 종속성

requirements.txt # common for both 2.x and 3.x 
requirements-2.txt # 2.x 
requirements-3.txt # 3.x 

을 나는 현재를 기반으로 setup.py 파일에 install_requires 인수를 채우는 싶습니다 파이썬 인터프리터 버전. 물론 pip이 설치 프로세스를 처리한다고 가정하십시오.

해결책 1 : 물론 올바른 요구 사항을 읽고 반환하는 간단한 함수를 작성할 수 있습니다. 여러 프로젝트가있는 경우이 기능을 어디에서나 복사해야하므로 분명히 수용 할 수 없습니다.

해결 방법 2 : 여기 다음 생각은 나를 위해 그것을 수행하는 간단한 패키지를 작성하는 것입니다,하지만 문제는 설치시에, 더 중요하게는 (python setup.py sdist을 같은)뿐만 아니라 유통시 사용할 수 있어야한다는 것입니다 만, 자기 기계에.

나는 그 일을하는 간단한 모듈을 작성하고, depmodule이라고 부를 수있다. 또한 setup.py 다음했다 :

# -*- coding: utf-8 -*- 

from setuptools import setup, find_packages 

try: 
    from depmodule import find_requirements 
except ImportError: 
    # this line is executed when reading setup.py for the first time 
    # since depmodule is not installed yet 
    find_requirements = lambda: [] 

setup(
    name='some-package', 
    packages=find_packages(), 
    # snip... 
    platforms='any', 

    # note that depmodule is listed here as a requirement, so it will be 
    # installed before some-package, thus will be available when it comes 
    # to running setup.py of some-package 
    install_requires=['depmodule'] + find_requirements(), 
) 

pip install some-package에 올 때 실제로 제대로 의존성을 해결하지만, 그들은 핍에 의해 선택되지 않으므로 그것은 단지 설치 : depmodule some-package을 (순서대로) 대신 depmodule dep1 dep2 ... some-package의.

나는 setup_requires 인수를 사용했지만 운이 없었습니다. 의존성은 다운로드되었지만 추출되지 않은 계란 패키지 였기 때문에 액세스 할 수 없었습니다.

이 문제를 극복 할 수있는 방법이 있습니까? 이것에 도움이 될 수있는 대안 (다른 접근법)이 있습니까?

감사합니다.

답변

0

여러 프로젝트의 코드를 복제하고 싶지 않으므로 setup.py을 생성하거나 setup.py의 일부를 단일 소스에서 업데이트하는 것이 좋습니다. Makefile.in 템플릿에서 Makefile을 생성하는 것과 유사합니다.

나는 이것을 위해 py_setup 프로그램이 있습니다. py_setup --new으로 호출하여 현재 디렉토리에 새로운 setup.py을 생성하고, py_setup의 일부를 템플릿으로 사용합니다. py_setup이 인 경우 파일 이름을 인수로 사용하여 실행하면 해당 파일의 세그먼트를 업데이트하려고하지만 나머지는 그대로 둡니다. 인수없이 실행하고 옵션없이 py_setup을 실행하면 모든 */setup.py 파일의 세그먼트가 업데이트됩니다.

py_setup의 세그먼트 (및 setup.py 파일)는 #_## segement_name의 주석 행으로 구분되거나 #_#으로 끝납니다.전이나 세그먼트 사이 뭐든지 복사되지만 복사 된 적이있는 py_setup의 라인 #_###setup.py 아무것도 업데이트되지 얻을 않을 것이다, 그

대부분의 라인이 그대로 복사되는 실제 py_setup 프로그램 코드를입니다 실제 코드는 로 시작 세그먼트 세퍼레이터 코멘트 (세그먼트 이름 후에 제거) 및 배선 다만, 그 라인 setup = 가입일

setup = setup 

개시시에 박리되므로, 그 설정에 대한 호출로 끝나는()에서 setup.py하지만 py_setup을 실행하면 안됩니다. 업데이트 할 때

은 대상에 setup.py기존 세그먼트 py_setup 동일한 이름 부분에서 라인으로 대체된다. 세그먼트 이름을 제거하거나 변경하면 코드 변경 사항이 적용되지 않습니다.

관련 문제