使用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
。
答案 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