为GAE项目定义公共文件

时间:2016-07-17 13:52:15

标签: python google-app-engine google-app-engine-python

我在Google应用引擎帐户中有两个不同的项目。我的计算机中的文件夹结构如下:

  • parent_folder
    • common_folder
    • project1_folder
    • project2_folder

我在common_folder中有很少的python类,我想在两个项目中使用它们(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

1 个答案:

答案 0 :(得分:0)

您看到错误的原因是在部署期间,模块/服务目录(或单个模块应用程序的应用程序目录)上方没有任何内容上传到GAE。

您可以将app dirs中的必要文​​件符号链接,请参阅https://stackoverflow.com/a/34291789/4495081。部署实用程序知道遵循符号链接并在部署中包含公用文件夹包。

我建议将common文件夹作为一个包(添加__init__.py文件),然后在每个应用程序中添加vendor it in,而不是复制/安装代码,只需符号链接{{1}中的公共代码dir dir。

然后你不需要手动调整路径,在你的应用程序中你只需要使用这样的类(假设例如lib来自MyClass):

common_folder/class.py