我有一个 GAE 应用程序,其中包含三个模块和一个 lib 文件夹。当我尝试从 lib 文件夹导入第 3 方库时。 GAE 弹出导入错误。
我可以通过将 ./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 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',
...
...
]