Какова лучшая структура проекта для Python-приложения? [закрыто]
Проблема: Структурирование папок проекта для настольного приложения на Python
Здравствуйте! Я развиваю не тривиальное настольное приложение для конечных пользователей на Python и столкнулся с вопросом о том, как лучше всего организовать иерархию папок в проекте.
Я хотел бы, чтобы структура проекта обеспечивала следующие характеристики:
- Простота в обслуживании
- Удобство для работы с IDE
- Подходящая для использования систем контроля версий, таких как git, с возможностью ветвления и слияния
- Легкость в создании пакетов для установки
В частности, интересуют следующие аспекты:
- Где размещать исходный код?
- Где располагать сценарии запуска приложения?
- Как можно разобраться с "хламом" проекта, связанным с IDE?
- Где хранить модульные и приемочные тесты?
- Как организовать размещение конфигурационных файлов и других данных, не относящихся к Python?
- Где лучше всего хранить исходный код на C++ для модулей расширения pyd/so?
Буду благодарен за советы и примеры структурирования проекта на Python, которые отвечают указанным требованиям!
3 ответ(ов)
Нет ничего критичного в этом вопросе. Что бы ни делало вас счастливыми, то и будет работать. В 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.
Проект "Python Packaging Authority" имеет образец проекта, который вы можете найти по следующему адресу:
https://github.com/pypa/sampleproject
Этот проект служит в качестве примера и помогает в обучении по руководству пользователя по упаковке Python, в разделе, посвященном упаковке и распространению проектов. Если вы хотите узнать, как правильно упаковывать и распространять свои Python-приложения, этот пример будет очень полезен.
В моем опыте это просто вопрос итераций. Поместите ваши данные и код туда, где считаете нужным. Скорее всего, вы ошибетесь. Но как только вы лучше поймете, как все будет выглядеть в конечном итоге, вы окажетесь в гораздо лучшем положении для того, чтобы делать такие предположения.
Что касается источников расширений, у нас есть директория Code в trunk, которая содержит директорию для Python и директорию для различных других языков. Лично мне больше подходит идея поместить код расширений в отдельный репозиторий в следующий раз.
Тем не менее, я возвращаюсь к своему исходному утверждению: не стоит делать из этого слишком большую проблему. Поместите код туда, где это будет удобно для вас. Если вам что-то не подходит, это можно (и нужно) изменить.
Функциональность mkdir -p в Python
Почему используется string.join(list), а не list.join(string)?
Создание словаря с помощью генератора словарей
Как получить полный путь к директории текущего файла?
Найти все файлы с расширением .txt в директории на Python