Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 ImportError:没有名为[directory]Google App Engine的模块_Python 2.7_Google App Engine_Yaml - Fatal编程技术网

Python 2.7 ImportError:没有名为[directory]Google App Engine的模块

Python 2.7 ImportError:没有名为[directory]Google App Engine的模块,python-2.7,google-app-engine,yaml,Python 2.7,Google App Engine,Yaml,我不断收到一个错误,显示没有名为backend的模块,这是我的webapp2应用程序所在的目录 我的文件夹结构: /project /backend /env #python virtual env libraries main.py #my main entry point where webapp2 app instance is requirements.txt app.yaml 我的app.yaml: service: default handlers:

我不断收到一个错误,显示没有名为
backend
的模块,这是我的webapp2应用程序所在的目录

我的文件夹结构:

/project
 /backend
   /env    #python virtual env libraries
   main.py #my main entry point where webapp2 app instance is
   requirements.txt
 app.yaml
我的app.yaml:

service: default

handlers:
- url: /dist
  static_dir: dist

- url: /.*
  script: backend.main.app

libraries:
- name: webapp2
  version: latest
- name: jinja2
  version: latest
在我的
app.yaml
出现在后端之前,我决定转到root。现在,当我在根目录下运行
dev_appserver.py
时,我不断得到
ImportError:没有名为backend的模块

我创建了virualenv,并将requirements.txt包安装在
后端
目录中


编辑:我不确定这是否有影响,但我已经在
app.yaml
位于
backend
文件夹中时部署了我的应用程序。我猜这应该无关紧要,因为我试图通过在我的项目根目录中移动
app.yaml
并运行
dev_appserver.py app.yaml
来进行本地测试,但当我这样做时,它似乎不起作用。

包含GAE服务的
app.yaml
文件的目录是服务的顶级目录。此目录的内容是部署服务时将上载到GAE的内容。服务代码或配置中引用的所有路径都与此顶级目录相关。因此,在不相应更新相关代码和配置的情况下移动
app.yaml
文件将破坏应用程序的功能

您似乎没有很好地理解
脚本:
语句的含义。发件人:

脚本:
指令必须是python导入路径,例如,
package.module.app
指向WSGI应用程序。最后 使用Python模块路径的
脚本:
指令的组件是 模块中全局变量的名称:该变量必须是WSGI app,通常按惯例称为
app

注意:就像Python导入语句一样,每个 是一个包,它必须包含一个名为

因此,假设您的
app.yaml
文件位于您的
项目中,则

script:backend.pythonAttack.app

这意味着:

  • 后端
    目录中有一个
    初始化
    文件,以使
    后端
    成为一个包
  • backend
    dir中有一个
    pythonAttack.py
    文件,其中
    app
    变量指向您的webapp2应用程序
根据你的描述,你不符合这些条件

我的建议是:

  • app.yaml
    放在
    backend
    目录中(不需要是python包目录)
  • 更新其
    脚本
    行以匹配您的代码。假设您的
    webapp2
    app的
    app
    变量实际上位于
    main.py
    文件中,则该行为:

      script: main.app
    
  • 通过显式地将
    app.yaml
    文件作为参数传递,在本地运行应用程序(通常是一个好习惯,也是使用多个服务和/或
    dispatch.yaml
    文件运行应用程序的唯一方法):

  • 将服务python依赖项存储在
    后端/lib
    目录中(遵循命名约定),与virtualenv包分开

  • env
    virtualenv包目录存储在
    backend
    目录之外,以防止在部署服务时不必要地将其上载到GAE(以及对应用程序操作的潜在干扰)。virtualenv的目标是在本地正确地模拟GAE沙箱,以便您能够正确地运行开发服务器

可能对构建多服务应用程序感兴趣:

感谢您的输入。my app.yaml示例的
脚本
属性是一个类型错误。我有它作为pythonAttack,但改变了它的主要为SO职位。如前所述,当我将app.yaml放在
backend
目录中时,一切正常,但我希望将app.yaml放在项目根目录之外的原因是,我可以将
目录(静态资产)移动到项目根目录,而不是
backend
目录。我的app.yaml与static dir
dir
位于同一目录中,但如果将我的app.yaml移回
后端
中,我不确定如何将app.yaml static_dir路径指向上一个文件。我基本上希望app.yaml位于根目录中,因为我计划将我的应用程序拆分为后端服务和前端服务。但是,正如所建议的,在
后端
文件夹中添加init.py文件后,我不再出现导入错误,一切似乎都正常。然而,有时我的服务器会挂起,永远不会加载。我想知道这是否与我的app.yaml位于项目根目录中有关,因为我的
设置/属性没有指向我安装virtualenv的目录。在
项目
目录中,将所有服务组合在一起并非不可能(这是将
.yaml
文件向上移动一级所要做的)。但是,正确地操作要繁琐得多。而且,您会不必要地上传每个服务中的所有内容。尽管如此,这是可能的。但我宁愿使用符号链接来共享静态资产(或任何其他内容)跨服务。更干净的IMHO。不确定挂起。决定一种方法,如果您仍然看到问题,请作为单独的问题提问,并针对该问题更新描述。我个人不使用virtualenv。
dev_appserver.py backend/app.yaml