Как выглядит макет приложения Python?

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

  • Как должен выглядеть макет приложения Python?

    В настоящее время у меня есть:

    setup.py
    Имя приложения/
        __main__.py
        __init__.py
        Просмотры/
        контроллеры /
        модель /
        ресурсы /<- изображения, видео,...
  • Как выполнить приложение?

    У меня есть скрипт бегуна со следующим содержанием

    #!/usr/bin/env python -m "application_name"
    

    Нужно ли даже использовать __main__.py для этого? Нужен ли скрипт бегуна?

  • Как импортировать части приложения? (Python 2.6)

    Например в application_name/__main__.py

    from . import controllers.MainWindow
    

Как вы размещаете свои приложения?

1 ответ

Решение

Этот вопрос состоит из нескольких частей, поэтому я постараюсь ответить на них по очереди:

1: Вам решать, нет никаких жестких правил, кроме тех, которые устанавливают, что каталог должен рассматриваться как пакет, и так далее. Некоторые фреймворки предписывают структуру каталогов, используя скрипт для генерации скаффолдинга (немного как в Rails в мире Ruby), но это просто удобство или соглашение данной фреймворк. Организуйте свой код и модули так, чтобы они имели логический смысл, как на любом другом языке.

2: То, что у вас там, абсолютно нормально. В качестве альтернативы вы можете использовать установленный скрипт, если вы используете distutils, console_script как часть установки.egg или, в крайнем случае, просто вызовите скрипт main.py (или как вы его называете) напрямую. Сценарий console_script довольно распространен и используется такими инструментами, как, например, среда тестирования носа.

3: есть PEP для этой определенной темы. По моему опыту, вы действительно должны отдавать предпочтение абсолютному импорту относительно относительного. Чтобы заставить это поведение, вы можете сделать:

 from __future__ import absolute_import
Другие вопросы по тегам