일부 Python 라이브러리를 패키징하고 설치하기 위해 virtualenv와 함께 pip를 사용하고 있습니다.
제가하는 일은 꽤 흔한 시나리오라고 생각합니다. 저는 종속성을 명시 적으로 지정할 수있는 여러 라이브러리의 관리자입니다. 내 라이브러리 중 일부는 내가 제어 할 수없는 전이 종속성이있는 타사 라이브러리에 의존합니다.
내가 달성하려는 pip install
것은 내 라이브러리 중 하나에서 모든 업스트림 종속성을 다운로드 / 설치하는 것입니다. pip 문서에서 내가 고민하는 것은 요구 사항 파일 이 자체적으로이를 수행 할 수 있는지 또는 실제로 install_requires
.
내가 사용하는 것이 install_requires
충돌을 해결 및 / 또는 생산 빌드를 동결 의존성 및 버전 범위를 지정하기 위해 내 모든 라이브러리에서 다음 만 요구 파일을 사용할 수 있습니까?
내가 상상의 세계에 살고 있다고 가정 해 봅시다. (나는 알고 있습니다) 내 업스트림 종속성은 간단하며 결코 충돌하거나 이전 버전과의 호환성을 깨뜨리지 않습니다. pip 요구 사항 파일을 사용하거나 pip / setuptools / distribute가 기반으로 모든 것을 설치하도록해야 install_requires
합니까?
여기에는 비슷한 질문이 많이 있지만 언제 둘 중 하나를 사용하거나 둘 다 조화롭게 사용하는 것만 큼 기본적인 질문을 찾을 수 없었습니다.
답변
제 철학은 install_requires
당신이 필요한 최소한의 것을 나타내야한다는 것입니다. 당신이 경우 버전 요구 사항을 포함 할 수 있습니다 알고있는 몇 가지 버전이 작동하지 않습니다; 하지만 확실하지 않은 버전 요구 사항은 없어야합니다 (예 : 종속성의 향후 릴리스가 라이브러리를 손상 시킬지 여부를 확신 할 수 없음).
반면 요구 사항 파일은 사용자가 알고있는 것이 작동 하는지 나타내야 하며 권장하는 선택적 종속성을 포함 할 수 있습니다. 예를 들어 SQLAlchemy를 사용하지만 MySQL을 제안하므로 요구 사항 파일에 MySQLdb를 넣을 수 있습니다.
요약하면, install_requires
작동하지 않는 것을 아는 일로부터 사람들을 멀리하는 한편, 작동하는 것을 아는 것으로 사람들을 이끄는 요구 사항 파일입니다. 그 이유 중 하나는 install_requires
요구 사항이 항상 확인되며 실제로 패키지 메타 데이터를 변경하지 않고는 비활성화 할 수 없기 때문입니다. 따라서 새로운 조합을 쉽게 시도 할 수 없습니다. 요구 사항 파일은 설치시에만 확인됩니다.
답변
내 setup.py에 넣은 내용은 다음과 같습니다.
# this grabs the requirements from requirements.txt
REQUIREMENTS = [i.strip() for i in open("requirements.txt").readlines()]
setup(
.....
install_requires=REQUIREMENTS
)
답변
Python 패키징 사용자 가이드에는이 주제에 대한 페이지가 있습니다. 읽어 보는 것이 좋습니다.
요약:
install_requires
패키지가 작동하려면 반드시 설치해야하는 패키지의 종속성을 나열합니다. 종속성을 특정 버전에 고정하는 것은 아니지만 범위는 허용됩니다 (예 : install_requires=['django>=1.8']
. 및 다른 도구에 install_requires
의해 관찰됩니다 pip install name-on-pypi
.
requirements.txt
실행하도록 선택할 수있는 텍스트 파일 pip install -r requirements.txt
입니다. 다음과 같이 모든 종속성 및 하위 종속성의 버전이 고정되어 django==1.8.1
있습니다. 을 사용하여 만들 수 있습니다 pip freeze > requirements.txt
. (일부 서비스는 Heroku가 같이 자동으로 실행 pip install -r requirements.txt
당신을 위해.) pip install name-on-pypi
보지 않고 requirements.txt
단지에서 install_requires
.
답변
나는 오직 한 곳만 볼 수 있기 때문에 a setup.py
와 만 사용합니다 install_requires
. 요구 사항 파일이있는 것만 큼 강력하며 유지 관리 할 중복이 없습니다.