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

Из руководства MySQL:

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

Короткая версия: безопасно использовать.

668
задан suci 13 March 2017 в 14:39
поделиться

4 ответа

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

  • /scripts или /bin для такого материала интерфейса командной строки
  • /tests для Ваших тестов
  • /lib для Ваших библиотек языка C
  • /doc для большей части документации
  • /apidoc для Epydoc-сгенерированных документов API.

И каталог верхнего уровня может содержать README's, Конфигурацию и этажерка.

трудный выбор состоит в том, использовать ли /src дерево. Python не имеет различия между /src, /lib, и /bin как Java, или C имеет.

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

  • /foo
  • /bar
  • /baz

я рекомендую подвергнуть все это "name-of-my-product" каталогу. Так, если Вы пишете приложение, названное quux, каталог, который содержит весь этот материал, называют /quux.

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

В моем случае, так как я использую Редактирование Комодо, мой IDE cuft является единственным.KPF файлом. Я на самом деле поместил это в высокоуровневый /quux каталог и опускаю добавлять его к SVN.

344
ответ дан S.Lott 13 March 2017 в 14:39
поделиться

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

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

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

14
ответ дан Jason Baker 13 March 2017 в 14:39
поделиться

Данные не-Python лучше всего связываются в Ваших модулях Python с помощью эти package_data поддержка в setuptools. Одна вещь, которую я настоятельно рекомендую, использует пакеты пространства имен для создания совместно использованных пространств имен, которые несколько проектов могут использовать - во многом как соглашение Java помещения пакетов в com.yourcompany.yourproject (и способность иметь общее com.yourcompany.utils пространство имен).

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

Вопреки некоторым другим ответам здесь, я +1 при наличии src верхний уровень каталога (с doc и test каталоги рядом). Определенные соглашения для деревьев каталогов документации будут варьироваться в зависимости от того, что Вы используете; у Сфинкса , например, есть свои собственные соглашения, которые поддерживает его инструмент быстрого запуска.

, усильте setuptools и pkg_resources; это делает намного легче для других проектов полагаться на определенные версии Вашего кода (и для нескольких версий, которые будут одновременно установлены с различными нефайлами кода, если Вы используете package_data).

7
ответ дан Charles Duffy 13 March 2017 в 14:39
поделиться

Это сообщение в блоге Жана-Поля Кальдерона обычно дается как ответ в #python на Freenode.

Структура файловой системы проекта Python

Сделайте:

  • укажите имя каталога, имеющего отношение к вашему проекту. Например, если ваш проект называется «Twisted», назовите каталог верхнего уровня для его исходных файлов Twisted . Когда вы делаете выпуски, вы должны включать суффикс номера версии: Twisted-2.5 .
  • создайте каталог Twisted / bin и поместите туда свои исполняемые файлы, если они у вас есть. Не давайте им расширение .py , даже если это исходные файлы Python. Не помещайте в них никакого кода, кроме импорта и вызова основной функции, определенной где-то еще в ваших проектах. (Небольшая складка: поскольку в Windows интерпретатор выбирается по расширению файла, вашим пользователям Windows действительно нужно расширение .py. Итак, когда вы упаковываете для Windows, вы можете добавить его. К сожалению, нет простого трюка с distutils, который Я знаю, как автоматизировать этот процесс. Учитывая, что в POSIX расширение .py - это всего лишь бородавка, тогда как в Windows его отсутствие является реальной ошибкой, если ваша база пользователей включает пользователей Windows, вы можете выбрать просто .py расширение везде.)
  • Если ваш проект можно выразить как один исходный файл Python, поместите его в каталог и назовите как-нибудь, связанное с вашим проектом. Например, Twisted / twisted.py . Если вам нужно несколько исходных файлов, вместо этого создайте пакет ( Twisted / twisted / с пустым Twisted / twisted / __ init __. Py ) и поместите в него свои исходные файлы. Например, Twisted / twisted / internet.py .
  • поместите свои модульные тесты в подпакет вашего пакета (примечание - это означает, что указанный выше вариант с одним исходным файлом Python был уловкой - вам всегда нужен хотя бы один другой файл для ваших модульных тестов ). Например, Twisted / twisted / test / . Конечно, сделайте это пакетом с Twisted / twisted / test / __ init __. Py . Поместите тесты в файлы типа Twisted / twisted / test / test_internet.py .
  • добавьте Twisted / README и Twisted / setup.py для объяснения и установки вашего программного обеспечения, соответственно, если вы чувствуете себя хорошо.

Нельзя:

  • помещать исходный код в каталог с именем src или lib . Это затрудняет работу без установки.
  • поместите ваши тесты вне вашего пакета Python. Это затрудняет выполнение тестов для установленной версии.
  • создайте пакет, который только имеет __ init __. Py , а затем поместите весь свой код в __ init __. Py . Просто сделайте модуль вместо пакета, так проще.
  • пытаются придумать волшебные хаки, чтобы Python мог импортировать ваш модуль или пакет, не заставляя пользователя добавлять каталог, содержащий его, в свой путь импорта (либо через PYTHONPATH, либо через какой-либо другой механизм). Вы не правильно обработаете все случаи, и пользователи будут злиться на вас, если ваше программное обеспечение не работает в их среде.
215
ответ дан 22 November 2019 в 21:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: