Есть ли способ заставить импорт быть абсолютным, а не относительным?
Я «переопределяю» модуль стандартной библиотеки 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
импортирует json
из локального пакета, а не из стандартной библиотеки Python.
Есть ли способ заставить импорт быть абсолютным, чтобы локальный каталог игнорировался?
foo/json.py
для использования только в вашем коде или он может использоваться внешним кодом, который просто предполагает, что он получает настоящий модульjson
? Последнее не кажется особенно безопасным, а первое можно решить, просто выполнивimport myjson as json
вместо того, чтобы пытаться создать подкласс модуля. - person chepner   schedule 14.10.2013