powiedz pip ' owi, aby zainstalował zależności pakietów wymienionych w pliku wymagań

Rozwijając aplikację internetową Django, mam listę pakietów, które muszę zainstalować w virtualenv. Powiedz:

Django==1.3.1
--extra-index-url=http://dist.pinaxproject.com/dev/
Pinax==0.9b1.dev10
git+git://github.com/pinax/pinax-theme-bootstrap.git@cff4f5bbe9f87f0c67ee9ada9aa8ae82978f9890
# and other packages

Początkowo instalowałem je ręcznie, jeden po drugim, wzdłuż rozwoju. Zainstalowało to wymagane zależności i w końcu użyłem pip freeze przed wdrożeniem aplikacji.

Problem polega na tym, że jak zaktualizowałem niektóre pakiety, niektóre zależności nie są już używane ani wymagane, ale nadal są wymienione przez pip freeze.

Teraz chciałbym skonfigurować nowy virtualenv to sposób:

  • umieść potrzebne pakiety (bez ich zależności) w pliku wymagań,
    jak manual-requirements.txt
  • zainstaluj je z ich zależnościami
    pip install -r manual-requirement.txt (← problem, to nie instaluje zależności)
  • zamrożenie pełnego virtualenv
    pip freeze -r manual-requirements.txt > full-requirements.txt
    i rozmieścić.

Jest jakiś sposób, aby to zrobić bez ręcznego instalowania pakietów w nowym virtualenv, aby uzyskać ich zależności ? Byłoby to podatne na błędy i chciałbym zautomatyzować proces czyszczenie virtualenv ze starych, niepotrzebnych zależności.

Edit: właściwie, pip instaluje zależności Nie wymienione w pliku wymagań, nawet jeślidokumentacja mówi nam, że takie pliki są płaskie. Myliłem się co do zależności, które spodziewam się zainstalować. Pozwolę sobie na to pytanie każdemu, kto ma wątpliwości co do tego, że pip nie instaluje wszystkich zależności.

Author: Vadim Kotov, 2012-04-26

3 answers

Biorąc pod uwagę Twój komentarz do pytania (gdzie mówisz, że wykonanie instalacji dla pojedynczego pakietu działa zgodnie z oczekiwaniami), sugerowałbym zapętlenie pliku wymagań. W bash:

#!/bin/sh
while read p; do
  pip install $p
done < requirements.pip
HTH!
 12
Author: mac,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-26 14:11:41

Simplifily, use:

pip install -r requirement.txt

Może zainstalować wszystkie wymienione w pliku wymagań.

 45
Author: Ming,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-06 12:35:37

Jest jakiś sposób, aby to zrobić bez ręcznego instalowania pakietów w nowym virtualenv, aby uzyskać ich zależności ? Byłoby to podatne na błędy i chciałbym zautomatyzować proces czyszczenia virtualenv z niepotrzebnych już starych zależności.

Po to jest pakiet pip-tools (od https://github.com/nvie/pip-tools):

Instalacja

$ pip install --upgrade pip  # pip-tools needs pip==6.1 or higher (!)
$ pip install pip-tools

Przykładowe użycie dla PIP-compile

Załóżmy, że masz kolbę projekt i chcesz go przypiąć do produkcji. Zapisz następującą linię do pliku:

# requirements.in
Flask

Teraz uruchom PIP-compile requirements.in:

$ pip-compile requirements.in
#
# This file is autogenerated by pip-compile
# Make changes in requirements.in, then run this to update:
#
#    pip-compile requirements.in
#
flask==0.10.1
itsdangerous==0.24        # via flask
jinja2==2.7.3             # via flask
markupsafe==0.23          # via jinja2
werkzeug==0.10.4          # via flask

I wygeneruje requirements.txt, z przypiętymi wszystkimi zależnościami Flask (i wszystkimi zależnościami bazowymi). Umieścić ten plik pod kontrolą wersji i okresowo ponownie uruchomić pip-compile, aby zaktualizować Pakiety.

Przykładowe użycie dla PIP-sync

Teraz, gdy masz requirements.txt, możesz użyć pip-sync, aby zaktualizować swój wirtualny env, aby odzwierciedlić dokładnie to, co tam jest. Uwaga: spowoduje to zainstalowanie/uaktualnienie / odinstalowanie wszystkiego, co niezbędne, aby dopasować zawartość requirements.txt.

$ pip-sync
Uninstalling flake8-2.4.1:
  Successfully uninstalled flake8-2.4.1
Collecting click==4.1
  Downloading click-4.1-py2.py3-none-any.whl (62kB)
    100% |████████████████████████████████| 65kB 1.8MB/s
  Found existing installation: click 4.0
    Uninstalling click-4.0:
      Successfully uninstalled click-4.0
Successfully installed click-4.1
 22
Author: Piotr Dobrogost,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-15 14:03:03