A proposta de Stephen é uma boa ideia, mas infelizmente não funciona se você incluir apenas requisitos diretos em seu arquivo, o que parece mais claro para mim.
Todas as dependências serão desinstaladas, inclusive até mesmo distribute, quebrando- pipse.
Manter um arquivo de requisitos limpo enquanto rastreia a versão de um ambiente virtual
Aqui está como tento controlar a versão do meu ambiente virtual. Tento manter um mínimo requirements.txt, incluindo apenas os requisitos diretos, e nem mesmo mencionando as restrições de versão onde não tenho certeza.
Além disso, mantenho e incluo no rastreamento de versão (digamos git) o status real do meu virtualenv em um venv.piparquivo.
Aqui está um exemplo de fluxo de trabalho:
configuração do espaço de trabalho virtualenv, com rastreamento de versão:
mkdir /tmp/pip_uninstalling
cd /tmp/pip_uninstalling
virtualenv venv
. venv/bin/activate
inicializar o sistema de rastreamento de versão:
git init
echo venv > .gitignore
pip freeze > venv.pip
git add .gitignore venv.pip
git commit -m "Python project with venv"
instale um pacote com dependências, inclua-o no arquivo de requisitos:
echo flask > requirements.txt
pip install -r requirements.txt
pip freeze > venv.pip
Agora comece a construir seu aplicativo, em seguida, comprometa-se e inicie um novo branch:
vim myapp.py
git commit -am "Simple flask application"
git checkout -b "experiments"
instale um pacote extra:
echo flask-script >> requirements.txt
pip install -r requirements.txt
pip freeze > venv.pip
... brincar com ele e depois voltar para a versão anterior
vim manage.py
git commit -am "Playing with flask-script"
git checkout master
Agora desinstale pacotes estranhos:
pip freeze | grep -v -f venv.pip | xargs pip uninstall -y
Suponho que o processo pode ser automatizado com git hooks, mas não vamos sair do tópico.
Claro, faz sentido usar algum sistema de cache de pacote ou repositório local como pip2pi