#!/usr/bin/env python # Este script altera os arquivos requirements/*requirements.txt # atualizando as versões fixadas neles para coincidirem com as do venv. # # Rode esse script após atualizar as dependências do venv usando, p. ex.: # pip-review # # Após usá-lo confira sempre o resultado com `git diff` e teste as mudanças import glob import re import subprocess freeze_output = ( subprocess.Popen("pip freeze", shell=True, stdout=subprocess.PIPE) .stdout.read() .decode("ascii") ) freeze = freeze_output.strip().split("\n") freeze = { name.lower(): version for name, version in [re.split("==+", s) for s in freeze] } req_files = glob.glob("requirements/*requirements.txt") requirements = [(f, open(f).read().strip().split("\n")) for f in req_files] def novas_linhas(linhas): for linha in linhas: split = re.split("==", linha) if len(split) == 1: yield split[0] else: nome, versao = split nome = nome.lower() yield "%s==%s" % (nome, freeze[nome]) for arq, linhas in requirements: with open(arq, "w") as f: f.writelines(l + "\n" for l in novas_linhas(linhas))