[virtualenv] pip를 사용하여 로컬 캐시에서 어떻게 설치합니까?

다른 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

노트

  1. 최신 버전의 패키지가 발견되면 다운로드하여 PIP_DOWNLOAD_CACHE디렉토리에 추가합니다 . 예를 들어, 이제 꽤 많은 장고 패키지가 있습니다.
  2. 이것은 pip news에 명시된 것처럼 네트워크 액세스의 필요성을 제거하지 않으므로 virtualenvs비행기에서 새로운 것을 만드는 데 대한 대답은 아니지만 여전히 훌륭합니다.

답변

제 생각에는 pip2pi이 문제에 대한 훨씬 더 우아하고 신뢰할 수있는 솔루션입니다.

문서에서 :

pip2pi는 pip 요구 사항에서 PyPI 호환 패키지 저장소를 빌드합니다.

pip2pi 두 가지 간단한 명령을 사용하여 자신의 PyPI 색인을 만들 수 있습니다.

  1. 패키지와 모든 요구 사항을 미러링하려면 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
    
  2. 이전 디렉토리에서 패키지 색인을 빌드하려면 다음을 수행하십시오.

    $ 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
    
  3. 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-cachepip 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_6464 비트 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의 두 번째 호출에이 옵션을 추가 할 수 있지만 인덱스 이후 이미 일종의 캐시로 작동하기 때문에 반드시 많은 것을 가져올 필요는 없습니다 (예 : 색인을 비우면 도움이됩니다).