Stephens Vorschlag ist eine nette Idee, aber leider funktioniert es nicht, wenn Sie nur direkte Anforderungen in Ihre Datei aufnehmen, was für mich sauberer klingt.
Alle Abhängigkeiten werden deinstalliert, auch gerade distribute, und brechen sich pipselbst auf.
Verwalten einer sauberen Anforderungsdatei während der Versionsverfolgung einer virtuellen Umgebung
So versuche ich, meine virtuelle Umgebung zu versionieren. Ich versuche, ein Minimum beizubehalten requirements.txt, einschließlich der direkten Anforderungen, und erwähne nicht einmal Versionsbeschränkungen, bei denen ich mir nicht sicher bin.
Außerdem behalte ich den tatsächlichen Status meiner virtuellen Umgebung in einer venv.pipDatei und beziehe sie in die Versionsverfolgung (z. B. git) ein .
Hier ist ein Beispielworkflow:
Richten Sie den virtuellen Arbeitsbereich mit Versionsverfolgung ein:
mkdir /tmp/pip_uninstalling
cd /tmp/pip_uninstalling
virtualenv venv
. venv/bin/activate
Versionsverfolgungssystem initialisieren:
git init
echo venv > .gitignore
pip freeze > venv.pip
git add .gitignore venv.pip
git commit -m "Python project with venv"
Installieren Sie ein Paket mit Abhängigkeiten und fügen Sie es in die Anforderungsdatei ein:
echo flask > requirements.txt
pip install -r requirements.txt
pip freeze > venv.pip
Beginnen Sie nun mit dem Erstellen Ihrer App, legen Sie fest und starten Sie einen neuen Zweig:
vim myapp.py
git commit -am "Simple flask application"
git checkout -b "experiments"
Installieren Sie ein zusätzliches Paket:
echo flask-script >> requirements.txt
pip install -r requirements.txt
pip freeze > venv.pip
... damit spielen und dann zur früheren Version zurückkehren
vim manage.py
git commit -am "Playing with flask-script"
git checkout master
Deinstallieren Sie nun fremde Pakete:
pip freeze | grep -v -f venv.pip | xargs pip uninstall -y
Ich nehme an, der Prozess kann mit Git-Hooks automatisiert werden, aber lassen Sie uns nicht vom Thema abgehen.
Natürlich ist es dann sinnvoll, ein Paket-Caching-System oder ein lokales Repository wie pip2pi zu verwenden