亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何導入給定名稱的模塊?

如何導入給定名稱的模塊?

LEATH 2019-06-01 14:24:37
如何導入給定名稱的模塊?我正在編寫一個Python應用程序,它以命令作為參數,例如:$ python myapp.py command1我希望應用程序是可擴展的,也就是說,能夠添加實現新命令的新模塊,而不必更改主應用程序源代碼。這棵樹看起來像:myapp/     __init__.py     commands/         __init__.py         command1.py         command2.py     foo.py     bar.py因此,我希望應用程序在運行時找到可用的命令模塊,并執行適當的命令模塊。Python定義了進口函數,該函數接受模塊名稱的字符串:_import_(名稱,globals=無,局部變量=無,from list=(),level=0)函數導入模塊名,可能使用給定的全局和局部變量來確定如何在包上下文中解釋該名稱。FROM列表給出了應該根據名稱從模塊導入的對象或子模塊的名稱。資料來源:https:/docs.python.org/3/Library/function s.html#進口所以目前我有這樣的事情:command = sys.argv[1]try:     command_module = __import__("myapp.commands.%s" % command, fromlist=["myapp.commands"])except ImportError:     # Display error messagecommand_module.run()這很好,我只是想知道是否有一種更慣用的方法來完成我們使用這段代碼所做的工作。請注意,我特別不想進入使用雞蛋或擴展點。這不是一個開源項目,我不希望有“插件”。重點是簡化主應用程序代碼,并消除每次添加新命令模塊時修改它的需要。
查看完整描述

4 回答

?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

在Python版本超過2.7/3.1的情況下,您幾乎就是這樣做的。

有關更新版本,請參見importlib.import_modulePython 2Python 3.

你可以用exec如果你也想的話。

或使用__import__您可以通過以下操作導入模塊列表:

>>> moduleNames = ['sys', 'os', 're', 'unittest'] >>> moduleNames['sys', 'os', 're', 'unittest']>>> modules = map(__import__, moduleNames)

直接從深入Python.


查看完整回答
反對 回復 2019-06-01
?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

注:IMP因為Python3.4支持進口庫

如前所述,IMP模塊為您提供加載功能:

imp.load_source(name, path)imp.load_compiled(name, path)

我以前用過這些來做類似的事情。

在我的例子中,我用所需的方法定義了一個特定的類。加載模塊后,我將檢查類是否在模塊中,然后創建該類的實例,如下所示:

import impimport osdef load_from_file(filepath):
    class_inst = None
    expected_class = 'MyClass'

    mod_name,file_ext = os.path.splitext(os.path.split(filepath)[-1])

    if file_ext.lower() == '.py':
        py_mod = imp.load_source(mod_name, filepath)

    elif file_ext.lower() == '.pyc':
        py_mod = imp.load_compiled(mod_name, filepath)

    if hasattr(py_mod, expected_class):
        class_inst = getattr(py_mod, expected_class)()

    return class_inst


查看完整回答
反對 回復 2019-06-01
  • 4 回答
  • 0 關注
  • 566 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號