如何从Python Google App Engine中的模块访问供应商库?
当我尝试访问应用程序根目录下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是在主应用程序级别而不是模块级别定义的东西。在每个模块中复制相同的确切文件和符号链接是否正确?
-
每个模块目录都作为一个独立的应用程序上载,并且它需要该模块目录中的所有文件(即,模块的 父
目录中的任何内容都不上载/在模块中可见)。模块目录是包含模块.yaml
文件的目录,因此在您的情况下,它们将是modules/module1
和modules/module2
目录。因此,将
lib
目录和目录appengine_config.py
从应用程序目录符号链接到模块目录中。另外,正如Tim所提到的,对于我的应用程序来说,有效的销售商行确实是just
vendor.add('lib')
。复制它们同样有效,但是符号链接更好,因为您只需要按照DRY精神在版本控制系统中维护一个副本。该appcfg.py
脚本知道遵循符号链接并上传符号链接指向的实际文件。如果你并不需要 所有的 ,但只有 一些
模块的库,你可以创建一个lib
在该模块dir指明,只有符号链接的应用程序的必要子目录lib
DIR到相应模块的lib
目录(不要上传不必要的文件)。您 可能
还需要符号链接到其他应用程序级配置文件中的某些模块,以使开发服务器上的某些支持脚本保持满意,请参见以下答案:https
:
//stackoverflow.com/a/34111170/4495081。请注意,仅通过上载单模块应用程序教程中提到的模块代码,可能不会仅通过上载模块的代码来更新应用程序级别的配置,而是需要appcfg.py
使用备忘单中提到的相应参数显式地请求它们。回答。