2

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

由于文件名称不佳(此时我无法更改或重命名),我无法导入 json。

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

import json

它将文件导入同一目录中。

有没有办法我可以按照以下方式做一些事情:

from ../ import json

导入原生 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

3 回答 3

1

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

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

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

不过,让我明确一点:将项目目录中的模块重命名(例如 to )会更好(正如其他人所说my_json.py)。您不必更改那么多依赖项。

一些编辑: 如果您找不到标准库的实际路径(绝对路径或其他路径),除了重命名之外,您还有两个选择。您可以将您正在处理的文件移动到包中的不同级别(这样它就看不到 local 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
于 2013-05-09T18:06:16.387 回答
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:]
于 2013-05-09T18:53:54.797 回答
0

也许试试这个?

import imp

json = imp.load_source('module.name', '/path/to/built-in/json/file.py')
于 2013-05-09T18:04:52.130 回答