9

Какова лучшая структура проекта для Python-приложения? [закрыто]

14

Проблема: Структурирование папок проекта для настольного приложения на Python

Здравствуйте! Я развиваю не тривиальное настольное приложение для конечных пользователей на Python и столкнулся с вопросом о том, как лучше всего организовать иерархию папок в проекте.

Я хотел бы, чтобы структура проекта обеспечивала следующие характеристики:

  • Простота в обслуживании
  • Удобство для работы с IDE
  • Подходящая для использования систем контроля версий, таких как git, с возможностью ветвления и слияния
  • Легкость в создании пакетов для установки

В частности, интересуют следующие аспекты:

  1. Где размещать исходный код?
  2. Где располагать сценарии запуска приложения?
  3. Как можно разобраться с "хламом" проекта, связанным с IDE?
  4. Где хранить модульные и приемочные тесты?
  5. Как организовать размещение конфигурационных файлов и других данных, не относящихся к Python?
  6. Где лучше всего хранить исходный код на C++ для модулей расширения pyd/so?

Буду благодарен за советы и примеры структурирования проекта на Python, которые отвечают указанным требованиям!

3 ответ(ов)

5

Нет ничего критичного в этом вопросе. Что бы ни делало вас счастливыми, то и будет работать. В Python-проектах не так много строгих правил, потому что они могут быть довольно простыми.

Вот несколько рекомендаций по структуре директорий:

  • /scripts или /bin для командной строки
  • /tests для тестов
  • /lib для библиотек на C
  • /doc для основной документации
  • /apidoc для сгенерированной документации API (например, с помощью Epydoc)

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

Сложный выбор — использовать ли директорию /src. В Python нет такого четкого разделения на /src, /lib и /bin, как это есть в Java или C.

Так как директория верхнего уровня /src может показаться некоторым бессмысленной, ваш верхний уровень может отражать архитектуру вашего приложения:

  • /foo
  • /bar
  • /baz

Рекомендую поместить все это под директорию с именем вашего продукта. Например, если вы пишете приложение под названием quux, директория для всего этого будет называться /quux.

В PYTHONPATH другого проекта можно будет включить /path/to/quux/foo, чтобы повторно использовать модуль QUUX.foo.

В моем случае, так как я использую Komodo Edit, мой проект IDE хранится в одном .KPF файле. Я помещаю его в верхнем уровне директории /quux и не добавляю в SVN.

0

Проект "Python Packaging Authority" имеет образец проекта, который вы можете найти по следующему адресу:

https://github.com/pypa/sampleproject

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

0

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

Что касается источников расширений, у нас есть директория Code в trunk, которая содержит директорию для Python и директорию для различных других языков. Лично мне больше подходит идея поместить код расширений в отдельный репозиторий в следующий раз.

Тем не менее, я возвращаюсь к своему исходному утверждению: не стоит делать из этого слишком большую проблему. Поместите код туда, где это будет удобно для вас. Если вам что-то не подходит, это можно (и нужно) изменить.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь