当前位置: 首页 > 面试题库 >

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

於和志
2023-03-14
问题内容

当我尝试访问应用程序根目录下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/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使用备忘单中提到的相应参数显式地请求它们。回答。



 类似资料:
  • 我正在尝试从最好的提供商那里获取位置。我启用了GPS。此外,当我打印纬度和经度时,我从网络提供商那里获取它。 我的问题是: 如果启用了GPS,那么我想通过GPS搜索30秒的位置。在那之后,如果我的精度低于200米,那么我就使用它。如果精度超过200米,我会再次搜索,然后从网络提供商那里开始。 之后,我比较两者的准确性,并获取更准确的提供商的数据。 这是我的代码: LocationUtil。JAVA

  • 问题内容: 我创建了一个本地EJB,我想从同一VM中的Web模块访问它。我的代码如下所示: 这很好。但是,有人告诉我,如果我正在使用本地bean,则不需要进行查找,我只需要进行如下注入: 但是,如果我尝试这样做,则会在this.userBean上得到一个空异常。建议我的人与JBoss合作,而我正在使用glassfish。难道我做错了什么? 问题答案: @EJB注释仅适用于应用程序服务器控制的类,例

  • 我没有提到这段代码只有在我将ejb.jar包含在ear应用程序的lib文件夹中时才起作用,war模块可以“看到”它。还有其他方法可以访问EJB类吗?我使用的也是Intellij,该应用程序是一个java EE应用程序,包含一个web模块(用于war)。 编辑 我无法避免glassfish从v2升级到V4。这是我做的最好的决定,因为我所有的问题都过去了。在我的代码中所有的ejb注入都非常有效! 谢谢

  • 我正在编写一个处理多个系统的应用程序。用户可以选择他想使用的系统,我将该系统ID存储在会话(客户端会话)中 现在我有了服务类,比如说CustomerService。 我想使用 Guice 将客户实例注入控制器。但是我想使用存储在会话中的系统ID实例化客户服务。 如何访问<code>请求。Guice模块中的会话? 编辑: 简化了我上面的代码。我的实际代码使用接口。我如何使用辅助注射? 这给了我:客户

  • 尝试在JMX控制台中注册MBean时,我收到以下错误消息: 我正在使用Eclipse,我的项目结构中没有文件。 当我注释我对javaeeapi的依赖关系时,错误消失了,但是包不是JAR的一部分。