有没有办法强制导入是绝对的而不是相对的?
我正在“覆盖”Python标准库json
模块,所以在我的项目中我总是使用正确的编码器和参数:
project/foo/json.py
:(标记此文件名)
import json as pyjson
class ComplexEncoder(pyjson.JSONEncoder):
def default(self, obj):
if hasattr(obj, 'isoformat'):
return obj.isoformat()
else:
if type(obj) == file:
return "filestream"
raise TypeError, 'Object of type %s with value of %s is not JSON serializable' % (type(obj), repr(obj))
def dumps(data):
return pyjson.dumps(data, cls=ComplexEncoder, check_circular=False, separators=(',', ':'), ensure_ascii=False)
def loads(data):
return pyjson.loads(data)
当我导入此文件时,我得到了可怕的AttributeError: 'module' object has no attribute 'JSONEncoder'
。
print(pyjson.__file__)
确认我怀疑import json as pyjson
从本地包而不是Python标准库导入json
。
有没有办法强制导入是绝对的,所以忽略本地目录?
答案 0 :(得分:4)
如果你的“json”模块在一个包中,那么这将解决它:
from __future__ import absolute_import
使用__future__
语句,导入绝对是默认的 - 即它只会查找名为json
的顶级模块或文件。
如果您需要导入本地帐户,则可以import foo.json
,或者您可以使用from . import json
或from .json import dumps
明确要求进行相对导入。
(我假设您使用的是Python 2)。