Запуск Google App-Engine setup.py установка для собственного приложения на Python

#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/ каталоге?