【发布时间】:2015-02-02 04:27:01
【问题描述】:
我有一个 GAE 应用程序,其中包含三个模块和一个 lib 文件夹。当我尝试从 lib 文件夹中导入第 3 方库时。 GAE 弹出 ImportError。
我可以通过将 ./lib 符号链接到 ./Module_1/lib 和 ./Module_2/lib 并在每个模块中创建 appengine_config.py 来使其工作。但是这样做似乎很肮脏。
有没有更简洁的方法从 module_1 和 module_2 导入 app_root/lib?
这似乎很有希望(https://cloud.google.com/appengine/docs/python/config/appconfig#Python_app_yaml_Includes),但不知道在 include.yaml 中放什么。
-- App Root/
-- Module_1/
module_1.yaml
module_1.py
-- Module_2/
module_2.yaml
module_2.py
-- lib/
-- cloudstorage/
..
-- 3rd_library_1/
..
..
-- 3rd_library_2/
..
..
appengine_config.py
main.py (default module)
app.yaml(default module)
queue.yaml
dispatch.yaml
在module_1.py或module_2.py中,当我这样做时
import cloudstorage as gcs
它抱怨
ImportError: No module named cloudstorage
但是,当它在 main.py 中导入时,它可以正常工作。
在 appengine_config.py 中:
import os
import sys
# Add ./lib to sys path
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'lib'))
还尝试从 main.py 打印 sys.path:
sys.path in main.py :
[
'/base/data/home/apps/s~my-app/2.381942946570489905',
'/base/data/home/apps/s~my-app/2.381942946570489905/lib',
...
...
]
module_1.py 中的sys.path:
[
'/base/data/home/apps/s~my-app/module_1:2.381942955973772449',
'/base/data/home/runtimes/python27/python27_dist/lib/python27.zip',
...
...
]
【问题讨论】:
-
只有包含 *.yaml 文件的文件夹才会被上传到 GAE,所以你的
lib文件夹应该在你的模块里面。做一个符号链接。
标签: python google-app-engine python-2.7