Я академик, а не программист, и у меня есть многолетний опыт написания программ на Python для собственного использования, чтобы поддержать мои исследования. Мой последний проект, вероятно, будет полезен многим другим, а также мне, и я думаю выпустить его как библиотеку Python с открытым исходным кодом.
Однако при переходе от работающего личного проекта к библиотеке, которую другие могут безболезненно устанавливать и использовать безболезненно, существуют некоторые препятствия. Этот вопрос о первых шагах, которые я должен предпринять, чтобы начать работу над публичным выпуском.
В настоящее время у меня есть один репозиторий git, содержащий мой код, который использует библиотеку, а также саму библиотеку, и я использую git в качестве аварийной кнопки отмены на случай, если что-то сломается. Все это прекрасно работает для одного пользователя, но явно не подходит, если я хочу его выпустить. Я хочу закончить тем, что моя библиотека находится в отдельном репозитории и может быть установлена другими с pip
помощью стабильного API.
Научиться использовать setuptools и т. Д., Вероятно, не так уж и сложно, когда я захочу опубликовать его - моя проблема в том, чтобы узнать, как мне следует работать, чтобы достичь этой точки.
Итак, мой вопрос: какие первые шаги нужно предпринять, чтобы начать подготовку проекта библиотеки Python для общественного потребления? Как мне реорганизовать структуру каталогов, репозиторий git и т. Д., Чтобы начать работу над публичным выпуском библиотеки?
В целом, было бы очень полезно, если бы были ресурсы, которые, как известно, будут полезны при попытке сделать это впервые. Указатели на лучшие практики и ошибки, которых следует избегать и т. Д., Также будут очень полезны.
Некоторое уточнение: текущие ответы касаются вопроса в духе «как я могу сделать мою библиотеку Python подходящей для использования другими?» Это полезно, но отличается от вопроса, который я намеревался задать.
В настоящее время я нахожусь в начале долгого пути к выпуску моего проекта. Ядро моей реализации работает (и работает очень хорошо), но я чувствую себя ошеломленным количеством предстоящей работы, и я ищу руководство о том, как ориентироваться в этом процессе. Например:
Мой библиотечный код в настоящее время связан с моим собственным доменным кодом, который его использует. Он живет в подпапке и использует один и тот же git-репозиторий. В конце концов, его нужно будет превратить в отдельную библиотеку и поместить в собственный репозиторий, но я продолжаю откладывать это, потому что не знаю, как это сделать. (Ни о том, как установить библиотеку в «режиме разработки», чтобы я все еще мог ее редактировать, ни о том, как синхронизировать два репозитория git.)
Мои строки документации лаконичны, потому что я знаю, что в конечном итоге мне придется использовать Sphinx или какой-то другой инструмент. Но эти инструменты, кажется, не просты в освоении, поэтому это становится основным подпроектом, и я продолжаю откладывать его.
В какой-то момент мне нужно научиться использовать setuptools или какой-либо другой инструмент для его упаковки и отслеживания зависимостей, которые являются довольно сложными. Я не уверен, нужно ли мне делать это сейчас или нет, и документация - абсолютный лабиринт для нового пользователя, поэтому я продолжаю принимать решение позже.
Мне никогда не приходилось проводить систематическое тестирование, но я определенно буду участвовать в этом проекте, поэтому мне нужно (i) узнать достаточно о тестировании, чтобы знать, какая методология подходит для моего проекта; (ii) узнать, какие инструменты доступны для выбранной мной методологии; (iii) научиться использовать выбранный мной инструмент; (iv) внедрить тестовые наборы и т. д. для моего проекта. Это проект сам по себе.
Могут быть и другие вещи, которые я должен сделать. Например, Джонршарп опубликовал полезную ссылку, в которой упоминаются git-flow, tox, TravisCI, virtualenv и CookieCutter, о которых я раньше не слышал. (Сообщение написано в 2013 году, поэтому мне также нужно проделать определенную работу, чтобы выяснить, сколько еще актуально.)
Когда вы соберете все это воедино, это будет огромный объем работы, но я уверен, что смогу сделать все это, если буду продолжать это делать, и я не спешу. Моя проблема в том, чтобы знать, как разбить его на управляемые шаги, которые можно выполнять по одному.
Другими словами, я спрашиваю, какие из наиболее важных конкретных шагов я могу предпринять сейчас, чтобы в конечном итоге достичь выпускаемого продукта. Если у меня будут свободные выходные, на каких вещах я должен сосредоточиться? Что (если таковое имеется) может быть сделано в отрыве от других, чтобы я мог сделать хотя бы один шаг без необходимости делать все это? Какой самый эффективный способ изучить эти вещи, чтобы у меня все еще было время сосредоточиться на самом проекте? (Имея в виду, что все это, по сути, проект хобби, а не моя работа.) Есть ли что-то, что мне на самом деле не нужно , что экономит мне огромное количество времени и усилий?
Все ответы очень ценятся, но я бы особенно хотел получить ответы, которые сосредоточены на этих аспектах управления проектами, с конкретной ссылкой на современную разработку Python.