[python] распространение пакетов
От: pykd_team  
Дата: 11.11.14 07:06
Оценка:
Доброго дня!

Есть небольшой проектик — extension для ванильного питона. Начал делать пакет для дистрибьюции — столкнулся с кучей проблем, интернет читал, всех ответов не нашел. Понимаю, что тема узкая, но вдруг кто-то сталкивался.

Итак:
проблема усугублена тем, что extension только для windows и соответственно распространять в исходниках пакет бессмысленно, так как на стандартной windows машине их не собрать. Соответственно, приходится делать бинарный дистрибутив ( тут отдельная песня ). Изрядно помучавшись, у меня получилось сделать egg, который нормально устанавливается с локального каталога ( через easy_install ). Теперь я хочу опубликовать его на pypi. Но pypi у меня отказывается брать egg. В документации они пишут, что pypi поддерживает wheel ( это еще интересная песенка о том, чем отличаются egg и wheel и зачем два разных одинаковых формата пакетов ). Ок, научился собирать wheel и он нормально загурзился на pypi и ставится через pip. Поэтому, первый вопрос:
1) На pypi вообще нельзя загузить egg? Но ведь easy_install благополучно с ним работает? Или он только source дистрибутивы умеет скачивать? И форма загрузки файлов через web на pypi тоже имеет тип файла egg, но загружать их также отказывается. Т.е egg вообзе нельзя загружаит или просто яйцо у меня неправильно получилось, например, какого нибудь параметра не хватает ( на pypi расширенной диагностики я не нашел ) ?
2) В целом Б-г с wheel сами, жить бы было можно, но у меня с ними никак не получается исправить один баг:
Мое расширение представляет собой один модуль ( pyd ) и в питоновских скриптах я его хочу использовать просто как import mymodule. При использовании egg все норм: в каталоге site-packages создаетсся подкаталог с распакованным содержимым egg ( я ставлю zip_safe=False), а в корне катлога в файле easy_install.pst прописывается к нему путь. В итоге питон находит модуль. При установке wheel ( собранного через тот же setup.py ) файлы распаковываются прямо в корень site-packages. Вроде все работает — но меня это бесит )), не хочется засирать общее пространство. В итоге получается дилемма: с одной стороны я научился вроде делать нормально устанавливаемые яйца, но не могу их выложить на pypi, с другой стороны wheel работают не так как мне хочется (((.

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

Да, проект с открытым кодом и абсолютно некоммерческий, так что если есть желающие поломать себе руки на голом энтузиазме, велкам!!!
http://pykd.codeplex.com
Re: [python] распространение пакетов
От: pykd_team  
Дата: 14.11.14 06:54
Оценка:
в итоге, я конечно сделал нечто распространяющееся через pypi, но удовольствия что-то ен получил от этого процесса.
Куча всяких старнностей пожидает желающих собрать свой пакет для python а.
Могу дать совет на будущее: если собираетесь делать что-то на питоне для распространения, начинайте со сборочной системы. setuptools очень негибкая хрень, лучше сразу делать проект под ее требования, будет меньше боли потом.
http://pykd.codeplex.com
Re[2]: [python] распространение пакетов
От: Андрей Ушаков Финляндия  
Дата: 16.11.14 13:47
Оценка:
Здравствуйте, pykd_team, Вы писали:

_>в итоге, я конечно сделал нечто распространяющееся через pypi, но удовольствия что-то ен получил от этого процесса.

_>Куча всяких старнностей пожидает желающих собрать свой пакет для python а.
_>Могу дать совет на будущее: если собираетесь делать что-то на питоне для распространения, начинайте со сборочной системы. setuptools очень негибкая хрень, лучше сразу делать проект под ее требования, будет меньше боли потом.

Я лично все подобные пакеты беру с http://www.lfd.uci.edu/~gohlke/pythonlibs/ в виде windows-инсталляторов... Предложи свой автору?

Вдогонку — модули и должны лежать в корне site-packages. И wheel, говорят, лучше, чем egg...
Отредактировано 16.11.2014 13:54 Андрей Ушаков . Предыдущая версия . Еще …
Отредактировано 16.11.2014 13:54 Андрей Ушаков . Предыдущая версия .
Отредактировано 16.11.2014 13:52 Андрей Ушаков . Предыдущая версия .
Re[3]: [python] распространение пакетов
От: pykd_team  
Дата: 17.11.14 09:07
Оценка:
АУ>Я лично все подобные пакеты беру с http://www.lfd.uci.edu/~gohlke/pythonlibs/ в виде windows-инсталляторов... Предложи свой автору?

А смысл? Возня с пакетами была не ради того, чтобы как нибудь выложить, а ради того чтобы выложить именно в pypi, чтобы можно было во-первых сказать "пакет распространяется стандартным способом, жми pip install имя_пакета", а во вторых, чтобы пакет можно было прописывать в зависимости к другим пакетам. Собственно использование альтернативных способов размещения пакетом не решает данные вопросы.

За ссылку отдельно спасибо: никогда не знаешь что в нашем деле пригодится .

АУ>Вдогонку — модули и должны лежать в корне site-packages.

Вот это мне не нравится, у меня модуль тянет за собой несколько dll — не красиво будет все склыдавать прямо в корень. Придет второй такой же поросенок и получится уже свинарник . Я в итоге установил все как пологается, в отдельный каталог в site-packages, а чтобы все работало в __init__.py прописал процедуру импортирования.

АУ>И wheel, говорят, лучше, чем egg...


Я конечно все это читал . Но если посмотреть на внутренности, то wheel — это такой же zip файл как и egg, с очень похожей структурой каталогов. Так что говорить о каком то улучшении довольно странно. Тут такая история с egg умеет работать easy_install, но он старый и не умеет делать таких простых вещей как корректное удалени пакетов. Но зато есть новый pip он умеет все что нужно, но имеет некую прихоть — он хочет работать именно с wheel ами, а не с egg ами. В результате, получается что wheel лучше, потому что его поддерживает более лучший пакетный менеджер. Т.е. телега впереди лошади. ОТдельные вопросы вызывает факт отсутствия пакетных менеджеров в поставках питона. Это чем то напоминает ситуацию, когда нужно установить драйвер сетевой карты, скачав его с интернета .
http://pykd.codeplex.com
Re: [python] распространение пакетов
От: pykd_team  
Дата: 12.12.14 07:19
Оценка:
Еще вопрос в догонку:
Как распространять дополнительные материалы ( примеры, документацию и.т.п) с пакетом?

Есть пакет, ставится в site_packages, вроде все более-менее работает. И есть несколько ( десятков ) маленьких скриптов — примеров, демонстрирующих работу с пакетом. Вопрос: куда их сложить. На первый взгляд, я вижу варианты:
1) сложить в подкаталог прямо в пакете. Но тогда не очень удобно пользоваться, чтобы запустить пример придется писать полный путь:
python путь_к_питону/lib/site_packages/my_packet/samples/sample1.py
в принципе сойдет, но может есть лучшее решение?
2) сложить в каталог Scripts
вот этого совсем не хочется. Scripts — это и так помойка, напихать туда еще толпу малонужных скриптов кажется сомнительной затеей.
3) куда да нибудь вне питона. Тут главное не понятно, как это сделать при установке через pip/easy_install.
http://pykd.codeplex.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.