2

有没有办法强制导入是绝对的而不是相对的?

我“覆盖”了 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'. Aprint(pyjson.__file__)证实了我的怀疑,即从本地包而不是从 Python 标准库import json as pyjson导入。json

有没有办法强制导入是绝对的,所以本地目录被忽略?

4

1 回答 1

4

如果您的“json”模块在一个包中,那么这将解决它:

from __future__ import absolute_import

使用该__future__语句,导入将是绝对默认的 - 即它只会查找名为json.

如果您需要导入本地文件,您可以这样做,或者您可以使用或import foo.json明确要求相对导入。from . import jsonfrom .json import dumps

(我假设您使用的是 Python 2)。

于 2013-10-14T12:44:44.223 回答