Форум сайта python.su
Вот на этой страничке https://bugs.launchpad.net/grok/+bug/713683/comments/1, в конце, написано, что z3c.autoinclude выполняет рекурсивный поиск зависимостей (т.е. находит зависимости зависимостей и т.д.). Но у меня на практике почему то этого не происходит. Посмотрев код z3c.autoinclude я не обнаружил там какой либо рекурсии. Если нет рекурсивного поиска, то пользы от этого пакета становится в два раза меньше, т.к. придётся либо отказаться от него и подключать все нужные zcml ручками, либо прописывать в зависимостях основного приложения абсолютно все зависимости.
Может я ошибаюсь насчёт отсутствия рекурсивного поиска и он всё таки есть в z3c.autoinclude, но почему тогда у меня он не работает?
Офлайн
Нашёл в сырной лавке пакет tl.eggdeps, который умеет рекурсивно находить все зависимости.
Попробую препарировать его и сделать свой форк z3c.autoinclude.
Офлайн
z3c.autoinclude сильно увеличивает время старта. Cykooz, ты случаем не видел в нем, почему так и можно ли это исправить? По этой причине я в свое время отказался от его использования…
Офлайн
astoonВидел. Там самая медленная функция - это поиск по текстовому названию модуля его дистрибутива (egg).
ты случаем не видел в нем, почему так и можно ли это исправить
Отредактировано (Апрель 4, 2011 09:29:28)
Офлайн
Есть ещё одна идея для замены z3c.autoinclude - рецепт для билдаута, который создаёт zcml с инклудами зависимостей. Но это это я пока оставлю как идею. Надо проект делать, некогда плодить похожие сущности.
Офлайн
Поизучал tl.eggdeps - надо сказать он находит все зависимости практически мгновенно. При такой скорости возможно даже не понадобится кеширование для z3c.autoinclude.
Офлайн
Закопавшись в проблему по уши я понял, что в данный момент не знаю как ускорить работу модуля z3c.autoinclude без использования кеширования. Т.к. основные тормоза заключаются в поиске правильного дистрибутива (с учётом наличия namespace-ов) для объекта типа module.
Функция поиска вызывается один раз для того, что бы получить дистрибутив модуля указанного в zcml директиве includeDependencies. Но и этого одного раза вполне достаточно, что бы замедлить запуск приложения.
Офлайн
В общем я запилил рекурсивный поиск зависимостей и добавил атрибут ignore для указания списка пакетов, конфиги которых не надо подключать. Пример использования:
<includeDependencies
package="."
recursive="True"
ignore="zope.app.zcmlfiles ice.control"
/>
Офлайн
Круто. В англоязычной рассылке скинуть бы тоже надо инфу.
Офлайн
Судя по TODO, автор пакета и сам хотел сделать рекурсивный поиск, но как я понял в виде какой то отдельной директивы.
Попробую запостить сообщение в zope-dev, надеюсь там поймут мой недоанглийский.
Офлайн