Я не академік, а не програміст, і маю багаторічний досвід написання програм Python для власного використання, щоб підтримати моє дослідження. Мій останній проект, ймовірно, буде корисний багатьом іншим, як і мені, і я думаю випустити його як бібліотеку Python з відкритим кодом.
Однак, мабуть, є певні перешкоди для переходу від функціонуючого особистого проекту до бібліотеки, який можна безболісно встановити та використати іншими. Це питання стосується перших кроків, які я повинен зробити, щоб почати працювати над публічним випуском.
Наразі у мене є єдине сховище git, яке містить мій код, який використовує бібліотеку, а також саму бібліотеку, і я використовую git як кнопку екстреного скасування у випадку, якщо щось порушиться. Все це добре працює для одного користувача, але, очевидно, не підходить, якщо я хочу його випустити. Я хочу закінчити те, що моя бібліотека знаходиться в окремому сховищі та може бути встановлена іншими користувачами pip
та має стабільний API.
Навчитися використовувати setuptools і т. Д., Мабуть, не так складно, як тільки я хочу, щоб опублікувати його - моя проблема полягає в тому, щоб знати, як я повинен працювати, щоб дійти до цієї точки.
Отже, моє запитання: які перші кроки потрібно зробити, щоб розпочати підготовку проекту бібліотеки Python для громадського споживання? Як слід реорганізувати структуру свого каталогу, сховища git тощо, щоб почати працювати над публічним випуском бібліотеки?
Загалом, було б дуже корисно, якщо є ресурси, які, як відомо, є корисними при спробі цього вперше. Вказівки на кращі практики та помилки, яких слід уникати тощо, також були б дуже корисними.
Деякі роз’яснення: поточні відповіді стосуються питання у відповідь на тему «як я можу зробити свою бібліотеку Python гарною для використання іншими?». Це корисно, але воно відрізняється від питання, яке я мав намір задати.
Зараз я на початку тривалої дороги до виходу свого проекту. Ядро моєї реалізації працює (і працює дуже добре), але я відчуваю себе перевантаженим обсягом роботи, що переді мною, і я шукаю вказівки щодо того, як орієнтуватися в процесі. Наприклад:
Наразі мій бібліотечний код поєднаний з моїм власним кодом, що його використовує. Він живе в підпапках і ділиться тим самим сховищем git. Врешті-решт, його потрібно буде перетворити на окрему бібліотеку та помістити у власне сховище, але я продовжую зволікати з цим, бо не знаю, як це зробити. (Ні про те, як встановити бібліотеку в «режимі розробки», щоб я все-таки могла її редагувати, ні про те, як тримати репост git у синхронізації.)
Мої доктрини стислі, тому що я знаю, що з часом мені доведеться використовувати Сфінкс або якийсь інший інструмент. Але ці інструменти здаються не простими для вивчення, тому це стає головним підпроектом, і я продовжую його відкладати.
У якийсь момент мені потрібно навчитися використовувати setuptools або якийсь інший інструмент, щоб упакувати його і відстежувати залежності, які є досить складними. Я не впевнений, потрібно мені це робити зараз чи ні, а документація - це абсолютний лабіринт для нового користувача, тому я продовжую вирішувати це робити пізніше.
Мені ніколи не доводилося робити систематичне тестування, але я безумовно буду для цього проекту, тому я повинен (i) вивчити достатньо тестування, щоб знати, яка методологія підходить для мого проекту; (ii) дізнатися, які інструменти доступні для моєї обраної методології; (iii) навчитися користуватися обраним інструментом; (iv) впроваджувати тестові набори тощо для мого проекту. Це сам по собі проект.
Можливо, є й інші речі, які я повинен також зробити. Наприклад, jonrsharpe розмістив корисну посилання, в якій згадується git-flow, токсин, TravisCI, virtualenv та CookieCutter, про жодне з яких я не чув раніше. (Допис від 2013 року, тому мені також доведеться виконати певну роботу, щоб дізнатися, скільки ще існує.)
Коли ви все це з’єднаєте, це величезна робота, але я впевнений, що зможу це зробити, якщо продовжую підключатися до цього, і не поспішаю. Моя проблема полягає в тому, щоб знати, як розбити її на керовані кроки, які можна зробити по черзі.
In other words, I'm asking which are the most important concrete steps I can take now, in order to reach a releasable product eventually. If I have a free weekend, which of these things should I focus on? Which (if any) can be done in isolation from the others, so that I can at least get one step done without needing to do the whole thing? What's the most efficient way to learn these things so that I will still have time to focus on the project itself? (Bearing in mind that all of this is essentially a hobby project, not my job.) Is there any of it that I don't actually need to do, thus saving myself a huge amount of time and effort?
Усі відповіді високо оцінені, але я особливо вітаю відповіді, які зосереджуються на цих аспектах управління проектами, конкретно посилаючись на сучасну розробку Python.