如何从Python Google App Engine中的模块访问供应商库?

发布于 2021-01-29 18:01:10

当我尝试访问应用程序根目录下lib目录中的库时,出现了ImportError错误。

我在文档中执行了必要的步骤,并且仅使用一个模块,但是一旦移到具有多个模块的目录结构,它便不再起作用:

<app root>
  |
  +-- appengine_config.py
  |
  +-- lib
  |
  +-- modules     
      +-- module1
      |
      +-- module2

在我的appengine_config.py中,添加以下行:
vendor.add(os.path.join(os.path.dirname(__file__), 'lib'))

对这里可能发生的事情有任何想法吗?

编辑:这个目录结构似乎对我有用:

<app root>
  |
  +-- lib
  |     
  +-- module1
  |     +-- appengine_config.py
  |     |
  |     +-- app.yaml
  |     |
  |     +-- lib <symlink to app root lib>
  +-- module2 (same as module 1)

我认为appengine_config.py是在主应用程序级别而不是模块级别定义的东西。在每个模块中复制相同的确切文件和符号链接是否正确?

关注者
0
被浏览
49
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    每个模块目录都作为一个独立的应用程序上载,并且它需要该模块目录中的所有文件(即,模块的
    目录中的任何内容都不上载/在模块中可见)。模块目录是包含模块.yaml文件的目录,因此在您的情况下,它们将是modules/module1modules/module2目录。

    因此,将lib目录和目录appengine_config.py从应用程序目录符号链接到模块目录中。另外,正如Tim所提到的,对于我的应用程序来说,有效的销售商行确实是just
    vendor.add('lib')。复制它们同样有效,但是符号链接更好,因为您只需要按照DRY精神在版本控制系统中维护一个副本。该appcfg.py脚本知道遵循符号链接并上传符号链接指向的实际文件。

    如果你并不需要 所有的 ,但只有 一些
    模块的库,你可以创建一个lib在该模块dir指明,只有符号链接的应用程序的必要子目录libDIR到相应模块的lib目录(不要上传不必要的文件)。

    可能
    还需要符号链接到其他应用程序级配置文件中的某些模块,以使开发服务器上的某些支持脚本保持满意,请参见以下答案:https
    :
    //stackoverflow.com/a/34111170/4495081。请注意,仅通过上载单模块应用程序教程中提到的模块代码,可能不会仅通过上载模块的代码来更新应用程序级别的配置,而是需要appcfg.py使用备忘单中提到的相应参数显式地请求它们。回答。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看