2013-09-28 2 views
0

Я использую Fabric для автоматизации моих процедур развертывания для моих проектов.Virtualenv - Автоматизация развертывания требований к проектам

Один из них касается виртуальной репликации.

Автоматическая установка новых пакетов довольно прямо вперед с

local $ pip freeze > requirements.txt 
remote $ pip install -r requirements.txt 

Теперь, если я не нужен пакет больше, я просто

local $ pip uninstall unused_package 

Но pip install не будет удалять пакеты больше не представлены в требованиях,
Как я могу автоматизировать удаление пакетов из virtualenv, отсутствующих в требованиях?

Я хотел бы иметь такую ​​команду:

remote $ pip flush -r requirements.txt 

ответ

0

В результате я оставил задания для установки и удаления.

Установка:

pip install -r requirements.txt 

Uninstall:

pip freeze | grep -v -f requirements.txt - | xargs pip uninstall -y 
1

Почему не просто дифф с комплектами? Это может потребовать использования get операции, хотя, если вы работаете на удаленном компьютере

На пульте

from fabric.api import get, run 

run("pip freeze > existing_pkgs.txt") 
get("/path/to/existing_pkgs.txt") 

Так что теперь existing_pkgs на локальном компьютере. Если у вас есть новый файл требования ...

with open("requirements.txt", "r") as req_file: 
    req_pkgs = set(req_file.readlines()) 

with open("existing_pkgs.txt", "r") as existing_pkgs: 
    existing = set(existing_pkgs.readlines()) 

Делают операцию, которая дает вам различия в наборах

uninstall_these = existing.difference_update(req_pkgs) 

затем удалите pkgs с удаленного хоста

for pkg in uninstall_these: 
    run("pip uninstall {}".format(pkg)) 
+0

Похоже, хорошая идея, я дам ему попробовать –

1

другой подход может быть - и я знаю, что это не отвечает на ваш вопрос отлично - чтобы использовать силу виртуального пользователя, которую вы уже имеете:

Удобно иметь известные стабильные среды пакетов и приложений, например, идентифицированные тегами управления версиями, чтобы иметь возможность откатываться к известной рабочей комбинации (однако это не замена для тестирования или промежуточной среды).

Таким образом, вы можете просто настроить новую виртуальную среду («workon your-tag»), заполнить ее снова «pip install -r» и оставить старый позади (в течение некоторого времени, например, до тех пор, пока новый релиз вашего тега считается стабильным) и, наконец, удалите старый virtual-env (s).

В вашем fabfile сделать что-то вроде

with cd(stage_dir): 
    run("./verify_virtual_env.sh %s" % your-tag) 

и обновления сценария «verify_virtual_env.sh» через пип для данной среды.

+0

хороший ответ .... – Greg

Смежные вопросы