2016-07-17 2 views
0

У меня есть два разных проекта в учетной записи Google. Структура папок в моем компьютере выглядит следующим образом:Определить общие файлы для проектов GAE

  • parent_folder
    • common_folder
    • project1_folder
    • project2_folder

У меня есть несколько классов питона в common_folder, что я хочу для использования в обоих проектах (project1 и project2).

Я хочу импортировать общие классы в мои проекты, поэтому Google App Engine распознает их также по производству окр (возможно GAE может создать копию общих файлов при загрузке?)

Я попытался с помощью следующего код для того, чтобы импортировать мой класс из конкретного пути родительского каталога:

import os 
PARENT_DIR = os.path.dirname(os.path.dirname(__file__)) 
print PARENT_DIR 
def load_src(name, fpath): 
    import os, imp 
    return imp.load_source(name, os.path.join(os.path.dirname(__file__), fpath)) 

load_src("globals", PARENT_DIR +"/common/globals.py") 
from globals import * 

Этот код работал только с моей LOCALHOST окружающей среды, но когда я загрузил его на GAE, он не признает класс:

> File 
> "/base/data/home/apps/s~loan-management-system/1.394267205500555512/main.py", 
> line 39, in load_src 
>  return imp.load_source(name, os.path.join(os.path.dirname(__file__), fpath)) IOError: [Errno 2] No 
> such file or directory 

ответ

0

Причиной ошибки, которую вы видите, является то, что ничто из директории module/service (или приложения для приложений с одним модулем) не загружается в GAE во время развертывания.

Вы можете символически связать необходимые файлы внутри своих приложений, см. https://stackoverflow.com/a/34291789/4495081. Утилита развертывания знает, как следовать символической ссылке, и включает общий пакет папок в развертывании.

Я хотел бы предложить что делает общую папку пакета (добавить __init__.py файл), то vendor it in внутри каждого приложения, но вместо копирования/установки кода просто симлинки общий код реж внутри lib реж.

Тогда вам не нужно возиться с пути вручную, в приложении вы бы просто использовать классы, как это (предполагая, например, что MyClass происходит от common_folder/class.py):

from common_folder.class import MyClass 
+0

Он работает. Благодарю. Я создал папку под названием «models» и внутри нее пустой файл __init__.py и все распространенные файлы python. Чем я создал символическую ссылку в своих проектах в этой папке. –

Смежные вопросы