2012-09-20 18 views
9

Jaki jest właściwy sposób instalacji pakietów pip na virtualenv przy użyciu pakietów z pamięci podręcznej? Próbowałem ustawić --timeout=360 i --use-mirrors, ale wydajność pypi jest tak flakey, to rutynowo zawiesza się lub rozłącza, czyniąc wdrożeń crapshoot.Instalowanie pakietów PIP do Virtualenv przy użyciu cache pobierania

Więc, mój plan był do korzystania z opcji --download-cache do pre-download wszystkich archiwów pakietów (ale nie ich instalacji), np:

pip install --upgrade --timeout=120 --use-mirrors --no-install --download-cache /usr/local/pip/cache -r pip-requirements.txt 

a następnie określić tę lokalizację cache podczas instalacji do virtualenv, np

virtualenv /usr/local/myapp/.env 
. /usr/local/myapp/.env/bin/activate; pip install --no-download --download-cache /usr/local/pip/cache -r pip-requirements.txt 
deactivate 

Tworzenie cache było bardzo frustrujące, ponieważ wydaje się, pip niedeterministycznie zapisać pobrany pakiet do pamięci podręcznej reż. W szczególności odmówił buforowania Django==1.4.0, mówiąc: "to wymaganie zostało już spełnione", więc musiałem użyć --force-reinstall.

Instalacja z wykorzystaniem pamięci podręcznej jest obecnie w miejscu, gdzie utknąłem. Uruchomienie powyższego polecenia powoduje błąd:

Could not install requirement Django==1.4.0 (from -r pip-requirements.txt (line 1)) because source folder /usr/local/myapp/.env/build/Django does not exist (perhaps --no-download was used without first running an equivalent install with --no-install?) 
Storing complete log in /home/chris/.pip/pip.log 

Co to oznacza?

Pliki:

http%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2FD%2FDjango%2FDjango-1.4.tar.gz 
http%3A%2F%2Fpypi.python.org%2Fpackages%2Fsource%2FD%2FDjango%2FDjango-1.4.tar.gz.content-type 

pewno istnieje w katalogu pamięci podręcznej, i użyłem opcji --no-install.

Co robię źle?

+0

pokrewne: czy jest tylko lepsze urządzenie cdn/mirror, do którego można skierować aplikację zamiast tworzyć? – David

+0

Myślę, że niewłaściwe jest używanie terminu "pakiety paczek". Być może masz na myśli pakiety PyPI lub pakiety Pythona – glarrain

Odpowiedz

18

Problem wydaje się taki, że --download-cache można użyć tylko do określenia pamięci podręcznej do pobrania, a nie do instalacji. Dlatego pip wciąż szuka /usr/local/myapp/.env/build/Django zamiast /usr/local/pip/cache. Czy po utworzeniu virtualenv próbujesz przenieśćZastanawiam się, czy to pomogłoby.

Możesz również spróbować wyeksportować PIP_DOWNLOAD_CACHE i sprawdzić, czy działa bez użycia --download-cache.

Oto, co uważam, że działa:

pip install --no-install --use-mirrors --download=/DIRNAME PKGNAME 
pip install --find-links=file:///DIRNAME --no-index --index-url=file:///dev/null PKGNAME 

Teraz rzeczywiście, tutaj jest narzędziem użyłbym zamiast wszystkie powyższe i rozwiązuje wszystkie problemów znacznie bardziej elegancko i niezawodnie: pip2pi David Wolever.

Od docs:

pip2pi builds a PyPI-compatible package repository from pip requirements

pip2pi pozwala stworzyć swój własny indeks PyPI za pomocą dwóch prostych poleceń:

  1. Aby lustro pakiet i wszystkie jego wymagania, należy 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. Aby zbudować Indeks pakiet z poprzedniego katalogu:

    $ 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. Aby zainstalować z indeksu ty zbudowany w punkcie 2., można po prostu użyć:

    pip install --index-url=file:///tmp/packages/simple/ httpie==0.2 
    

Bonus: można nawet lustro własnego Indeks do zdalnego hosta z pip2pi.

Powiązane problemy