Propozycja Stephena to fajny pomysł, ale niestety nie działa, jeśli umieścisz w swoim pliku tylko bezpośrednie wymagania, co dla mnie brzmi czysto.
Wszystkie zależności zostaną odinstalowane, w tym nawet distribute
, pip
samoczynnie się zepsuje.
Utrzymywanie czystego pliku wymagań podczas śledzenia wersji środowiska wirtualnego
Oto jak próbuję śledzić wersje mojego wirtualnego środowiska. Staram się zachować minimum requirements.txt
, w tym tylko bezpośrednie wymagania, nie wspominając nawet o ograniczeniach wersji, jeśli nie jestem pewien.
Ale poza tym zachowuję i dołączam do śledzenia wersji (powiedzmy git) rzeczywisty stan mojego virtualenv w venv.pip
pliku.
Oto przykładowy przepływ pracy:
skonfiguruj obszar roboczy virtualenv ze śledzeniem wersji:
mkdir /tmp/pip_uninstalling
cd /tmp/pip_uninstalling
virtualenv venv
. venv/bin/activate
zainicjalizuj system śledzenia wersji:
git init
echo venv > .gitignore
pip freeze > venv.pip
git add .gitignore venv.pip
git commit -m "Python project with venv"
zainstaluj pakiet z zależnościami, umieść go w pliku wymagań:
echo flask > requirements.txt
pip install -r requirements.txt
pip freeze > venv.pip
Teraz zacznij budować swoją aplikację, a następnie zatwierdź i rozpocznij nową gałąź:
vim myapp.py
git commit -am "Simple flask application"
git checkout -b "experiments"
zainstaluj dodatkowy pakiet:
echo flask-script >> requirements.txt
pip install -r requirements.txt
pip freeze > venv.pip
... baw się nim, a potem wróć do wcześniejszej wersji
vim manage.py
git commit -am "Playing with flask-script"
git checkout master
Teraz odinstaluj obce pakiety:
pip freeze | grep -v -f venv.pip | xargs pip uninstall -y
Przypuszczam, że proces można zautomatyzować za pomocą haków git, ale nie odchodźmy od tematu.
Oczywiście sensowne jest wtedy użycie jakiegoś systemu buforowania pakietów lub lokalnego repozytorium, takiego jak pip2pi