다른 virtualenv 환경 에 동일한 패키지를 많이 설치 합니다. 패키지를 한 번 다운로드 한 다음 로컬 캐시에서 pip를 설치할 수있는 방법이 있습니까?
다운로드 대역폭과 시간이 줄어 듭니다.
다른 virtualenv 환경 에 동일한 패키지를 많이 설치 합니다. 패키지를 한 번 다운로드 한 다음 로컬 캐시에서 pip를 설치할 수있는 방법이 있습니까?
다운로드 대역폭과 시간이 줄어 듭니다.
답변:
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
디렉토리에 추가합니다 . 예를 들어, 이제 꽤 많은 장고 패키지가 있습니다.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
.
pip2tgz
있습니다. 패키지를 지정된 디렉토리에 이미 다운로드했는지 감지하여 종속성이 겹치는 동일한 설치 라인 또는 여러 설치 라인을 실행하면 각 패키지를 한 번만 다운로드합니다.
최신 Pip 버전은 이제 기본적으로 다운로드를 캐시합니다. 이 설명서를 참조하십시오 :
https://pip.pypa.io/en/stable/reference/pip_install/#caching
이라는 구성 파일을 작성 ~/.pip/pip.conf
하고 다음 내용을 추가하십시오.
[global]
download_cache = ~/.cache/pip
OS X에서 ~/Library/Caches/pip
다른 OS X 프로그램이 사용하는 규칙을 따르기 때문에 선택하는 것이 좋습니다 .
pip.conf
로 download_cache
설정하는 것과 같은 시스템 전체 디렉토리를 가리 킵니다.
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의 두 번째 호출에이 옵션을 추가 할 수 있지만 인덱스 이후 이미 일종의 캐시로 작동하기 때문에 반드시 많은 것을 가져올 필요는 없습니다 (예 : 색인을 비우면 도움이됩니다).
캐싱이 내장 된 드롭 인 대체품 인 pip-accel 이라는 새로운 솔루션이 pip
있습니다.
pip-accel 프로그램은 Python 패키지 관리자 인 pip의 래퍼입니다. 하나 이상의 요구 사항 파일이 제공된 Python 가상 환경을 초기화하기 위해 pip 사용을 가속화합니다. 다음 두 가지 접근 방식을 결합하면됩니다.
소스 배포 다운로드는 캐시되어 소스 배포 아카이브의 로컬 인덱스를 생성하는 데 사용됩니다.
이진 배포는 이진 구성 요소 (M2Crypto 및 LXML 등)를 사용하여 종속성을 설치하는 프로세스 속도를 높이는 데 사용됩니다. 모든 가상 환경에 대해 이러한 종속성을 다시 컴파일하는 대신 한 번 컴파일하고 결과를 이진 * .tar.gz 배포로 캐시합니다.
Paylogic은 pip-accel을 사용하여 지속적으로 단위 테스트를 실행하는 지속적 통합 슬레이브 팜의 가상 환경을 빠르고 안정적으로 초기화합니다 (pip-accel이 개발 된 최초의 사용 사례 중 하나임). 빌드 서버에서도 사용합니다.
에서 (으)로 전환하는 속도가 약 10 배 증가 pip
했습니다 pip-accel
.
더 간단한 옵션은 basket
입니다.
패키지 이름이 주어지면 패키지와 모든 종속성을 중앙 위치로 다운로드합니다. pip 캐시의 단점이 없습니다. 오프라인 사용에 좋습니다.
그런 다음이 디렉토리를 소스로 사용할 수 있습니다 pip
.
pip install --no-index -f file:///path/to/basket package
또는 easy_install
:
easy_install -f ~/path/to/basket -H None package
온라인 상태 일 때 바구니를 사용하여 바구니를 업데이트 할 수도 있습니다.