小编典典

如何在Google App Engine中导入模块?

python

我已经基于默认模板创建了一个简单的GAE应用。我想添加一个外部模块,例如short_url。我该怎么做呢?到目前为止,我发现的指示令人迷惑,我认为GAE似乎没有使用PYTHONPATH的明显原因。


阅读 180

收藏
2020-12-20

共1个答案

小编典典

只需将short_url.py文件放在应用程序的目录中即可。

示例App Engine项目:

myapp /
    app.yaml
    index.yaml
    main.py
    short_url.py
    views.py

views.py(或任何地方),您可以像这样导入:

import short_url

对于更复杂的项目,也许更好的方法是创建一个目录,尤其是针对依赖项。说lib

myapp /
    lib /
        __init__.py
        short_url.py
    app.yaml
    index.yaml
    main.py
    views.py



from lib import short_url

编辑#2:
道歉,我应该早些提到。感谢Nick Johnson的以下修复,您需要修改路径。
在启动您的应用程序之前,请确保此代码已运行;像这样的东西:

import os
import sys

def fix_path():
    # credit:  Nick Johnson of Google
    sys.path.append(os.path.join(os.path.dirname(__file__), 'lib'))

def main():
    url_map = [ ('/', views.IndexHandler),] # etc.
    app = webapp.WSGIApplication(url_map, debug=False)
    wsgiref.handlers.CGIHandler().run(app)

if __name__ == "__main__":
    fix_path()
    main()

Edit3:
要使此代码在所有其他导入之前运行,您可以将路径管理代码放入其自己的文件中,该文件位于应用程序的基本目录中(Python无需更改任何路径即可识别该目录中的所有内容)。
然后您只需确保此导入

import fix_path

…在main.py文件中的所有其他导入之前列出。如果我的解释不清楚
这是完整示例链接

2020-12-20