Растущая тенденция, которую я заметил в Data Science, - это рост MLOps. MLOps включает в себя набор новых передовых методов внедрения экспериментальной модели машинного обучения в производственную веб-систему.

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



Мотивация

Читатели моих статей, особенно тех, которые читают Момент, когда я осознал, что сертификаты Data Science не продвинут мою карьеру вперед, знают, что я предпочитаю практический подход, когда дело доходит до развития новых навыков. Поэтому я взял на себя задачу разработать забавный проект Tic-Tac-Toe, чтобы познакомиться с объектно-ориентированным программированием (ООП) с Python, затем я упаковал проект и загрузил его в PyPI - Да, это означает, что вы можете буквально пропустить установить мой проект.



Шаг 1 - Добавление структуры

В отличие от экспериментов, к которым мы, специалисты по анализу данных, привыкли в нашем Jupyter Notebook, проекты разработки программного обеспечения очень хорошо структурированы с самого начала, поскольку уже есть четкая конечная цель того, что они пытаются выполнить - то, что может быть известно только после многих экспериментов в Data Science.

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

board_game/
├── LICENSE
├── pyproject.toml
├── README.md
├── setup.cfg
├── setup.py  # optional, needed to make editable pip installs work
├── tic_tac_toe/
│   └── __init__.py/
│   └── board.py
└── tests/

Разбивка файлов и папок

В ячейке кода выше подробно описана структура проекта, но вот что означает каждый файл:

  • LICENSE: это сообщает пользователям, которые устанавливают ваш пакет, условия, на которых они могут использовать ваш пакет. Для получения помощи в выборе лицензии см. Https://choosealicense.com/.
  • pyproject.toml: файл, который информирует инструменты сборки, такие как pip и build, об используемых системах и о том, что необходимо для сборки. Если этого файла нет в ваших проектах, будет использоваться классическая система сборки setuptools, но всегда полезно указать явную формулировку.
  • README.md: README.md сообщает другим, как ориентироваться в вашем проекте. Прочтите Как выделить свои проекты в области науки о данных.
  • setup.cfg: setup.cfg - это статические метаданные, которые информируют инструменты установки о пакете, который вы создаете (т. Е. О названии пакета, версии и т. Д.), И о том, какие файлы кода следует включить.
  • setup.py: setup.py - это динамические метаданные, которые служат сценарием сборки для инструментов настройки. По правде говоря, поскольку я использовал setup.cfg, мне не нужно было включать setup.py - документация более подробно объясняет, почему это так.
  • tic_tac_toe/: это каталог, в котором мы храним наш исходный код. board_game/tic_tac_toe/__init__.py требуется для импорта каталога как пакета и должен быть пустым.
  • tests/: этот каталог является заполнителем для тестовых файлов. В настоящее время я не писал никаких тестов, но планирую написать их в будущем - сторонники разработки через тестирование (TDD) уничтожат меня за это, и я думаю, что инженеры-программисты в целом тоже. Тестирование жизненно важно, поскольку оно обнаруживает дефекты / ошибки до доставки клиенту, что гарантирует качество программного обеспечения (вы бы не попали в поездку, которая не была бы проверена, не так ли?).

Шаг 2 - Создание приложения

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

Чтобы избежать логического аспекта проекта, я взял код из Игра в крестики-нолики - Python Tkinter GUI Tutorial, но вместо того, чтобы брать код как есть, я преобразовал скрипт в объект Python.

Что такое класс?

class определяет шаблон для создания объектов в Python - чтобы упростить концепцию объекта, рассмотреть вещи в реальном мире, такие как человек, автомобиль и т. Д. Все объекты имеют характеристики, которые упоминаются как атрибут, Например, я человек (объект), но у меня есть характеристики (атрибуты), которые отличают меня от других людей (например, я ростом 5 футов 9 дюймов, у меня черные волосы, я фрилансер и т. д.) .

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

Фактически это то, что составляет объект в Python. Чтобы создать объект в Python, мы должны вызвать class. Вот код, который я использовал для создания объекта Tic Tac Toe.

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

Шаг 3 - Создание архивов распространения

Чтобы разрешить другим доступ к нашему пакету, когда они делают pip install, мы должны сгенерировать пакеты распространения для нашего пакета. Я использую операционную систему Windows, поэтому я буду использовать ее для создания пакета. Пользователи операционных систем Unix / macOS должны проконсультироваться с Документацией PyPA.

Первая часть процесса - убедиться, что у нас установлена ​​самая последняя версия build PyPA. В терминале убедитесь, что вы находитесь в виртуальной среде проектов, и введите:

py -m install --upgrade build

Затем перейдите в каталог, содержащий pyproject.toml, и введите:

py -m build

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

Шаг 4 - Загрузка пакета в тест PyPI

Как только это будет сделано, мы теперь можем загрузить наш пакет в индекс пакетов Python (PyPI).

Чтобы загрузить пакет, вы должны быть зарегистрированы в индексе PyPI - это самый простой шаг, который вам когда-либо придется выполнить - используйте следующие ссылки для регистрации в PyPI и TestPyPI соответственно.

Примечание. Тест PyPI - это отдельный экземпляр PyPI. Он предназначен для тестирования и экспериментов.

После регистрации мы можем загрузить пакет twine, который поможет нам загрузить пакеты распространения.

# installing twine
py -m pip install --upgrade twine
# uploading the archives under the dist directory
py -m twine upload --repository testpypi dist/*

Выполнение приведенных выше команд из вашего терминала предложит вам ввести имя пользователя и пароль, которые вы использовали для регистрации в TestPyPI. Когда вы это сделаете, ваш пакет должен быть доступен для просмотра на TestPyPI. Вот мой ...



настольная игра-kurtispykes
Крестики-нолики, крестики-нолики, крестики-нолики /« X'y O'sies
- это бумажка и ... игра в карандаш для двух игроков, X и O, которые… test.pypi.org »



Шаг 5 - Установка пакета

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

pip install -i https://test.pypi.org/simple/ board-game-kurtispykes==0.0.1

Затем перейдите в новый терминал, введите py и протестируйте пакет, выполнив следующие команды:

В результате должно открыться новое окно с игрой «Крестики-нолики».

Последние мысли

Я загрузил пакет в PyPI, так что вы можете просто установить пакет и протестировать его, запустив pip install board_game_kurtispykes. Хотя мне известно, что этот пакет соответствует стандартам Scikit-Learn или NumPy, я очень доволен опытом, полученным при выполнении этой процедуры, и с нетерпением жду возможности пересмотреть этот пакет позже, чтобы улучшения моего кода, дополнительное тестирование и, возможно, больше функциональности (включая больше игр) - я очень открыт для критики, потому что я знаю, что навыки разработки программного обеспечения не являются моей сильной стороной.

Спасибо за чтение!

Если вам понравилась эта статья, свяжитесь со мной, подписавшись на мою БЕСПЛАТНУЮ еженедельную рассылку. Никогда не пропустите мой пост об искусственном интеллекте, науке о данных и фрилансе.

Статьи по Теме