
Serge
22.11.2016
17:30:56
и интеграционное тестирование

Andrey
22.11.2016
17:31:37
это только пока у тебя одна деплойная сущность. если у тебя в один контейнер ставятся два разных пакета, то у них могут быть разные requirements, которые могут конфликтовать

Serge
22.11.2016
17:31:39
вспомним про requirements.in. это и правда прямая альтернатива setup.py на мой взгляд

Google

Serge
22.11.2016
17:32:04
интеграция после установки двух пакетов
значит у тебя есть репа для этого Dockerfile и там есть requirements.txt

Andrey
22.11.2016
17:32:41
почему? ты собрал утиль месяц назад, там получился один requirements.txt. собрал пакет с демоном сегодня, и там другие версии

Serge
22.11.2016
17:32:56
мы согласились, что пакеты устанавливаемые по зависимостям должны иметь setup.py
также мы согласислись, что надо закреплять версии при конечной интеграции
я утверждаю, что автоматически закреплять версии всего в setup.py неудобно, для этого лучше подходит requirements.txt
при этом такое решение никак не зависит от наличия у тебя какой-либо специальной инфраструктуры и воспроизводимо хоть на локальной машине, хоть в докере, хоть прямо в проде
вспомним про requirements.in. это и правда прямая альтернатива setup.py на мой взгляд
пакеты устанавливаемые по зависимостям должны иметь setup.py

Andrey
22.11.2016
17:34:43
сколько у тебя будет requirements.txt, если ты устанавливаешь на одну машину десять твоих пакетов?

Serge
22.11.2016
17:34:53
а в venv или в докер

Google

Serge
22.11.2016
17:35:16
один venv - одна сборка - один процесс

Andrey
22.11.2016
17:35:59
я правильно понимаю, что у девяти из этих десяти пакетов дожен быть setup.py?

Serge
22.11.2016
17:36:09
или у всех 10 тогда уж
зависит от того в какой репе у тебя интеграция происходит: в отдельной или в некой репе приложения

Andrey
22.11.2016
17:36:59
репы вообще не важны. это просто хранилища кода

Serge
22.11.2016
17:37:15

Andrey
22.11.2016
17:37:20
нет

Serge
22.11.2016
17:37:27
можно в папочки пихать, но это не верно
потому что каждая репа имеет схему версионирования и ветки по версиям и т.п.
и каждая точка интеграции должна отдельно версионироваться

Andrey
22.11.2016
17:40:06
ты в курсе, что для версионирования не только git tag существует? можно версионироваться без привязки к vcs

Serge
22.11.2016
17:40:28

Andrey
22.11.2016
17:40:40
это пока у тебя нет десятков пакетов

Serge
22.11.2016
17:40:52
дебианщики вон специально инфраструктуру сборки пакетов из гитовых реп завели
каждая репа - src пакет
странно не пользовать Version Control System, когда она есть
а дальше у тебя вся инфра умеет git и его ветки/теги и делать пайплайны по ним

Andrey
22.11.2016
17:42:50
http://highscalability.com/blog/2016/10/12/lessons-learned-from-scaling-uber-to-2000-engineers-1000-ser.html

Google

Serge
22.11.2016
17:44:55
давайте лучше посмотрим вот сюда
https://plus.google.com/u/0/110308154931599002929/posts/4WLcSaQZHiW?sfc=true
какая же красота:)

Chikiro
22.11.2016
18:07:00
Можно в setup.py парсить requirements.txt. И все будут довольны :)

Zart
22.11.2016
18:11:01

Serge
22.11.2016
18:12:09

Zart
22.11.2016
18:15:25
"requirements.txt - это костыль со времен, когда не было setuptools, а был коробочный distutil, который как раз не умеет в зависимости. В прочем, он так до сих пор в них и не научился. Setuptools эту проблему порешали и requirements с ним не нужен, кроме разве что специфичных ситуаций."
какой-то бред полный в плане истории

Andrey
22.11.2016
18:15:41

Serge
22.11.2016
18:16:30

Andrey
22.11.2016
18:17:10
какой абстракции? отзумимся подальше, у нас крутая компания на миллиард?

Serge
22.11.2016
18:18:04

Andrey
22.11.2016
18:18:12
а кстати, как ты деплоишься, когда у тебя есть два микросервиса, и ты хочешь поменять протокол общения между ними?

Serge
22.11.2016
18:18:31

Andrey
22.11.2016
18:18:42
с даунтаймом?

Serge
22.11.2016
18:19:19
У меня есть красивые rolling updates 7 шаговые миграции базки и поддержка совместимости разных версий протокола разными способами
Как раз вчера закончили тестирование полного Zero Downtime Deployment

Andrey
22.11.2016
18:20:03
а совместимость со старыми версиями, которых больше нет потом отпиливаешь?

Serge
22.11.2016
18:20:28
Чаще всего да, есть просто previous version support, который вываливается, когда появляется next
Хуже, когда больше двух-трех версий приложения в поддержке/разработке одновременно

Google

Serge
22.11.2016
18:23:00
Всё всегда по обстоятельствам и необходимости же. Универсального способа нет.
Overengineering - это зло, которое надо пресекать в зародыше

Chikiro
22.11.2016
18:27:13
celery из файлов читает в setup https://github.com/celery/celery/blob/master/setup.py

Zart
22.11.2016
18:30:25
видно что автор не умеет в сетаптулз
еще и в маркеры не умеет, судя по jython.txt
open(
os.path.join(os.getcwd(), 'requirements', *f)
зачем там os.getcwd? зачем там вообще самопальный и кривой парсер req.txt файлов?
sys.exit(_pytest.main(self.pytest_args)) - а такое я вообще люто ненавижу, потому что это ломает пайплайн напрочь

Chikiro
22.11.2016
18:34:52
Где взять нормальный пример setup.py. В sentry, например, тесты вынесены в extras_require https://github.com/getsentry/sentry/blob/master/setup.py Нормальная это практика или нет?

Zart
22.11.2016
18:37:18
увы, насколько я помню, tests_require запилили достаточно поздно и приличное количество пакетов начало использовать экстры для задания зависимостей для тестов, но при этом единого стандарта нет - test, tests, testing
"нормальный пример", гм. львиная доля zope использовала единый подход с довольно хорошим паттерном

Serge
22.11.2016
19:17:47

Admin
ERROR: S client not available

Serge
22.11.2016
19:18:05

Zart
22.11.2016
19:18:45
дока к сетаптулзам давным-давно на изи пике была, а теперь и на всяких ридзедоксах

Serge
22.11.2016
19:19:30
Там по коду легче в 1000 раз понять что для чего и как работает

Zart
22.11.2016
19:20:36

Serge
22.11.2016
19:21:04
Ну и они выпили генератор setup.py. А генератор req есть:)

Zart
22.11.2016
19:21:11
я читал её. и читал исходники и дистутилсов и сетаптулзов и пкг_ресурсов. вот нифига, докой там как раз проще

Serge
22.11.2016
19:21:33

Google

Zart
22.11.2016
19:21:56
что плон?

Serge
22.11.2016
19:22:21
Мимо pypi несет куски, плагины

Zart
22.11.2016
19:22:23
у плон свои зеркала индексов вроде
я её слишком недолго колупал, чтобы точнее сказать

Serge
22.11.2016
19:23:18
Вот эти, которые на PiterPy были

Zart
22.11.2016
19:23:48
генератор сетапа... ммм. тот же пастер содержал готовые шаблоны
минимальный сетап в целом состоит на 90% из метадаты которую девелопер вручную заполнять должен - название, версия, автор, описание, кейворды, классификатор
оставшееся - packages=find_packages(), да еще чуток инфы сверху

Serge
22.11.2016
19:31:56
Ну, вот в distribute было генератор на readline
По вопросам. Это вообще нормальная практика

Eugene
23.11.2016
09:59:56
Документация setuptools на самом деле говно
Собственно distutils тоже

Zart
23.11.2016
10:01:15
доку по дистутилс в стандартной доке уже почти выпилили 8\
поставили заглушку, которая ссылается на убогий пакаджинг гайд

Eugene
23.11.2016
10:02:07
Вообще смотреть на всю эту боль с distutils, distutils2, distribute, setuptools, distribute + setuptools, wheels.... они когда-нибцдь родят?

Zart
23.11.2016
10:02:45
д2 был мертворождённым. дистрибут уже анфоркнули
колёса - новые яйца, только сделанные через задницу

Eugene
23.11.2016
10:04:37

Roman
23.11.2016
10:05:37
О, прикольно, что можно в сишном расширении плодить треды и скидывать cpu bound туда

Zart
23.11.2016
10:05:40
а где хорошо?
нодовый нпм то еще говно
цпан?

Eugene
23.11.2016
10:07:14
В java? :)) вообще нигде не хорошо. Все эти devops не от хорошей жизни появляются