Рубрики
Без рубрики

О важности упаковки

У вас есть идея и вы хотите превратить ее в немного кода, чтобы выполнить его. Что вы делаете? Вы открываете … Tagged Work Workflow, OpenSource, Python.

У вас есть идея и вы хотите превратить ее в немного кода, чтобы выполнить его. Что вы делаете? Вы открываете свой IDE/Editor, возможно, вы структурируете его внутри папки с некоторым инструментом по умолчанию для снятия и (при необходимости), и вы получаете код для работы. Это хакерское, это уродливое, но это работает.

Теперь, когда у вас есть что -то, вы хотите добавить еще одну функцию или выработать ошибку. Что вы делаете? Вы следите за тем же процессом. Если вы чувствуете себя пикантно, возможно, вы инициируете новый репозиторий GIT в основе проекта, но нет никакого реального смысла в ветвлении и слиянии обратно в Мастера. Резервное копирование кода? Может быть учетная запись на Bitbucket, или, может быть, что -то с Gitlab. У них обоих есть свободные уровни использования с частными репозиториями, и это определенно недостаточно для общественности.

Это продолжается с большими функциями, взломанными, без тестов и нулевой документации (кроме комментария здесь и там), все это оставалось на 100% частным. Может быть, вы пытаетесь заставить его работать на цифровом океанском сервере, который вы выступили как плавающее рабочее пространство с постоянным подключением к Интернету. Это было сложно, но сейчас это работает. Как бы. Ну, в любом случае, в любом случае.

Ваш портфолио кода все еще не хватает. Не так много, потому что не так много в достаточно хороших условиях, чтобы показать кому -либо. У вас есть много таких крошечных проектов, которые пронизаны тем, что, как вы знаете, являются плохими практиками, но были намного проще, чтобы выяснить правильный способ сделать это. Вы относитесь к своим вкладам с открытым исходным кодом почти как на сцену, где у вас все прекрасно продумано. Сначала вы должны написать документацию, что означает, что вы должны четко определить тот сервер Snowflake, который у вас есть для запуска вашего скрипта. Это также означает, что вы должны написать документацию по использованию. Автоматизированные тесты также с различной важности в зависимости от сообщества, окружающего язык, на котором реализован ваш проект.

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

В последнее время я обнаружил, что есть способ облегчить эти растущие боли.

В каждом (законном) языке в наши дни есть стратегия управления пакетами. Не знакомы с концепцией управления пакетами? Поговорим об этом на секунду.

У вас есть новый проект, скажем, он сейчас написан на Python. Стандартный формат пакета хорошо определен для установки с использованием пип . Он включает в себя зависимости, название пакета, имя автора и контактную информацию, ограничения версий для зависимостей … много информации, которая должна быть-должна быть-стандартизирована. В Python это последовательно определяется в setup.py у основания репозитория.

Рассмотрим следующую структуру хранилища:

├── LICENSE.md
├── README.md
├── setup.py
└── my_project
    ├── __init__.py
    ├── core
    │   ├── admin_commands.py
    │   ├── inbox.py
    │   ├── initialize.py
    │   ├── mentions.py
    │   ├── posts.py
    │   ├── user_interaction.py
    │   └── validation.py
    ├── helpers
    │   ├── misc.py
    │   └── wiki.py
    ├── main.py
    └── strings
        ├── debug.py
        ├── posts.py
        ├── responses.py
        └── urls.py

У нас есть проект по имени my_project , что должно быть названием пакета в setup.py Анкет Python имеет конвенцию Java-esque Импорт пакет.name.here На карту в Пакет/Имя/ЗДЕСЬ.PY Структура файловой системы.

У пакетов всегда есть Readme. Если вы используете генератор пакетов (например, Bundle Gem ), и он генерирует readme, Всегда Удалите сгенерированное описание по умолчанию (и другие линии TODO) и вставьте свое собственное. Не уверен, о чем ваш проект? Обратите внимание, что он в настоящее время покрывает. Вы можете обновить его позже. Это точка управления версией.

В ReadMe включайте инструкции по установке, которые реалистичны для вашей ситуации. Существуют ли нативные зависимости от ОС, которые вам нужны тоже установлены? Они могут не хорошо вписаться в setup.py или *.gemspec файлы В этом случае поместите это в ReadMe.

Часто в паттерке включает в себя много шума, который может не понадобиться для публичной публикации пакета. Вот минимальные требования для любого пакета, который я делаю, публично или частный. Я забывчивый человек, поэтому возвращение к проекту через 2 месяца потребуется все равно снова встать на скорость. Мне нравится облегчить себе этот список требований для Readme:

  • Применение
  • Процедура установки (предположим, что недавно установленная ОС)
  • Описание
  • (Если применимо) предположения о зависимостях собственной платформы

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

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

Например, Python включает в себя некоторую загрузку для настройки пакета. Для меня это включало в себя поиск предыдущих проектов ‘ setup.py файл, изменение его в соответствии с новым проектом и создание некоторых структур по умолчанию, таких как my_project/__ init__.py содержащие переменные для версии ( __version__ ) и автор ( __author__ ). Это также включает в себя настройку автоматического тестирования с помощью сценариев Unittest и Shell для облегчения проведения автоматического тестирования.

Вот моя эвристика, когда дело доходит до создания упаковки:

  • Есть любой Зависимости, которые требуют менеджера пакетов (например, PIP , npm , драгоценный камень )?
  • Нужно ли разделить исходный код на несколько файлов?
  • Я тестирую свою работу с большей гранулярностью, чем полными, сквозными тестами?
  • Нужно ли мне легко развернуть это, например, инструмент командной строки?
  • Нужно ли мне вернуть релизы и иметь стабильные, бета -версию и DEV копий исходного кода?
  • Я отслеживаю изменения кода с GIT?

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

Это означает, что я …

  • Создайте новый репозиторий GIT (и частный отдаленный, для целей резервного копирования)
  • Создайте readme (в Markdown, предпочтительно)
  • Отслеживание зависимостей, которые я устанавливаю или удаляю, когда я устанавливаю или удаляю их
  • Сформулируйте стратегию тестирования, чтобы убедиться, что все работает, как и ожидалось (автоматизировано или ручное)
  • Создайте набор удобных сценариев для выполнения повторяемых задач, оцениваемых только для текущего проекта (например, Makefile, Rakefile, Bundler Binstubs, Shell Script)

Оригинал: “https://dev.to/thelonelyghost/on-the-importance-of-packaging”