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

Как я создал веб -фреймворк Python и стал сопровождающим с открытым исходным кодом

Мысли и советы по управлению проектом с открытым исходным кодом, основанным на моем опыте создания Bocadillo, асинхронной веб -структуры Python. Tagged с ShowDev, OpenSource, Python, WebDev.

Этот пост был первоначально опубликован в blog.florimond.dev .

Прошло много времени с тех пор, как я написал сообщение в блоге. Почти два месяца, на самом деле. Итак, где я был?

С одной стороны, последний год моих инженерных исследований занимал больше моего времени, чем я думал. Я не жалуюсь, хотя – я узнал кучу интересных и полезных вещей, как теоретических, так и практичных. Кроме того, я хочу воспользоваться возможностью, чтобы жить в последнем году.

Другая сторона истории – я работаю над строительством Бокадильо , Asynchronous Python Python Web Framework. Приключение, которое началось для меня, чтобы узнать о внутренних интервалах веб -структуры, до сих пор было захватывающим.

Это означает, что, поскольку день составляет всего 24 часа, мне пришлось немного отложить блог. Но теперь, когда я нахожусь в отпуске, я наконец могу потратить время, чтобы подумать о том, что происходит. 🥳

В этом сообщении я хочу надеть на бумагу свои мысли о том, как построить веб -структуру и особенно Запуск проекта с открытым исходным кодом . Я уже многому научился в процессе, от методов программирования до управления проектами и инструментов разработки, поэтому я хотел поделиться своим опытом с вами!

Что в меню?

  • Что такое Бокадильо? : Представляем Бокадилло для создания некоторого контекста.
  • История за всем этим : Я расскажу вам историю о том, как это стало моим первым проектом с открытым исходным кодом!
  • Советы, чтобы начать свой собственный проект с открытым исходным кодом : серия подсказки Я собрался из опыта.

Перво -наперво – позвольте мне познакомить вас с Бокадильо! (Это будет коротко и мило, я обещаю.)

Что такое Бокадильо?

Bocadilloproject/Bocadillo

(Uncainted) Быстрые, масштабируемые и способные веб-API-интерфейсы в режиме реального времени для всех

Бокадильо сейчас Невозможно . Это хранилище должно быть заархивировано в ближайшее время. Мы рекомендуем пользователям мигрировать в другие хорошо поддерживаемые альтернативы, такие как Starlette или FASTAPI . Пожалуйста, смотрите #334 за дополнительной информацией.

Документация: https://bocadilloproject.github.io

Бокадильо – это Python Async Web Framework Это делает строительный и очень одновременный веб -API веселыми и доступными для всех.

Требования

Python 3.6+

Установка

pip install bocadillo

Пример

from bocadillo import App, configure
app = App()
configure(app)
@app.route("/")
async def index(req, res)
    res.json = {"hello": "world"}

Сохраните это как app.py , затем начать Uvicorn сервер (горячая перезагрузка включена!):

uvicorn app:app --reload

Скажи привет!

$ curl http://localhost:8000
{"hello": "world"}

Готовы погрузиться? Посетите сайт документации Анкет

Изменение

Все изменения в Бокадилло записаны в…

Лифт

Бокадильо – это Modern Python Web Framework Это обеспечивает здравомыслящий инструментарий для строительства работоспособных веб -приложений и услуг с использованием асинхронное программирование Анкет Он совместим с Python 3.6+ и MIT-лицензированным.

Хотите начать? Прочитайте документацию !

Ключевые фигуры

Первоначальный коммит Бокадилло был 3 ноября 2018 года. По состоянию на 21 декабря, то есть через полтора месяца, вот где стоит Бокадильо:

  • 500+ Commits и 31 звезды на Bocadilloproject/Bocadillo Репо – не стесняйтесь добавлять свой!
  • 10 выпусков в Pypi – Последнее – v0.7
  • 8K+ загрузки, измеренные по Питаться
  • Около 30 страниц Документы !
  • 2 участника с открытым исходным кодом – и многие другие приветствуются! 🥳

Эти цифры, конечно, очень скромные, но я уже очень доволен ими. Конечно, если вы хотите поддержать Bocadillo, вы можете:

Кроме того, если вы уже пробовали Bocadillo, пожалуйста, свяжитесь с нами через Twitter или Друттер чат – я бы хотел услышать от вас!

Философия

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

Кроме того, Бокадилло не предназначен для минималистического (но не мастодон). Идея состоит в том, чтобы включить Тщательно выбранный набор включенных батарей , с разумными значениями по умолчанию, чтобы вы могли решить общие проблемы и быть продуктивным сразу же Анкет

Цели

Моя цель состоит в том, чтобы люди обнимали Новые возможности Async Python И этот бокадильо становится Инструмент, который помогает людям решать реальные проблемы легче и эффективно Анкет

Впереди еще много работы, чтобы добраться туда, но марафон начался!

Говоря о Асинхронизация Python, позвольте мне решить вопрос, который вы уже задали себе …

Что с асинхронным?

Как правило, экземпляр веб -приложения тратит много (если не большинство) своего времени обработки запросов в ожидании завершения ввода -вывода – API -вызовов, запросов базы данных, операций файловой системы. и т. д. Большинство из этих операций Блокировка , что обычно ограничивает производительность, если несколько клиентов запрашивают сервер.

Идея с асинхронными рамками, такими как Bocadillo, состоит в том, чтобы построить Приложения, которые не блокируют операции ввода/вывода . Чтобы достичь этого, мы используем асинхронное программирование и недавние дополнения к языку питона, например Асинсио и Асинхрон/жду – Доступно от Python 3.4+ и 3.6+ соответственно. Это позволяет нам рассмотреть вопрос о обработке запроса как задачи, которая «запланирована» для работы в ближайшем будущем, то есть, когда ЦП является доступным.

В результате, помимо лучшего использования процессора, эта архитектура имеет очень интересное преимущество – теперь мы можем обрабатывать несколько запросов одновременно Анкет

(Примечание: я не писал в параллельном , так как Async по -прежнему использует один поток. Параллелизм не параллелизм ..

Это свойство в конечном итоге приводит к Более стабильная пропускная способность и производительность Как увеличивается количество одновременных клиентов. Из моих собственных (еще не опубликованных) тестов, Bocadillo сохраняет постоянную скорость обработки, независимо от того, общается ли он с 10 или 10 000 клиентов. С другой стороны, «синхронизационные» рамки, такие как Фласка или Джанго, показывают значительное падение в запросах/с в настройках высокой параллелистики.

Хотите больше на Python Asynchronous Programming? Вот несколько разговоров, которые я рекомендую, возможно, за ним следует смотреть:

Реализация

Бокадильо построен на Uvicorn , молниеносный веб-сервер ASGI и Starlette , удобный инструментарий ASGI. Оба были созданы Том Кристи Основной вклад в рамки REST Django (среди прочего).

Примечание : Asgi является асинхронным эквивалентом WSGI, то есть спецификацией того, как веб -серверы должны общаться с асинхронно Python Web Applications.

Функции

Что у Бокадильо уже есть : Запросы, ответы, представления (на основе функций и классифицированные), маршруты и параметры маршрута, типы носителей, перенаправления, шаблоны, статические файлы, фоновые задачи, CORS, HSTS, Gzip, «Рецепты» (a.k.a. Blueprint крючки и даже CLI. В конвейере выпуска больше!

Одна вещь, которую делает Бокадильо не есть (пока), однако, это Уровень базы данных Анкет Большинство веб -приложений или API, которые я создал, необходимы для каким -то образом сохранить данные, поэтому я считаю, что это (или, по крайней мере, официальная рекомендация о том, как интегрировать асинхронный уровень базы данных, такой как tortoise orm ) должна попасть в структуру в какой-то момент.

Привет, мир!

Давайте закончим с традиционным сценарием «Привет, мир»!

# api.py
from bocadillo import API

api = API()

@api.route("/")
async def hello(req, res):
    res.text = "Hello, World!"

if __name__ == "__main__":
    api.run()

История за всем этим

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

Как и почему это началось? Каковы были некоторые из самых значимых событий? Давайте выясним это.

Учебный проект

Бокадильо начался как Способ для меня узнать больше о внутренних интернатах веб -структуры Анкет Я хотел сойти за кулисы после почти 2 лет использования различных веб -фреймворков Python и JS. Я хотел знать, как это на самом деле все работали.

Чтобы быть ясным, Бокадилло не начался с очень подробного плана. Черт возьми, я даже не думал о том, была ли необходимость в (другой) веб -структуре Python Async. Я хотел Узнайте больше, чем что-либо.

Давайте заново заносите колесо и отпустим его как можно скорее

Итак, я был, 3 ноября, внедрял функции настолько распространенными, что было похоже на Заново изобрести колесо Анкет Это были такие функции, как запросы, ответы, представления, маршруты или сервер приложений. «Сотни веб -фреймворков уже решили эти проблемы раньше», – подумал я…

Но мне было все равно. Как @funkybob любезно щедрый мне :

Изобретение колеса – это отличный способ учиться … а иногда то, что вы узнаете, – это то, насколько ваши существующие рамки делают для вас.

Твердый аргумент в пользу переосмысления колеса, который заставил меня понять, насколько Джанго является абсолютным массивным зверем.

Во всяком случае, это начальное усилие привело меня к выпуску v0.1 на PYPI 4 ноября. Всего через два дня после первоначального коммита , люди уже могли PIP установить Bocadillo и создать минимальное асинхровое веб -приложение. (Кто сказал, что упаковка Python была болью? 🐍)

Первые признаки потенциала

После того, как V0.1 был выпущен, я продолжил внедрять больше функций, таких как новые типы ответов или обработка ошибок.

6 ноября V0.2.1 вышел. Именно тогда я начал понимать, что Бокадильо был хорошим кандидатом на мой первый Полный проект с открытым исходным кодом . Идея казалась мне привлекательной, поэтому я пошел на это!

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

Потому что первоначальный дизайн и реализация Bocadillo заинтересовались из -за глубокого вдохновения от Респондент , Собственная асинхронная структура Кеннет Рейц, Я решил дать крик Анкет

Ответ Кеннета и предстоящие реакции после того, как он ретвитнул объявление, заставили меня подумать, что У Бокадильо действительно был потенциал Анкет

Всего за день репо получил 20 звезд (личный рекорд!) И, хотя это может выглядеть тривиально, я подумал, что это действительно круто.

PSST: Если вы хотите помочь узнать Bocadillo, ты могу Светь это тоже и распространите новости!

Итак, после того, как V0.2 был выпущен, я почувствовал мотивацию продолжать работать над Bocadillo и добавлять больше функций.

Пока я что -то не понял …

Где документы? Нравится настоящие документы?

Мне было ясно: я хотел, чтобы Бокадильо был моим первым Проект с открытым исходным кодом . Я хотел взять это Серьезно Чтобы узнать как можно больше из процесса.

Итак, с самого начала я написал информативный Readme , куратор A Изменение (С помощью сохранить изменение изменений ) и добавить Вклад методические рекомендации. По мере того, как все больше и больше выпусков выпускались с 6 ноября по 18 ноября, я обновил Changelog и задокументировал новые функции в Repo Readme.

Быстро, однако, это стало непрактичным. Readme росла в размерах, и это стало трудно ориентироваться, даже с содержанием.

Вот когда я понял Мне нужна правильная документация Анкет

Если вы думаете об этом, Хорошая документация – это sine qua non Условие для того, чтобы люди использовали то, что вы построили Анкет И эта длинная Readme не была хорошей документацией, учитывая размер, в который направлялся Бокадильо.

Тогда это поразило меня-много крупномасштабных инструментов, библиотеков или фреймворков с открытым исходным кодом, которые я использую и любите, есть Сайт документации Анкет

Это то, что привело меня к выпуску v0.5 18 ноября с крупным дополнением: совершенно новый сайт документов , который я построил с Vuepress и размещен на GitHub Pages Анкет

По необходимости хорошей документации – Джо Манкусо, создатель Масонит Структура, однажды поделилась со мной этим замечательным советом:

Если это не задокументировано, его не существует.

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

Затем, создавая сайт DOCS, я сделал то, что сейчас считаю очень важным шагом для любой Проект с открытым исходным кодом …

Позволить Бокадилло стоять на своих ногах

Прежде чем выпустить документы, я перенес Бокадилло из личного репо в свою собственную организацию GitHub, а именно Bocadilloproject Анкет

Основная мотивация в то время заключалась в том, что я мог использовать домен страниц организации GitHub bocadilloproject.github.io для документации. Это определенно более чище и доступнее, чем Florimondmanca.github.io/bocadillo Анкет 🙃

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

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

Дело: Важно, чтобы проект с открытым исходным кодом жил за пределами его создателей .

Теперь, вернувшись к истории – 18 ноября у меня был сайт DOCS, который люди могли посетить. Что дальше?

Открытие процесса разработки

До 20 ноября то, как я следил за отставанием и прогрессом, был через частную доску Trello.

Это было очень практично для меня: я использую Trello для множества вещей. Но я понял, что Люди, посещающие репо, не имели видимости на том, что будет дальше, или возможными способами внести свой вклад.

Фактически, с точки зрения посетителя, я думаю, что репо выглядело как любой другой личный проект – никаких проблем, никаких PRS, всего лишь тонны коммитов от одного человека – и не Направленное на сообщество усилия, то есть то, чем бы я хотел стать Бокадильо.

Итак, согласно совету моего близкого друга и вдохновленным Эта статья Дханраджа Ачарья , Я решил Откройте процесс разработки Анкет

Я преобразовал все свои карты Trello в проблемы GitHub и добавил значимые этикетки (см. SANE GITHUB Метки Дэйв Ланни) и описание им. Я думаю, что репо теперь обеспечивает лучшую видимость в проекте и чувствует себя более обнадеживающим для новичков.

Я узнал из этого, что Открытый исходный код – это не только открытие исходного кода . Вы должны быть открыты и о процессе разработки.

Теперь я надеялся, что с репо, заполненным проблемами и общественными PR, это привлечет своих первых участников с открытым исходным кодом.

Оповещение о спойлере: это произошло!

Ура! Первые участники!

Примерно в то же время, когда Бокадильо вырос в размерах, я начал чувствовать необходимость в внешних советах. Я боялся, что мог принять плохие дизайнерские решения или что код мог бы быть лучше. Короче, Мне нужны были участники Анкет

К счастью, все еще 20 ноября, я имел большое удовольствие приветствовать первый вклад в репо в форме Алина Панайту, комментирующих PR #3 Для новой функции “Hooks”.

Алин помог мне исправить несколько вещей о этой функции, которую я изначально не был уверен в себе, и предложил способы, которыми ее можно было сделать еще более полезным. Он зашел так далеко, как разбрызгивал репо и отправил мне различие, демонстрируя исправление.

Позже, 23 ноября, Алин слиял свой первый пиар. Бокадилло официально получил своего первого участника! 🎉

Как бы я ни был эмоциональным, я был тронут.

Еще больше, что Алин действительно торчал. В выпуске v0.7 Алин внес 2 новые функции (GZIP и ASGI Middleware), с кодом-точнее время, вероятно, менее чем на несколько часов. Спасибо, Алин, отличные вещи!

Вход в режим обслуживания

С конца ноября и далее темп проекта немного замедлился. С одной стороны, я немного спешил с школьными проектами и экзаменами, которые были на повестке дня, но это не объяснило все. Я испытывал что -то еще.

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

Но по мере того, как было добавлено больше функций, он начал чувствовать себя тяжелее. Релизы заняли больше времени, чтобы выйти – теперь занимая неделю вместо дней. Тестирование, рефакторирование и документация стали основными частями процесса разработки. Кроме того, теперь я также управлял присутствием в Интернете Бокадильо.

Не поймите меня неправильно – я не жалуюсь. На самом деле, мне нравится, что я должен пройти мимо первоначального возбуждения и вошел Режим обслуживания Анкет Кроме того, это определенно нормальный сдвиг для проекта, который пытается набрать импульс и обратиться к сообществу.

Теперь я наслаждаюсь тем, что работа над Бокадильо не должна брать меня ночи, как раньше. Что приводит меня к следующему пункту …

Это не спринт, это марафон

Недавно я заметил, что мое отношение к проекту изменилось.

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

Это связано с тем фактом, что Поддержание проекта с открытым исходным кодом – марафон, а не спринт Анкет

Ставьте иначе, Успех всегда должен быть побочным продуктом, а не целью Анкет

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

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

Советы, чтобы начать свой собственный проект с открытым исходным кодом

Если есть одна вещь, которую я хочу, чтобы вы отняли от прочтения этой статьи, это должно быть следующим образом:

Открытый исходный код – это отличный способ учиться. Вы должны начать свой собственный проект сегодня!

«Звучит великолепно», вы думаете, – но как мне продолжить? Есть ли у вас какие-либо советы?”

Ну, у меня есть некоторые. 😋

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

В остальном, приготовьте себя – категоризированные пулевые очки впереди!

Примечание : Если вы не уверены в том, как реализовать какой -либо из следующих элементов и/или хотите увидеть, как я использовал или настроил инструменты на практике, не стесняйтесь проверять Репо Бокадильо И просто скопируйте заинтересованные вами биты – в конце концов, это открытый исходный код!

Определение проекта

  • Решите Что Вы хотите построить.
  • Решите Почему Вы хотите построить его – хотя это не должно быть глубоким или абстрактным, обладает четким источником мотивации.
  • Подумайте о объем и Философия дизайна : Это поможет принимать обоснованные дизайнерские решения и предотвратить ползучесть.
  • Решите Кто Вы нацелены: ваши пользователи веб -разработчики, Sys Admins, менеджеры проектов …?
  • Явно определите Ожидания пользователей навыков : С чем должны быть знакомы ваши пользователи и сколько?
  • Решите Как Вы будете распространять свой проект (например, пакет PYPI).

Маркетинговые коммуникации

  • Построить идентичность : по крайней мере имя и слоган. Сделайте их короткими, запоминающимися и запоминающимися. Продемонстрируйте их повсюду (репо, Pypi Page, Docs сайт…).
  • Создать Визуальная идентичность : Это ваш логотип и графическая хартия. Лучше иметь нормальный временный логотип, чем вообще без логотипа.
  • Решите на точка входа , то есть естественное онлайн -место, где люди могут искать ваш проект. Это может быть репо Github, сайт документов или что -то еще, но он должен существовать. (Для Бокадильо, я считаю, что это сайт документов.)
  • Дайте ваш проект собственная жизнь : Рекомендуется создать отдельную организацию GitHub или аккаунт в социальных сетях.
  • Используйте социальные сети Чтобы сообщить новости, анноумы и советы, и начать собирать людей вокруг проекта (я использую Twitter для этого).
  • Предоставьте людям, чтобы люди могли видеть Куда ты направляешься в – Дорожная карта, список вопросов, «неизданный» раздел в измене и т. Д.

Сообщество

  • Реализация Лучшие практики с открытым исходным кодом : Правильный Readme , внесение руководящих принципов, кодекс поведения, шаблоны выпуска/PR и т. Д. (Используйте контрольный список GitHub!). Это сделает репо более гостеприимным для потенциальных участников и покажет, что вы заботитесь о сообществе.
  • Быть поддерживающим и добрым другим. Спасибо за их вопросы. Предоставить полезные ресурсы.
  • Это может быть хорошей идеей, чтобы создать место для неформальных дискуссий. Я недавно решил поэкспериментировать с Друттер чат.

Управление проектом

  • Используйте GitHub выпуски Чтобы перечислить ваш тодо. Таким образом, задаваясь вопросом, над чем вы должны работать дальше, просто возьмите билет и поработайте над ним!
  • Установите значимые этикетки проблемы (см. SANE GITHUB Метки )
  • Вы также можете настроить GitHub Project Чтобы показать свои проблемы и PRS в доске Канбан.

Качество кода

  • Установите CI/CD Pipeline Анкет
  • Быть неумолимым на Тесты – Помимо обеспечения того, чтобы ваше программное обеспечение работало так, как это предназначено, они помогут вам и всем поймать регрессии и быть уверенными при внесении изменений (я использую pytest в качестве структуры тестирования).
  • Мера тестовое покрытие (Я использую pytest-cov для pytest/coverge.py Integration и Codecov для отчетов о покрытии).
  • Применять это PRS пройти тесты перед слиянием.
  • Каждый PR должен содержать все 3 элемента: код, тесты и документы.
  • Используйте Форматер кода Чтобы уменьшить шум в стиле синтаксиса/кода в обзорах кода (я использую самоуверенную форму Если у вас нет других рецензентов, Сделайте PRS для себя , пусть они успокоились и вернутся позже. Проще увидеть, является ли код в беспорядке через несколько дней.

Документация

  • Напишите ясное и информированное Readme По крайней мере, с описанием проекта, установите инструкции, быстрый пример старта и ссылку на документы или где -то, где пользователи могут узнать больше.
  • Держите изменену , вы поблагодарите себя позже.
  • Построить сайт документов Если вы строите больше, чем простая библиотека (я использую Вуэпресс как статический генератор сайта).
  • Структура ваших документов : Учебные пособия, дискуссии, справки, ссылка (совет: я использую pydocmd Чтобы генерировать ссылку на API Markdown прямо из моего Python Docstrings).
  • Помните: Если это не задокументировано, его не существует Анкет
  • Добавить симпатичный Значки к вашему чтению (например, с shields.io ).

Версия и выпуск

  • Используйте Семантическое управление версией (См. semver ).
  • Автоматизировать Версия удара с такими инструментами, как Bumpversion Анкет
  • Автоматизируйте Выпустите трубопровод Анкет Я использую ТРЕВИСКИ Чтобы выпустить Tagged Commits в PYPI.
  • Настройка Специальные филиалы выпуска Анкет Например, я использую релиз/документы для развертывания документов и Выпуск/Тест Для выпуска для тестирования PYPI.

Достижение разблокировано?

Этот пост теперь подходит к концу, так что давайте завершим!

Хотя Bocadillo начинал для меня, чтобы узнать больше о внутренних интернатах веб -структуры, Он превратился в полномасштабный проект с открытым исходным кодом Анкет

Со всеми усилиями, которые уже пошли на создание структуры, документировали ее, настройку репо и управляющие релизы, Теперь я начинаю думать о себе как о содействии открытым исходным кодам – Что я думаю, очень обогащающий опыт!

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

Тем не менее, я верю, что вы должны пойти на это и Начните свой собственный проект с открытым исходным кодом Анкет Это может быть простой инструмент или библиотека или целая платформа приложения – в любом случае, вы многому научиться в процессе.

Конечно, не стесняйтесь проверить Bocadillo Repo Если вы ищете идеи о структурировании проекта с открытым исходным кодом или настройкой инструментов. Есть также множество отличных ресурсов на opensource.guide , так что проверьте этот сайт тоже!

Спасибо, что прочитали эту статью! Как всегда, отзывы очень ценится. В частности, я бы хотел услышать Ваши собственные истории о поддержании проектов с открытым исходным кодом Анкет Кроме того, если случайно эта статья вдохновила вас, обязательно бросьте комментарий! ❣ ️

Наилучшие пожелания для этого праздничного сезона всем вам. ✌

Оставайся на связи!

Если вам понравился этот пост, вы можете Найди меня в Твиттере Для обновлений, объявлений и новостей. 🐤

Оригинал: “https://dev.to/bocadillo/how-i-built-a-python-web-framework-and-became-an-open-source-maintainer-3okd”