2016-07-11 2 views
2

일부 Python 패키지는 종속성으로 두 패키지 중 하나를 필요로합니다. 예를 들어 Ghost.pyPySide 또는 PyQt4 중 하나가 필요합니다.요구 사항 파일에 두 가지 종속성 중 하나만 필요합니다.

requirements.txt 파일에 이러한 종속성을 포함시킬 수 있습니까? 이 파일들과 함께 작동하는 '또는'연산자가 있습니까?

그렇지 않은 경우 이러한 요구 사항을 파일에 추가하여 그 중 하나만 설치하면됩니까?

답변

2

현재 핏의 requirement.txt도 setuptools도 직접 이러한 구성을 허용하지 않습니다. 둘 다 요구 사항 목록을 지정해야합니다. 요구 사항의 버전을 제한 할 수는 있지만 그게 전부입니다. 다음과 같이

내부 파이썬, 당신은이 상황을 처리 할 수 ​​

try: 
    import dependency1 

    def do_it(x): 
     return dependency1.some_function(x) 
except ImportError: 
    try: 
     import dependency2 

     def do_it(x) 
      return dependency2.another_function(x) 
    except ImportError: 
     raise ImportError('You must install either dependency1 or ' 
          + 'dependecy2!') 

지금 do_it 중 하나 dependency1.some_function 또는 dependency2.another_function 사용에 따라하는 것은 가능합니다.

그래도 요구 사항을 지정하는 방법에 대한 문제가 발생합니다.

  1. 정식 사용자가 종속성 중 하나 설치해야 requirements.txt 또는 setup.py하지만 문서의 요구 사항을 지정하지 마십시오 : 나는 두 가지 옵션을 참조하십시오. 소프트웨어의 설정에서 추가 수동 단계가 필요한 경우 (예 : pip install my_tool 이상)이 방법을 사용할 수 있습니다.
  2. 선호하는 요구 사항을 requirements.txt 또는 setup.py으로 하드 코드하십시오.

결국 사람들은 왜 하나의 종속성을 다른 것보다 사용하려고하는지 물어보아야합니다. (디스크 공간이 부족하기 때문에) 일반적으로 내가 사용하는 라이브러리의 종속성에 대해 신경을 쓰지 않아도됩니다. 싸고 (virtualenv로 인해) 비 호환성의 위험이 거의 없습니다. 따라서 동일한 기능에 대해 서로 다른 두 가지 종속성을 지원하지 않는다고 생각하는 것이 좋습니다.

pip install $(requirements.py) 

:

1

나는

chmod +x requirements.py 

으로이

#!/usr/bin/env python 
packages = 'p1 p2 p3'.split() 

try: 
    import optional1 
except ImportError: # opt1 not installed 
    try: 
     import optional2 
    except ImportError: # opt2 not installed 
     packages.append('optional2') 

print(' '.join(packages)) 

이 스크립트의 실행 파일을 가지고 수행 그리고 마지막으로 이런 식으로 핍을 실행하는 작은 파이썬 스크립트를 사용합니다 '$ (requirements.py)'는 requirements.py 스크립트를 실행하고 그 결과를 출력합니다 (이 경우에는 pac kages)를 설치하십시오.

+0

흥미 롭습니다. 나는 당신이'pip'와 같은 구문을 사용할 수 있는지 몰랐습니다. –