[英]Force Python import to be absolute (ignore local package directory)
有没有办法强制导入是绝对的而不是相对的?
我正在“覆盖”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
从本地 package 而不是从 Python 标准库导入 json。
有没有办法强制导入是绝对的,所以本地目录被忽略了?
如果您的“ json”模块位于软件包中,则可以解决该问题:
from __future__ import absolute_import
使用该__future__
语句,导入将是绝对默认的-即它将仅查找名为json
的顶级模块或文件。
如果您需要导入本地文件,则可以import foo.json
,也可以使用from . import json
import foo.json
要求相对导入from . import json
from . import json
或from .json import dumps
。
(我假设您正在使用Python 2)。
您可以从 sys.path 中删除自身路径:
self_dir = os.path.dirname(os.path.realpath(__file__))
if self_dir in sys.path:
sys.path.remove(self_dir)
然后正常导入 json。
如果您需要从本地目录导入任何内容,只需 append sys.path 的路径并导入您需要的内容:
sys.path.append(self_dir)
from local_module import *
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.