Как проверить целостность virtualenv - PullRequest
0 голосов
/ 10 октября 2018

Я ищу способ проверить целостность virtualenv во время выполнения.

Чуть более явно;Мы разворачиваем проект Python на производственном сервере.При развертывании создается virtualenv, и пакеты устанавливаются с использованием pip и setuptools (поскольку наш собственный пакет не распространяется).Пока все в порядке.Это приложение медицинского уровня, поэтому при каждом запуске мы должны убедиться, что virtualenv не был изменен.Проверка версий по списку pip (или pipfile.lock, если мы переключаемся на pipenv) недостаточно (насколько я понимаю).Мы также должны убедиться, что ничего не изменилось в virtualenv (например, изменения в коде в virtualenv / lib / python / site-packages).Есть ли питонский способ сделать это?

1 Ответ

0 голосов
/ 10 октября 2018

Я думаю, что это может сделать это:

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.

Не уверен, что это жизнеспособное решение для вас, но это было очень весело, так что спасибо за ваш вопрос:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...