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