首页 > 解决方案 > 如何制作 Mininet Python 脚本的可执行包?

问题描述

如何制作 Mininet Python 脚本的可执行包?

我有 mininet 自定义拓扑 python 脚本,我需要在 Linux 中使可执行文件在未安装 mininet 的情况下工作。

我使它在 ubuntu-Pyinstaller 中可执行。它在安装了 mininet 的地方工作正常,但在没有安装 mininet 的其他机器上不能工作。在运行可执行文件时,它给出以下错误:

   pradeepkumar@ubuntu:~/Desktop/tp4$ sudo python tp.py
Traceback (most recent call last):
  File "tp.py", line 5, in <module>
    from mininet.net import Mininet
ImportError: No module named mininet.net

pradeepkumar@ubuntu:~/Desktop/tp4$ cd dist/

pradeepkumar@ubuntu:~/Desktop/tp4/dist$ ls
tp

pradeepkumar@ubuntu:~/Desktop/tp4/dist$ sudo ./tp
*** Test Network Script 
*** Creating nodes
Cannot find required executable mnexec.
Please make sure that Mininet is installed and available in your $PATH:
(/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin)
Traceback (most recent call last):
  File "tp.py", line 124, in <module>
  File "tp.py", line 23, in TP
  File "build/bdist.linux-x86_64/egg/mininet/node.py", line 85, in __init__
  File "build/bdist.linux-x86_64/egg/mininet/node.py", line 657, in checkSetup
  File "build/bdist.linux-x86_64/egg/mininet/node.py", line 665, in setup
  File "build/bdist.linux-x86_64/egg/mininet/moduledeps.py", line 68, in pathCheck
NameError: global name 'exit' is not defined
[3874] Failed to execute script tp
pradeepkumar@ubuntu:~/Desktop/tp4/dist$ 

使用 NUITKA:

同样的问题,以及与上面完全相同的错误消息。

注意:我曾经在将包移动到另一台机器之前制作包的 tar.gz,然后在那里解压。

我尝试了他们用户手册中的所有命令以使其可执行但无法在第二台机器上运行......

nuitka.net/doc/user-manual.html

下面是脚本:

#!/usr/bin/python



from mininet.net import Mininet
from mininet.node import Node
from mininet.link import TCLink
from mininet.log import  setLogLevel, info
from threading import Timer
from mininet.util import quietRun
from time import sleep
from mininet.cli import CLI




def TP(cname='controller', cargs='-v ptcp:'):

    "Create network using Open vSwitch and ODL Controller in Mininet."


    info( "*** Creating nodes\n" )
    controller = Node( 'c0', inNamespace=False )
    s1 = Node( 's1', inNamespace=False )
    s2 = Node( 's2', inNamespace=False )
    h1 = Node( 'h1' )
    h2 = Node( 'h2' )


    info( "*** Creating links\n" )
    TCLink( h1, s1 )
    TCLink( s1, s2 )
    TCLink( s2, h2 )


    info( "*** Configuring Hosts\n" )

    h1.setIP( '192.168.100.1/24' )
    h2.setIP( '192.168.100.2/24' )



    info( "*** Starting network using Open vSwitch\n" )

    s1.cmd( 'ovs-vsctl del-br dp0' )
    s1.cmd( 'ovs-vsctl add-br dp0' )
    s2.cmd( 'ovs-vsctl del-br dp1' )
    s2.cmd( 'ovs-vsctl add-br dp1' )

    controller.cmd( cname + ' ' + cargs + '&' )          

    for intf in s1.intfs.values():

        print intf

        print s1.cmd( 'ovs-vsctl add-port dp0 %s' % intf )



    for intf in s2.intfs.values():

        print intf

        print s2.cmd( 'ovs-vsctl add-port dp1 %s' % intf )



    # Note: controller is ODL 


    s1.cmd( 'ovs-vsctl set-controller dp0 tcp:127.0.0.1:6633' )

    s2.cmd( 'ovs-vsctl set-controller dp0 tcp:127.0.0.1:6633' )



    info( '*** Waiting for switches to connect with controller' )

    while 'is_connected' not in quietRun( 'ovs-vsctl show' ):

        sleep( 1 )

        info( '.' )

    info( '\n' )


    info( "*** Running test\n" )
    h1.cmdPrint( 'ping -c 10 ' + h2.IP() )

    info( "*** Running iperf test Between h1 and h2\n" )
    print "iperf: h1--s1--s2--h2"

    h2.cmd('iperf -s &')
    h1.cmdPrint('iperf -c 192.168.100.2 -t 10')


    info( "*** Stopping network\n" )

    controller.cmd( 'kill %' + cname )

    s1.cmd( 'ovs-vsctl del-br dp0' )

    s1.deleteIntfs()

    s2.cmd( 'ovs-vsctl del-br dp1' )

    s2.deleteIntfs()

    info( '\n' )



if __name__ == '__main__':

    global net

    setLogLevel( 'info' )

    info( '*** Test Network Script \n' )

    Mininet.init()

    TP()

请告知我如何使这个mininet-python 脚本在 Linux 中的可执行包可以在没有安装 mininet 的其他机器上工作?

谢谢

标签: pythonpyinstallerexecutablemininetnuitka

解决方案


推荐阅读