Прямо сейчас PayPal Python Infrastructure обеспечивает равноценную поддержку Windows, OS X, Linux и Solaris, поддерживая различные комбинации 32-разрядных и 64-разрядных версий Python 2.6, Python 2.7 и PyPy 5.

Замалчивая первобытные дни, когда Курт и я начали создавать платформу Python в PayPal, мы не знали, что будем создавать первый кроссплатформенный стек, который когда-либо видела компания. Это был декабрь 2012 года, и мы просто хотели увидеть, как каждый разработчик распаковывает новый ноутбук с локальным сервисом PayPal Python.

За этим последовал самый интенсивный инженерный спринт, который я когда-либо испытывал. Мы перенесли важные функции, ранее доступные только в общих объектах, которые мы вызывали с помощью ctypes. Несколько ключевых частей были доступны только в бинарной форме, и их нужно было разобрать. Но с Новым, 2013 годом, мы чувствовали себя как совершенно новый стек. Все специфичные для PayPal части нашего фреймворка были написаны на чистом Python и переносимы. Просто нужно было установить несколько библиотек с открытым исходным кодом, таких как gevent, greenlet, может быть, lxml. Просто pip install, верно?

"В гору"

В среде, где Python все еще является новой технологией для большинства, pip часто недоступен, не говоря уже о понимании. Эта кривая обучения может представлять собой серьезное препятствие для многих. Мы хотели, чтобы больше людей могли писать на Python и даже запускать его в как можно большем количестве мест, независимо от того, были ли они профессиональными питонистами. Поэтому, разумно встряхнув простоту Python, мы приняли политику поставки всех наших основных зависимостей, включая скомпилированные расширения, такие как gevent.

Эта модель дает несколько большие репозитории, но преимущества перевешивают несколько дополнительных секунд времени клонирования. Из всех историй локальной разработки до сих пор нет более мощного варианта, чем полностью автономный репозиторий. Клонируй и беги. Процесс настолько бесшовный, что он похож на миниатюрную демонстрацию, которая каждый раз проходит идеально. В мире многочасовых сборок C++ и Java это может быть волшебством.

"Так в чем проблема?"

Статические сборки. Каждые несколько месяцев (или каждый CVE) команде Python приходилось проводить обновление, регрессионное тестирование и сертификацию нового набора библиотек. Новые библиотеки добавлялись с осторожностью, что хорошо для аудита, но не для гибкости. Все это хорошо для узкого набора сетевых, криптографических и сериализационных библиотек, но мы никак не могли поддерживать десятки зависимостей, необходимых для машинного обучения и других продвинутых вариантов использования Python.

А потом появилась Анаконда. С дистрибутивом Anaconda Python Continuum эффективно делает то, что делала наша команда, но бесплатно, для всех, для сотни библиотек. Наконец, появился стандартный вариант, который еще больше упростил Python для наших разработчиков.

Принятие и адаптация

Как только у нас появилась возможность, мы сделали Anaconda поддерживаемой платформой для разработки. С тех пор, независимо от платформы, новички в Python получили одно из двух вступлений: установите Anaconda или посетите нашу общую Jupyter Notebook, также поддерживаемую Anaconda.

[идентификатор подписи = "" align = "alignright" ширина = "248]

Хорошая эскалация[/caption]

Сегодня Anaconda вышла за рамки сред разработки, чтобы обеспечить производство приложений машинного обучения PayPal в течение большей части года. И делает это с большим количеством оптимизаций, чем мы можем поколебать, включая выполнение всех интенсивных числовых операций на Intel's MKL. С этого момента приложения Python находятся на движущейся дорожке к совершенству производства.

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

Как и со всей упаковкой, всегда есть другой способ. Один альтернативный подход, который хорошо сработал для нас, включает в себя небольшой проект Continuum, известный как Miniconda. В этом минималистичном дистрибутиве ровно столько, чтобы Python и conda заработали. Во время сборки наши приложения упаковывают Miniconda, архивы зависимостей bzip2 conda и установщик Python с именем файла CalVer. Во время развертывания мы устанавливаем Miniconda, затем conda устанавливает зависимости. Никаких загрузок, никакой компиляции, никаких внешних зависимостей. Код лишь немного длиннее описания процесса. Conda envs более мощны, чем virtualenvs, а также имеют лучшую кросс-платформенную, кросс-dev/prod историю. Разработчики наслаждаются расширенным контролем, меньшими пакетами и применимостью как в стандартных, так и в контейнерных средах.

Пакеты в будущем

Как указано в Корпоративное программное обеспечение с Python, упаковка и развертывание — не последний шаг. Ключом к успешному развертыванию являются унифицированные, четко определенные среды с минимальными различиями между разработкой и производством. Или используйте Anaconda и назовите ее достаточно хорошей! Мы искренне благодарим участников Anaconda за их вклад в открытый исходный код и надеемся, что их доступность распространяется на все больше сред и сред выполнения.