Aqui está um pequeno item que tenho usado muito recentemente em nossos servidores. Eu o uso principalmente para compactar backups de banco de dados antes de enviá-los para um bucket S3.
# We use this later for looping over and sending archived names.
archives = []
def compress(source):
target = "%s.%s" % (source, 'tgz')
with tarfile.open(target, "w:gz") as tgz:
tgz.add(source, arcname=target)
archives.appent(target)
tgz.close()
Simples e direto ao ponto, assim como o código deve ser.