다른 virtualenv 환경 에 동일한 패키지를 많이 설치 합니다. 패키지를 한 번 다운로드 한 다음 로컬 캐시에서 pip를 설치할 수있는 방법이 있습니까?
다운로드 대역폭과 시간이 줄어 듭니다.
답변
업데이트 된 답변 19-Nov-15
Pip 설명서 에 따르면 :
v6.0부터는 pip는 기본적으로 웹 브라우저의 캐시와 유사한 기능을하는 캐시를 제공합니다. 캐시는 기본적으로 켜져 있고 기본적으로 올바른 작업을 수행하도록 설계되어 있지만
--no-cache-dir
옵션을 사용하여 캐시를 비활성화하고 항상 PyPI에 액세스 할 수 있습니다 .
따라서 업데이트 캐시는 다운로드 캐시를 원할 경우 기본값으로 pip를 사용하는 것입니다.
원래 답변
로부터 핍 뉴스 , 버전 0.1.4 :
패키지 다운로드를 캐시 할 환경 변수 $ PIP_DOWNLOAD_CACHE에 대한 지원이 추가되었으므로 향후 설치에는 큰 다운로드가 필요하지 않습니다. 네트워크 액세스는 여전히 필요하지만 이것을 사용할 때 일부 다운로드는 피할 수 있습니다.
이를 활용하기 위해 다음을 추가했습니다 ~/.bash_profile
.
export PIP_DOWNLOAD_CACHE=$HOME/.pip_download_cache
또는 Mac을 사용하는 경우 :
export PIP_DOWNLOAD_CACHE=$HOME/Library/Caches/pip-downloads
노트
- 최신 버전의 패키지가 발견되면 다운로드하여
PIP_DOWNLOAD_CACHE
디렉토리에 추가합니다 . 예를 들어, 이제 꽤 많은 장고 패키지가 있습니다. - 이것은 pip news에 명시된 것처럼 네트워크 액세스의 필요성을 제거하지 않으므로
virtualenvs
비행기에서 새로운 것을 만드는 데 대한 대답은 아니지만 여전히 훌륭합니다.
답변
제 생각에는 pip2pi
이 문제에 대한 훨씬 더 우아하고 신뢰할 수있는 솔루션입니다.
문서에서 :
pip2pi는 pip 요구 사항에서 PyPI 호환 패키지 저장소를 빌드합니다.
pip2pi
두 가지 간단한 명령을 사용하여 자신의 PyPI 색인을 만들 수 있습니다.
-
패키지와 모든 요구 사항을 미러링하려면
pip2tgz
다음을 사용하십시오 .$ cd /tmp/; mkdir package/ $ pip2tgz packages/ httpie==0.2 ... $ ls packages/ Pygments-1.5.tar.gz httpie-0.2.0.tar.gz requests-0.14.0.tar.gz
-
이전 디렉토리에서 패키지 색인을 빌드하려면 다음을 수행하십시오.
$ ls packages/ bar-0.8.tar.gz baz-0.3.tar.gz foo-1.2.tar.gz $ dir2pi packages/ $ find packages/ /httpie-0.2.0.tar.gz /Pygments-1.5.tar.gz /requests-0.14.0.tar.gz /simple /simple/httpie /simple/httpie/httpie-0.2.0.tar.gz /simple/Pygments /simple/Pygments/Pygments-1.5.tar.gz /simple/requests /simple/requests/requests-0.14.0.tar.gz
-
2 단계에서 빌드 한 색인에서 설치하려면 다음을 사용하면됩니다.
pip install --index-url=file:///tmp/packages/simple/ httpie==0.2
를 사용하여 자신의 인덱스를 원격 호스트에 미러링 할 수도 있습니다 pip2pi
.
답변
최신 Pip 버전의 경우 :
최신 Pip 버전은 이제 기본적으로 다운로드를 캐시합니다. 이 설명서를 참조하십시오 :
https://pip.pypa.io/en/stable/reference/pip_install/#caching
이전 Pip 버전의 경우 :
이라는 구성 파일을 작성 ~/.pip/pip.conf
하고 다음 내용을 추가하십시오.
[global]
download_cache = ~/.cache/pip
OS X에서 ~/Library/Caches/pip
다른 OS X 프로그램이 사용하는 규칙을 따르기 때문에 선택하는 것이 좋습니다 .
답변
PIP_DOWNLOAD_CACHE에는 심각한 문제가 있습니다. 가장 중요한 것은 다운로드의 호스트 이름을 캐시로 인코딩하므로 미러 사용이 불가능하다는 것입니다.
pip 다운로드 캐시를 관리하는 더 좋은 방법은 “패키지 다운로드”단계와 “패키지 설치”단계를 분리하는 것입니다. 다운로드 된 파일은 일반적으로 “sdist files”(소스 배포)라고하며 $ SDIST_CACHE 디렉토리에 저장합니다.
두 단계는 다음과 같습니다.
pip install --no-install --use-mirrors -I --download=$SDIST_CACHE <package name>
패키지를 다운로드하여 $ SDIST_CACHE가 가리키는 디렉토리에 배치합니다. 패키지를 설치하지 않습니다. 그런 다음 다음을 실행하십시오.
pip install --find-links=file://$SDIST_CACHE --no-index --index-url=file:///dev/null <package name>
가상 환경에 패키지를 설치합니다. 이상적으로 $ SDIST_CACHE는 소스 제어하에 커밋됩니다. 프로덕션 환경에 배포 할 때는 두 번째 pip 명령 만 실행하여 패키지를 다운로드하지 않고 설치합니다.
답변
부터 버전 6.0 , pip
지금은 자신의 캐싱입니다 않습니다 :
- DEPRECATION
pip install --download-cache
및pip wheel --download-cache
명령 행 플래그는 더 이상 사용되지 않으며 기능이 제거되었습니다. pip는 자동으로 내부 HTTP 캐시를 구성하고 사용하므로--download-cache
기존 옵션이 작동하지 않게되었지만 pip v8.0에서 제거 될 때까지 계속 허용됩니다. 자세한 내용은 https://pip.pypa.io/en/latest/reference/pip_install.html#caching을 참조 하십시오.
위의 링크 에서 추가 정보 :
v6.0부터는 pip는 기본적으로 웹 브라우저의 캐시와 유사한 기능을하는 캐시를 제공합니다. 캐시는 기본적으로 켜져 있고 기본적으로 올바른 작업을 수행하도록 설계되어 있지만
--no-cache-dir
옵션을 사용하여 캐시를 비활성화하고 항상 PyPI에 액세스 할 수 있습니다 .
답변
핍 휠 은 패키지를 사전 컴파일하는 추가 기능으로 원하는 것을 수행하는 훌륭한 옵션입니다. 로부터 공식 문서 :
요구 사항 및 모든 종속 항목에 대한 휠을 작성하십시오.
$ pip wheel --wheel-dir=/tmp/wheelhouse SomePackage
이제 /tmp/wheelhouse
디렉토리에는 모든 종속성이 사전 컴파일되어 있으므로 폴더를 다른 서버에 복사하고 다음 명령으로 모든 것을 설치할 수 있습니다.
$ pip install --no-index --find-links=/tmp/wheelhouse SomePackage
모든 패키지가 모든 시스템에서 완전히 이식 가능하지는 않습니다. 일부 패키지는 사용중인 Python 버전, OS 배포 및 / 또는 하드웨어 아키텍처를 위해 특별히 제작됩니다. -cp27-none-linux_x86_64
64 비트 Linux 등에서 CPython 2.7 과 같이 파일 이름으로 지정됩니다 .
답변
pip 만 사용하면 (내 버전은 1.2.1 임) 다음과 같은 로컬 저장소를 구축 할 수도 있습니다.
if ! pip install --find-links="file://$PIP_SDIST_INDEX" --no-index <package>; then
pip install --download-directory="$PIP_SDIST_INDEX" <package>
pip install --find-links="file://$PIP_SDIST_INDEX" --no-index <package>
fi
pip의 첫 번째 호출에서 요구 사항 파일의 패키지는 로컬 리포지토리에서 조회 된 후 해당 저장소에서 설치됩니다. 실패하면 pip는 일반적인 위치 (예 : PyPI)에서 패키지를 검색하여 패키지를 다운로드 PIP_SDIST_INDEX
하지만 설치하지는 않습니다! 첫 번째 호출은 로컬 인덱스에서 패키지를 올바르게 설치하기 위해 “반복”됩니다.
( --download-cache
완전한 (이스케이프 된) URL 인 로컬 파일 이름을 생성하며, pip는이 인덱스를 인덱스로 사용할 수 없습니다 --find-links
. --download-cache
캐시 된 파일을 찾은 경우 캐시 된 파일을 사용합니다. pip의 두 번째 호출에이 옵션을 추가 할 수 있지만 인덱스 이후 이미 일종의 캐시로 작동하기 때문에 반드시 많은 것을 가져올 필요는 없습니다 (예 : 색인을 비우면 도움이됩니다).