【问题标题】:Setting up multiple modules python appengine设置多个模块 python appengine
【发布时间】:2014-01-06 02:55:24
【问题描述】:

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

我的意思是,我希望以类似时尚的应用程序构建每个模块。

为了实现我的目标,我使用包含 (https://developers.google.com/appengine/docs/python/config/appconfig#Python_app_yaml_Includes) 设置了多个 *.yaml 文件。 它似乎在做我想做的事情,直到......没有加载任何辅助模块......我可以在本地使用 python 中的“导入”加载器,但我正在寻找可以与应用程序引擎一起使用的不那么 hacky 的东西部署程序(以及在 Google 服务器上)。 基本上我的问题是我不知道如何“包含”所有 python 模块(因为它们位于不同的目录中,由不同的 yaml 管理)。我看了看文档,似乎没有解释。

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

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

感谢您的帮助!

@TimHoffman 和@EzequielMuns

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

导入操作系统 导入系统 sys.path.append("[absolute_path_to_be_sure]/used_app")

得到:

文件“[...]/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py”,第 903 行,在 load_module raise ImportError('No module named %s' % fullname) ImportError: 没有名为 DefaultHandler 的模块

似乎沙盒阻碍了(返回 this 的函数似乎是硬编码的)。 Defaulthandler 是一个 Python 类,它位于 used_app 的根模块中。我在尝试导入时遇到错误。

我的目录结构如下:

- main_app - 应用程序.yaml - 我的应用程序.py -处理程序.py - used_app - 默认处理程序.py - include.yaml(虽然我不确定它现在对我有用)

例如,Handler 继承 DefaultHandler

【问题讨论】:

  • 我认为您需要重写您的问题,非常具体地指出您在哪里指的是 python 模块以及您在哪里指的是 Google App Engine Modules。您至少可以发布您拥有的目录结构吗?

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


【解决方案1】:

首先,使用 include.yaml 并没有做任何事情。它旨在将更多处理程序和其他有限数量的配置包含到您的主 app.yaml 中。

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

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

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

这里不需要修改sys.path 来访问package.module,因为appdir 在PYTHONPATH 中。

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

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/ 下的任何其他包/模块)。

【讨论】:

  • 只是要指出,模块的代码可以存在于 appdir 之外(我的存在于同级目录中),没有任何符号链接。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    相关资源
    最近更新 更多