Подтвердить что ты не робот

Пакеты Python и каталоги с информацией о яйцах

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

/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 привязывает каталог информации о яйце к директории модуля?

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

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

4b9b3361

Ответ 1

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

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

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