有沒有辦法強制導入是絕對的而不是相對的?強制Python導入是絕對的(忽略本地包目錄)
我「壓倒一切」的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'
。 A print(pyjson.__file__)
確認我懷疑import json as pyjson
從本地包而不是從Python標準庫導入json
。
有沒有辦法強制導入是絕對的,所以本地目錄被忽略?
爲什麼不只是用另一個名字命名呢? – aIKid
因爲:A - 意味着重構很多東西。 B - 之前我曾經遇到過這個問題,現在我想要一個很好的通用解決方案。 – RickyA
'foo/json.py'僅用於您的代碼,還是可能被外部代碼使用,只是假設它獲取了「真正的」json模塊?後者聽起來並不安全,前者可以簡單地通過「import myjson as json」來解決,而不是試圖「模塊化」模塊。 – chepner