我正在使用一个库,他们认为创建一个名为json
的模块是一个好主意,它完全不像标准json
模块
有没有办法导入默认的json
模块?
答案 0 :(得分:3)
您可以导入带别名的任何模块。
因此,如果它们都被命名为json
,则需要更改导入路径。
>>> import sys
>>> hold, sys.path = sys.path, []
>>> # pop whatever json is already imported
>>> sys.modules.pop('json', None)
>>> # import json from system python
>>> import json as python_json
>>> # clean json from sys.module again
>>> del sys.modules['json']
>>> sys.path = hold
>>> # import the 3rd party json
>>> import json as thrid_json
如果你不从json
中删除sys.modules
,它仍会在将来的导入上发生冲突(这可能会导致问题),但至少你可以处理这两个包中的问题。一个实例(在@Kevin评论之后编辑为更明确)。
一个好的解决方法是 monkeypatch 这个命名不佳的模块。
基本上,创建一个名为notjson
的模块,并在__init__
内部从third_json
中取出所有需要的对象,并将它们放在__init__
命名空间中。
如果他们有这样的包结构:somepackage.json
,那么除了使用from
导入之外,您不需要做任何特殊的事情。
>>> import json as python_json
>>> from somepackage import json as third_json
答案 1 :(得分:3)
在py2中,您可以使用绝对导入
from __future__ import absolute_import
import json #this imports standard lib json
import mypackage.json as my_json #import custom json module