我試圖重新實施一些基於imp
模塊的代碼,以替代使用importlib
。還有就是功能imp.find_module
和importlib.find_loader
之間細微的差別:如何強制importlib find_loader專門使用特定路徑?
# Using imp find_module
>>> import imp
>>> imp.find_module("abc", ["some/path/module.py"])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib64/python3.3/imp.py", line 220, in find_module
raise ImportError(_bootstrap._ERR_MSG.format(name), name=name)
ImportError: No module named 'abc'
# Using import find_loader
>>> import importlib
>>> loader = importlib.find_loader("abc", ["some/path/module.py"])
>>> loader.path
'/usr/lib64/python3.3/abc.py'
看起來importlib
是回落到系統庫,同時imp.find_module
是採用獨家的方式path
參數,這最終引發異常。
如何強制importlib.find_loader
專門使用特定路徑?
謝謝你的答案,我實際上找到了做我想做的方式。事實是importlib在解析模塊名稱時使用了meta_path而不是路徑。 – 2013-03-28 12:36:02
AttributeError:'模塊'對象沒有屬性'find_loader' – Cerin 2015-04-20 18:17:29