[英]Dynamic Importing in Python (Dotted statments)
我在使用以下代碼時遇到麻煩:
def get_module(mod_path):
mod_list = mod_path.split('.')
mod = __import__(mod_list.pop(0))
while mod_list:
mod = getattr(mod, mod_list.pop(0))
return mod
當我執行get_module('qmbpmn.common.db_parsers')
,出現錯誤消息: AttributeError: 'module' object has no attribute 'db_parsers'
。
但是: import qmbpmn.common.db_parsers
可以正常工作。
使用__import__
導入子模塊時,必須將父包作為fromlist
參數傳遞:
>>> __import__("os.path")
<module 'os' from '/usr/lib/python2.6/os.pyc'>
>>> __import__("os.path", fromlist=["os"])
<module 'posixpath' from '/usr/lib/python2.6/posixpath.pyc'>
__import__
適用於虛線模塊路徑,因此應該可以
def get_module(mod_path):
return __import__(mod_path)
或更簡單
get_module = __import__
也許我誤會了這個問題
導入軟件包不會自動將所有子模塊導入其名稱空間。 例如
import qmbpmn
並不意味着
qmbpmn.common.db_parsers
會自動解決
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.