Распространение пакетов Python, которые зависят от собственных общих библиотек - PullRequest
1 голос
/ 10 декабря 2010

У меня есть несколько пакетов Python, которые я хотел бы привести в порядок и опубликовать в PyPI.Эти пакеты импортируют пару модулей Python, которые я написал, чтобы увеличить или упростить определенные операции (например, чтение / запись из CSV-файлов с заголовками с помощью функций csv), предоставление удобных структур данных и т. Д.В настоящее время эти модули находятся в каталоге верхнего уровня, который содержит код для моих проектов, и я полагаюсь на то, что смогу их найти, добавив этот каталог в мою переменную среды PYTHONPATH.(Я знаю меньше, чем аккуратно.)

Создав отдельный пакет для этих модулей и загрузив их в PyPI, я мог бы пометить такой пакет как зависимость для пакетов, которые я на самом деле хочураспростронять.Эти удобные модули, однако, невелики и имеют ограниченное использование и интерес, так что я не думаю, что они требуют распространения в виде отдельного пакета на PyPI.С другой стороны, я не решаюсь скопировать эти удобные модули (т. Е. Использовать cp convenience_module.py projectX/.) в каждый каталог проекта, поскольку это создает несколько копий одного и того же файла как в хранилище VCS, в котором находится мой код Python, так и в другом исходном выпуске.tarballs я бы опубликовал в PyPI.Есть ли элегантное решение этой проблемы?

Ответы [ 2 ]

2 голосов
/ 10 декабря 2010

Вы не говорите, почему не решаетесь «предоставить копии». В целом, я думаю, что разумный подход - подумать о том, как вы настроили для себя использование удобных модулей. Вы устанавливали их в пакетах сайта (или эквивалентных) или просто зависели от того, находятся ли они в каталоге, из которого запускался код? Однако вы используете модули, это идеальная ситуация, или есть способ, который был бы лучше для вас?

Начните с этого и выясните, как автоматизировать его с помощью setup.py, который позволяет вам размещать вещи в системе в любом месте (хотя я настоятельно не рекомендую злоупотреблять этой возможностью).

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

Если вы намерены использовать эти модули только для одного модуля, включите их в пакет, возможно, в пакет 'utils' внутри дистрибутива. В противном случае вы просто загромождаете индекс вещами, которые люди могут счесть полезными, но на самом деле объединены чем-то другим, что приводит к изменениям и их обслуживанию.

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

2 голосов
/ 10 декабря 2010

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

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

...