[英]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.