Пакеты Python и директории egg-info - PullRequest
74 голосов
/ 02 ноября 2008

Может кто-нибудь объяснить, как директории 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 в каталог сайтов-пакетов? Я бы сам попробовал это сделать, но я не уверен, как проверить, виден ли пакет для setuptools. Бонусные баллы, если вы также можете сказать мне, как проверить это:)

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

1 Ответ

68 голосов
/ 02 ноября 2008

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

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

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

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