Я думаю, что это может сделать это:
import hashlib, os
basedir = os.path.abspath(os.path.dirname(__file__))
hasher = hashlib.md5()
directory = "/".join((basedir,"venv"))
bs=4096
def flatten(d):
for path, dirs, filenames in os.walk(d):
for filename in filenames:
yield os.path.join(path, filename)
if os.path.exists(directory):
dircontent = list(flatten(directory))
for item in dircontent:
with open(item, "rb") as _f:
buf = _f.read(bs)
while len(buf) > 0:
hasher.update(buf)
buf = _f.read(bs)
else:
exit(1)
print(hasher.hexdigest())
Функция flatten
довольно проста, она просто проходит по venv и создает один огромный список со всеми путями файлов сверху вниз в дереве файлов., начиная с любого пути, который вы указываете как d
-параметр.Я взял это из здесь
Затем я открываю файл в режиме ro, b и считываю небольшие куски в буфер (чтобы не забивать системную память в случае неожиданных больших файлов) иобновите md5-hashobject содержимым буферов.Это делается для каждого файла в venv.
Не уверен, что это жизнеспособное решение для вас, но это было очень весело, так что спасибо за ваш вопрос:)