设置多个模块python appengine

时间:2014-01-06 02:55:25

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

使用python 2.7和Google app引擎我正在构建一个由多个模块组成的网站。

我的意思是,我希望像时尚一样在app中构建每个模块。

为了实现我的目标,我使用includes(https://developers.google.com/appengine/docs/python/config/appconfig#Python_app_yaml_Includes)设置了多个* .yaml文件。 它似乎做了我想要的,直到...没有任何辅助模块被加载...我可以在本地python中使用'import'加载器,但我正在寻找一些不那么hacky可以与app引擎一起使用的东西部署者(和谷歌服务器上)。 基本上我的问题是我不知道如何'包含'所有python模块(因为它们生活在由不同的yaml统治的单独目录中)。我查看了文档,似乎没有解释。

我不打算将它们作为分离的模块运行,这可能是一种处理它的方式。 我可以打开它,但我遇到了类似的情况:如何在每个模块中包含/打包公共代码?

由于我没有任何工作,我没有包含示例代码或yaml。

感谢您的帮助!

@TimHoffman& @EzequielMuns

谢谢,我实施了建议的更改:

import os
import sys
sys.path.append("[absolute_path_to_be_sure]/used_app")

得到了:

  File "[...]/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py", line 903, in load_module
    raise ImportError('No module named %s' % fullname)
ImportError: No module named DefaultHandler

似乎沙盒阻碍了(返回此功能的函数似乎是硬编码的)。 Defaulthandler是一个python类,它位于used_app根的模块中。我试图导入它时出错了。

我的目录结构如下:

 - main_app
   - app.yaml
   - MyApp.py
   - Handler.py
 - used_app
   - DefaultHandler.py
   - include.yaml (though I am not sure it is useful to me right now)

例如,Handler继承DefaultHandler

2 个答案:

答案 0 :(得分:1)

首先,使用include.yaml没有做任何事情。这意味着在主app.yaml中包含更多处理程序和其他有限数量的配置。

根据我的经验,您的所有代码都需要在主应用目录下,但如果必须,您可以使用符号链接(这对于第三方库特别有用)。那么为什么不尝试在主应用程序目录中包含used_app

作为参考,我在成功之前设置了这两个布局:

appdir/
    app.yaml
    main.py
    lib/
    package/
        __init__.py
        module.py

此处无需修改sys.path即可访问package.module,因为appdir位于PYTHONPATH中。

有时我必须将第三方库包含在lib子目录中,然后需要通过sys.path将其添加到appengine_config.py

appdir/
    app.yaml
    main.py
    appengine_config.py
    lib/
        awesomelibrary/
            __init__.py
            thirdpartymodule.py
    package/
        __init__.py
        module.py

使用appengine_config.py

import sys, os
base = os.path.dirname(__file__)
sys.path.append(os.path.join(base, 'lib'))

从而使awesomelibrary.thirdpartymodule可导入(以及lib/下的任何其他包/模块)。

答案 1 :(得分:0)

在appengine_config中设置路径,然后根据需要在每个处理程序中导入。在导入任何代码之前加载appengine_confgi.py

https://developers.google.com/appengine/docs/python/tools/appengineconfig