GAE/Python 仅在已部署版本上出现 ImportError
GAE/Python ImportError only on the deployed version
大家好,我正在为 AppEngine 苦苦挣扎,我在开发服务器上制作了我的 Web 应用程序,一切正常,但是一旦我部署它就会给我一个 ImportError。
我的主目录如下:
-/
-Several
-Folders
-...
*admin.py
*app.yaml
*db_objects.py
*index.yaml
*img_getter.py
*keys.py
*main.py
*main_handler.py
我的 app.yaml 文件:
application: myapplication (this is not the real name)
version: 1
runtime: python27
api_version: 1
threadsafe: yes
default_expiration: "7d"
handlers:
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico
- url: /css
static_dir: css
- url: /img
static_dir: img
- url: /images
static_dir: images
- url: /js
static_dir: js
- url: /admin.*
script: admin.app
login: admin
- url: /checkout.*
script: main.app
login: required
- url: /confirm.*
script: main.app
login: required
- url: /changeinfo.*
script: main.app
login: required
- url: .*
script: main.app
libraries:
- name: webapp2
version: "2.5.2"
- name: jinja2
version: latest
当我转到 myaddress.appengine.com/admin 时,它给了我这个错误:
Traceback (most recent call last):
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 240, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
handler, path, err = LoadObject(self._handler)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 85, in LoadObject
obj = __import__(path[0])
File "/base/data/home/apps/s~myapplication/1.383371027775991819/admin.py", line 7, in <module>
import img_getter
ImportError: No module named img_getter
这是admin.py的开头:
#coding=utf-8
import webapp2
from main_handler import Handler
import db_objects
from google.appengine.ext import db
import img_getter
from google.appengine.api import memcache
import keys
from datetime import date
class MainHandler(Handler):
def get(self):
self.redirect("/admin/noticias")
...
这是 img_getter.py 文件的开头:
import gdata.photos.service
import gdata.media
import gdata.geo
def foo(variable):
...
def bar(variable):
...
#functions to get images from the google picassa service
问题是我一直在开发者服务器上开发这个 web 应用程序,它一直运行得很好,我什至清除了数据存储并在多台计算机上尝试过它仍然可以工作,但是当我尝试测试时它在 Google 个服务器上我发现了这个错误。
我没有在 app.yaml 文件上定义任何引用,因为我认为它不是必需的,因为它不是依赖于 google python API 的库,是我错了吗?
有人知道问题出在哪里吗?
非常感谢:)
您可能需要将其作为包导入。
https://docs.python.org/2/tutorial/modules.html#packages
为 img_getter.py 创建一个名为 'test' 的文件夹(或任何你想要的)并将其放入其中
添加一个名为__init__.py
的文件,保存在你放img的文件夹里。这个文件可以为空
将导入调用为
导入 test.img_getter
参考
How to import python script files in folders on Google App Engine?
干杯,祝你好运!
大家好,我正在为 AppEngine 苦苦挣扎,我在开发服务器上制作了我的 Web 应用程序,一切正常,但是一旦我部署它就会给我一个 ImportError。 我的主目录如下:
-/
-Several
-Folders
-...
*admin.py
*app.yaml
*db_objects.py
*index.yaml
*img_getter.py
*keys.py
*main.py
*main_handler.py
我的 app.yaml 文件:
application: myapplication (this is not the real name)
version: 1
runtime: python27
api_version: 1
threadsafe: yes
default_expiration: "7d"
handlers:
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico
- url: /css
static_dir: css
- url: /img
static_dir: img
- url: /images
static_dir: images
- url: /js
static_dir: js
- url: /admin.*
script: admin.app
login: admin
- url: /checkout.*
script: main.app
login: required
- url: /confirm.*
script: main.app
login: required
- url: /changeinfo.*
script: main.app
login: required
- url: .*
script: main.app
libraries:
- name: webapp2
version: "2.5.2"
- name: jinja2
version: latest
当我转到 myaddress.appengine.com/admin 时,它给了我这个错误:
Traceback (most recent call last):
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 240, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
handler, path, err = LoadObject(self._handler)
File "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 85, in LoadObject
obj = __import__(path[0])
File "/base/data/home/apps/s~myapplication/1.383371027775991819/admin.py", line 7, in <module>
import img_getter
ImportError: No module named img_getter
这是admin.py的开头:
#coding=utf-8
import webapp2
from main_handler import Handler
import db_objects
from google.appengine.ext import db
import img_getter
from google.appengine.api import memcache
import keys
from datetime import date
class MainHandler(Handler):
def get(self):
self.redirect("/admin/noticias")
...
这是 img_getter.py 文件的开头:
import gdata.photos.service
import gdata.media
import gdata.geo
def foo(variable):
...
def bar(variable):
...
#functions to get images from the google picassa service
问题是我一直在开发者服务器上开发这个 web 应用程序,它一直运行得很好,我什至清除了数据存储并在多台计算机上尝试过它仍然可以工作,但是当我尝试测试时它在 Google 个服务器上我发现了这个错误。
我没有在 app.yaml 文件上定义任何引用,因为我认为它不是必需的,因为它不是依赖于 google python API 的库,是我错了吗? 有人知道问题出在哪里吗?
非常感谢:)
您可能需要将其作为包导入。
https://docs.python.org/2/tutorial/modules.html#packages
为 img_getter.py 创建一个名为 'test' 的文件夹(或任何你想要的)并将其放入其中
添加一个名为
__init__.py
的文件,保存在你放img的文件夹里。这个文件可以为空将导入调用为 导入 test.img_getter
参考 How to import python script files in folders on Google App Engine?
干杯,祝你好运!