1

我编写了一个应用程序,让用户可以选择指定特定的网络扫描工具(例如 nmap、xprobe、p0f),然后使用该工具扫描给定的子网(我没有重新实现该工具,只需在 shell 中调用它并解析它对我的应用程序的响应),解析结果并以特定格式存储在 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 中寻找解决方法

4

1 回答 1

0

如果您只需要在 Windows 上运行,那么我建议您尝试py2exe

py2exe 是一个 Python Distutils 扩展,可将 Python 脚本转换为可执行的 Windows 程序,无需安装 Python 即可运行。

我们在工作中使用它来加速一个非常大的 Python 程序,它可以处理导入的模块。

于 2011-10-17T06:11:46.370 回答