Пакеты Python и каталоги egg-info


может кто-нибудь объяснить, как каталоги egg-info привязаны к их соответствующим модулям? Например, у меня есть следующее:

/usr/local/lib/python2.5/site-packages/quodlibet/
/usr/local/lib/python2.5/site-packages/quodlibet-2.0.egg-info/

Я предполагаю, что каталог egg-info должен сделать соответствующий модуль видимым для setuptools (easy_install), верно? Если да, то как setuptools связывает каталог egg-info с каталогом модуля?

предполагая, что я на правильном пути, и ради примера... Если бы я хотел сделать существующий пакет моим видимым setuptools, могу ли я просто символически связать каталог модуля и каталог egg-info с каталогом site-packages? Я бы просто попробовал это сам, но я не уверен, как проверить, виден ли пакет для setuptools. Бонусные очки, если вы также можете сказать мне, как это проверить:)

основная причина, по которой я пытаюсь понять все это, заключается в том, что я хотел бы символически связать некоторые из моих модулей с сайтами-пакетами, чтобы я мог вносить в них изменения и видеть изменения в скриптах которые используют их без необходимости переустановки яйца из PyPI после каждого изменения.

1 71

1 ответ:

The .каталоги egg-info создаются только в том случае, если для установки egg использовалась --single-version-external-managed. "Обычно", установка яйца создаст один каталог (или zip-файл), содержащий как код, так и метаданные.

pkg_resources (который является библиотекой, которая читает метаданные) имеет функцию require который может быть использован для запроса конкретной версии пакета. Для "старого стиля", регулярного импорта, easy_install hacks a .pth-файл для получения каталога яиц на Сыс.путь. Для --single-version-external-managed этот взлом не нужен, потому что будет установлена только одна версия (с помощью инфраструктуры pacakging системы, например, rpm или dpkg). Яйцо-информация по-прежнему включена, для приложений, которые используют require (или любой другой механизм привязки pkg_resources).

Если вы хотите установить пакет с помощью жесткого связывания, я рекомендую использовать "setup.py развиваются". Это команда из setuptools, которая на самом деле не устанавливается яйцо, но делает его доступным по всему сайту. Для этого он создает файл egg-link, чтобы pkg_resources мог его найти, и он манипулирует a .PTH файл, так что обычный импорт может найти его.