#python #google-app-engine #google-cloud-platform #packaging
#python #google-app-engine #google-облачная платформа #упаковка
Вопрос:
Я понимаю, что это может быть очень простой вопрос, но я разрабатываю приложение Python на Google App Engine Standard, используя некоторые из базовых руководств.
Многие из этих руководств написаны на языке MVC, и это здорово, но файлы кода не организованы. Для иллюстрации рассмотрим эту демонстрацию: https://github.com/GoogleCloudPlatform/appengine-search-python-java/tree/master/product_search_python . Автор включает admin_handlers.py
, base_handler.py
и handlers.py
файл в корневом каталоге. Еще какие-нибудь обработчики, и это быстро стало бы неудобным.
Решение, с которым я знаком, заключается в рефакторинге до более стандартной структуры проекта, такой как:
my_app
models
__init__.py
models_1.py
models_2.py
handlers
__init__.py
handlers_1.py
handlers_2.py
setup.py
Чтобы, например, из любого файла в моем приложении я мог вызвать from my_app.models import model_1
, а затем получить доступ к моделям, специально определенным в этом подпакете.
Однако я не вижу никакой документации о том, как App Engine standard обрабатывает упаковку приложения при развертывании (т. Е. запускается setup.py install
при развертывании вашего приложения.)
Есть сообщения SO о том, как app-engine работает setup.py install
для упаковки внешних пакетов Python, но нет материалов о том, как app-engine запускает ваши собственные, и я не вижу никаких примеров в их руководствах, которые включают setup.py
файлы.
Является ли упаковка приложения во время развертывания чем-то,что поддерживает App-Engine? Или это просто настолько просто, что они не документировали? Должен ли я использовать фреймворк, подобный Django, если я хочу это сделать, или без этого можно обойтись?
Комментарии:
1. Вы пытаетесь запустить «систему» на своем компьютере или развернуть ее в app engine? Если вы пытаетесь запустить на своем собственном компьютере, установка app engine должна предоставить вам программу запуска app engine, с помощью которой вы можете запускать и просматривать свое приложение.
2. Вопрос неясен, вы хотите иметь pip-пакет setuptools, который вы можете установить в своей среде app engine?
3. Да, @Ian это именно то, чего я хочу. Я бы хотел, чтобы развернутое приложение имело структуру пакета, чтобы я мог вызывать
from my_project.models import models_1
в любой части проекта. Я отредактирую, чтобы уточнить.4. Если я правильно понимаю вашу цель, вы хотите что-то, что изначально поддерживается python, и Google app engine этого не нарушает. Вам просто нужно иметь
__init__.py
файл для каждого каталога, который должен быть модулем. Нет необходимости вsetup.py
.
Ответ №1:
setup.py
Файл предназначен для библиотек, то, что вы пытаетесь развернуть, является приложением.
Если вы хотите превратить все ваши обработчики / модели в отдельную библиотеку (потенциально для повторного использования в других приложениях), вам нужно предоставить ей setup.py
файл и разместить его в другом месте, либо в вашем собственном индексе пакета, либо в виде репозитория git, и App Engine установит его на этапе сборки.
В противном случае вы можете просто включить эти файлы как часть своего приложения, без setup.py
необходимости:
.
├── main.py
├── my_library
│ ├── __init__.py
│ ├── handlers
│ │ ├── __init__.py
│ │ ├── handlers_1.py
│ │ └── handlers_2.py
│ └── models
│ ├── __init__.py
│ ├── models_1.py
│ └── models_2.py
└── requirements.txt
И использует их в main.py
подобных:
from my_library.models import model_1
Комментарии:
1. Разве вам также не нужен
__init__.py
файл вmy_library/
каталоге?