无法在GAE中导入python中的正确模块

时间:2013-05-09 17:30:32

标签: python google-app-engine python-2.7 python-import

如何明确告诉Google App Engine(python)从python标准库导入json?

由于文件名称不合适(我目前无法更改或重命名),因此无法导入json。

在与我正在处理的文件相同的目录中有一个json.py。 当我尝试:

import json

它将文件导入同一目录。

有没有办法可以按照以下方式做点什么:

from ../ import json

导入Native JSON库?

编辑:

我现在甚至尝试重命名有问题的文件并替换此文件的所有用途。但是我仍然无法通过GAE导入json标准库。

附件是错误日志:

File "/Users/admin/Blah/dataaccess.py", line 13, in <module> 
   from classes import ZenDesk    
File "/Users/admin/Blah/classes/ZenDesk.py", line 10, in <module> 
   import json
File "/Users/admin/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/devappserver2/python/sandbox.py", line 892, in load_module
   raise ImportError('No module named %s' % fullname)
ImportError: No module named classes.json

请帮助谷歌应用引擎应该寻找标准库而不是在子目录类

4 个答案:

答案 0 :(得分:1)

如果由于某种原因无法重命名模块,则必须使用sys.path来将标准库放在当前模块的前面。确保在导入后再次修复它,但是......

import sys
sys.path = [r'C:\Python27\Lib'] + sys.path
import json
sys.path = sys.path[1:]

或者,我很确定imp module具有此功能。

让我说清楚,但是:它会更好(正如其他人所说)只是重命名项目目录中的模块(例如my_json.py)。您不必更改 许多依赖项。

有些编辑: 如果找不到标准库中的实际路径(绝对路径或其他路径),除了重命名之外,还有两个选项。您可以将正在处理的文件移动到程序包中的其他级别(以便它无法查看本地json.py)。例如,像这样:

/package
    __init__.py
    your_file.py # "import json" should now hit the std lib.
                 # To import the local copy, use "from app import json"
    app/
        __init__.py
        json.py
        other_thing.py # contains "import json" to get the local copy

如果你不想移动你的文件,那么你可以通过添加一个除了导入真正的json模块之外什么都不做的额外文件来伪造它:

/package
    __init__.py
    json_importer.py # contains nothing but "import json"
    app/
        __init__.py
        json.py
        your_file.py # "from package.json_importer import json"
        other_thing.py # contains "import json" to get the local copy

答案 1 :(得分:0)

尝试这个吗?

import imp

json = imp.load_source('module.name', '/path/to/built-in/json/file.py')

答案 2 :(得分:0)

Import a module from a relative path

我很确定你会在这里找到答案:)

答案 3 :(得分:0)

试试这个,虽然我不确定它是否适用于GAE,因为它是一个PaaS平台:

import os
import sys

from distutils.sysconfig import get_python_lib

sys.path.insert(0,os.path.dirname(get_python_lib()))
import json
sys.path = sys.path[1:]