Чтобы быть более точным в отношении точки @ aynber в комментариях: Пользовательские функции , содержащиеся в блоках, не будут существовать, пока они не будут достигнуты выполнением программы. Поскольку ваш function
существует в блоке, а код, который ссылается на него, - до - функция была объявлена, вы получите ошибки, относящиеся к undefined function
.
Решение состоит в том, чтобы перефакторировать вашу программу, чтобы переместить объявление функции выше в пределах вашего блока, или переместить объявление функции наружу на корневой уровень вашей программы, чтобы оно было немедленно доступно при запуске вашей программы. [115 ]
Я избегал бы хеширования. Версия libxslt того, чтобы быть используемым могла бы содержать некоторый тип патча, который не производит Ваше использование его.
Как альтернатива, я хотел бы предложить, чтобы Вы не проверяли во время выполнения (не знайте, является ли это трудным требованием или не). Поскольку Python наполняет, я пишу, что это имеет внешние зависимости (сторонние библиотеки), я пишу скрипт, который пользователи могут запустить для проверки их установки Python, чтобы видеть, установлены ли соответствующие версии модулей.
Для модулей, которые не имеют определенного атрибута 'версии', можно осмотреть интерфейсы, которые он содержит (классы и методы), и посмотрите, соответствуют ли они интерфейсу, они ожидают. Затем в фактическом коде, что Вы продолжаете работать, предположите, что сторонние модули имеют интерфейс, который Вы ожидаете.
Некоторые идеи: