簡體   English   中英

Python:獲取導入模塊的句柄

[英]Python : Getting a handle to imported modules

我編寫了一個應用程序,為用戶提供了一個選項,可以指定一個特定的網絡掃描工具(例如nmap,xprobe,p0f),然后使用該工具掃描給定的子網(我不重新實現該工具,只需在shell中調用它即可)並解析其對我的應用的響應),解析結果並以特定格式存儲在DB中。 該應用程序基本上是另一個將使用DB中數據的應用程序的供稿器應用程序。

我已經編寫了代碼,以便所有掃描工具界面都實現為插件。 結構是

Project/
   DBWriter.py 
   Scanner/
      __init__.py
      network_mapper.py
      Scanner.py
      Plugins/
         __init__.py
         nmap.py
         p0f.py
   Others/  

因此,要添加新的掃描界面,開發人員所需要做的就是編寫一個tool.py文件(使用正確的語義)並將其放入Plugins文件夾中。

為此,我需要能夠在運行時導入正確的python模塊。

from Plugins import nmap
or
from Plugins import xprobe

取決於用戶輸入的內容

這是我添加的代碼

f,p,d = imp.find_module("Plugins")
x = imp.load_module("Plugins",f,p,d)
path_n = x.__path__
f,p,d = imp.find_module("%s"%(tool),path_n)
tool_mod = imp.load_module("%s"%(tool),f,p,d)
tool_mod.scan() #Irrespective of what user enters or what new plugin is  developed, this line does not need to change and will work as long as plug-in has a scan function

該代碼正常工作。 但是,當我嘗試使用PyInstaller (對於Windows / * Nix平台)將其捆綁到一個可執行文件中時,在find_module和load_module中存在很多麻煩,因此我遇到了ImportError(也許是因為路徑未在可執行文件中正確展開)減壓)。

我的問題是-Python中是否有另一種方法可以用來實現相同的功能(希望可以與PyInstaller一起使用)?

我之前曾問過這個問題,以便在PyInstaller中尋找解決方法,但是沒有任何回應迫使我在Python中尋找解決方法

如果只需要在Windows上運行,則建議嘗試py2exe

py2exe是Python Distutils擴展,可將Python腳本轉換為可執行的Windows程序,無需安裝Python即可運行。

我們在工作中使用它來加速一個非常大的Python程序,並且它可以處理導入的模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM