【问题标题】:GAE/Python ImportError only on the deployed versionGAE/Python ImportError 仅在已部署版本上
【发布时间】:2015-04-04 17:56:30
【问题描述】:

大家好,我正在为 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 的库,我错了吗? 有谁知道问题出在哪里?

非常感谢:)

【问题讨论】:

    标签: python google-app-engine deployment importerror


    【解决方案1】:

    您可能需要将其作为包导入。

    https://docs.python.org/2/tutorial/modules.html#packages

    1. 为 img_getter.py 创建一个名为“test”(或任何您想要的)的文件夹并将其放入其中

    2. 添加一个名为__init__.py的文件,并将其保存在您放入img的文件夹中。该文件可以为空

    3. 将导入调用为 导入 test.img_getter

    参考 How to import python script files in folders on Google App Engine?

    干杯,祝你好运!

    【讨论】:

    • 非常感谢,它运行良好。我已经使用 python 和 appengine 几个月了,但我对此一无所知。再次感谢:)
    • 我的荣幸。当我刚开始的时候,那个让我绊倒了。干杯!
    猜你喜欢
    • 2020-12-28
    • 2019-03-04
    • 1970-01-01
    • 2021-11-11
    • 2013-04-17
    • 2017-01-30
    • 2022-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多