(여기에서 Heroku의 지원하에 문의 함)왜 Heroku는 새로운 배포에서 오래된 Python (pip) 종속성을 설치합니까?
개발자 환경간에 라이브러리가 일치하지 않는 프로젝트에서 종속성 문제가 발견되었습니다. 세부 정보는 관련이 없지만 근본적인 원인은 setup.py
에서 "> ="버전이 일치하는 종속성이었습니다. 즉, 개발자가 환경을 재구성하면 갑자기 최신 버전 (0.4.0)이 그는 이전 버전 (0.3.11)이었고 DeprecationWarning
을 받기 시작했습니다.
디버깅 프로세스의 일부로 Repo가 Heroku에 푸시 될 때마다 깨끗한 환경이 재구성되어 DEV 환경 (일일 재 빌드)이 잘못되었다고 가정합니다. 최신 버전이 설치되어 있어야합니다. 우리는 가이 아니기 때문에 dev 환경에서이 문제를보고 조사하기로 결정했으며 원격 환경에서 을 실행했습니다.
나는이 결과가 오래되고 만료 된 의존성에 대한 행운을 비는 데 매우 놀랐으며, 이 아닌 깨끗한 환경은 모두입니다. 이전 설치의 일부로 우리가 살고있는 환경에서 행복하게 디버깅하는 문제를 겪었을 수도 있습니다.
가장 쉬운 방법은 BeautifulSoup 라이브러리입니다. 우리는 최근에 v3에서 v4로 업데이트하였고, 그 일환으로 라이브러리 자체가 Py34의 이름을 BeautifulSoup
에서 beautifulsoup4
으로 변경했습니다. 우리는이를 반영하기 위해 requirements.txt
을 업데이트,하지만 지금 우리에게 Heroku 환경에 pip list
을 실행하면 둘 다 얻을 :
~ $ heroku run bash
~ $ pip list
BeautifulSoup (3.2.1)
beautifulsoup4 (4.3.2)
따라서, 기존의 종속성이 해제되지 않은, 그냥 거기에 앉아있다. 나는 파이썬 세션까지 발사 쉽게 충분히 증명할 수 : 이것은 가벼운 쇼크입니다
~ $ python
Python 2.7.4 (default, Apr 6 2013, 22:14:13)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import bs4
>>> import BeautifulSoup
>>>
을, 나는이 어떤 점에서 우리의 응용 프로그램을 살해하지 않았 음을 깜짝 놀라게?
그래서 Heroku는 어떻게 후드에서 종속성을 관리합니까? 분명히 파이썬 환경을 지우지 않고 각 배포시 pip install
을 다시 실행하지 않습니다.이 동작을 강제로 수행 할 수있는 방법이 있습니까?
[EDIT 1]
FWIW,이다 설치 않는 buildpack - https://github.com/heroku/heroku-buildpack-python/blob/master/bin/compile
[EDIT 2
를 Heroku Buildpack 문서에서 :의
내용을 CACHE_DIR은 빌드간에 유지됩니다. 여기에서 의존성 분석과 같은 긴 프로세스의 결과를 캐시하여 향후 빌드 속도를 높일 수 있습니다.
그리고 further down :
빈은/스크립트를 컴파일하는 빌드 사이에 아티팩트를 저장하는 데 사용할 수있는 두 번째 인수로 cache_dir의 주어집니다. 이 디렉토리에 저장된 아티팩트는 연속 빌드 중에 CACHE_DIR에서 사용 가능합니다.CACHE_DIR은 슬러그 컴파일 중에 만 사용할 수 있으며 빌드중인 앱에만 적용됩니다.
권장 사항은 다음과 같습니다 Heroku가-REPO 플러그인을 사용할 수 있습니다
에게 Heroku의 사용자가 말했다 자신의 응용 프로그램
에 사용하는 buildpack에 의해 생성 된 빌드 캐시를 지우려면 - I 동안 미래의 컴파일 속도를 높이기 위해 캐시가 사용된다는 것을 이해하고, 캐시의 모든 요소가 왜 설치되어 있는지 이해할 수 없습니다. 그건 말이 안되니?
종합적인 답변 주셔서 감사합니다. 우리는 완전한 고정을 사용하여 오랫동안 실행했지만 종속성의 의존성과 고정 된 버전 간의 불일치로 인해 잡혔습니다. 'heroko_repo'와'purge_cache'를 사용하면 환경을 깨끗이 정리할 수 있었고, 실제로 무슨 일이 일어나고 있는지 알 수있었습니다. 그것은 무엇보다도 가사에 관한 것입니다. 우리가 더 이상 환경에서 벗어나지 않는 오래된 deps를 가지고 있습니다. –
추신 : buildpacks에 대해 KR을 파고 간 경우 -이 문제도 (디버깅의 일환으로) 우리를 트 랩핑했습니다. - https://github.com/heroku/heroku-buildpack-python/pull/152 –