如何明确告诉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
请帮助谷歌应用引擎应该寻找标准库而不是在子目录类
答案 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:]