ns3.30でpybindgenが有効化されない
環境
問題
./waf configure
時にPython Bindingsがnot enabledとなってしまう.enabledにならないとPyVizやそのたもろもろ使えない.
Checking for pybindgen location : ../pybindgen (guessed) Checking for python module 'pybindgen' : ok Traceback (most recent call last): File "<string>", line 1, in <module> ModuleNotFoundError: No module named 'pybindgen.version' Checking for pybindgen version : not found pybindgen_version is an empty string
解決策
- pybindgenの最新版を公式サイトからダウンロード
- .tar.gzを解凍
./waf configure --with-pybindgen=path/to/pybindgen
./waf build
1
からpybindgenをtar.gz形式でダウンロード.記事投稿時点では0.20.0が最新.
2
.tar.gzを解凍.ns3を公式の手順通りにインストールしている人は,解凍フォルダを~/workspace/ns-3-allinone/に保存するとよき.外部モジュールはここに集められているみたい.
3
ns3のルートフォルダ(ns3.30の場合はns-3.30/)下で,--with-pybindgenオプションでpybindgenフォルダを指定しながら./waf configure
する
./waf configure --with-pybindgen=path/to/PyBindGen-0.20.0
path/to/pyindgenには解凍したフォルダへのパスを指定する.~/workspace/ns-3-allinone/に保存した人は../PyBindGen-0.20.0
うまくいけば,Python Bindgingsがenabledになる.PyVizもenabledになってくれている.
Checking for pybindgen location : ../PyBindGen-0.20.0/ (given) Checking for python module 'pybindgen' : 0.20.0 Checking for pybindgen version : 0.20.0 ... PyViz visualizer : enabled Python API Scanning Support : not enabled (Missing 'pygccxml' Python module) Python Bindings : enabled
4
ビルドする
./waf build
試しに--visオプションを使ってシミュレーションを走らせてみる.
./waf --run first --vis Waf: Entering directory `/home/ns3/workspace/ns-3-allinone/ns-3.30/build' Waf: Leaving directory `/home/ns3/workspace/ns-3-allinone/ns-3.30/build' Build commands will be stored in build/compile_commands.json 'build' finished successfully (1.211s) Could not load plugin 'show_last_packets.py': No module named 'kiwi' Could not load icon applets-screenshooter due to missing gnomedesktop Python module scanning topology: 2 nodes... scanning topology: calling graphviz layout scanning topology: all done.
うまく動いている.標準出力上だとなにやら怪しい出力があるが,まぁ気にしないことに.
原因
./waf configure
時に表示されていたpythonのエラーに原因が書かれている.
Traceback (most recent call last): File "<string>", line 1, in <module> ModuleNotFoundError: No module named 'pybindgen.version'
ns-3-allinone/フォルダ内にもともとあったpybindgenにはversion.pyがなかった.それで./waf configure
がpybindgenのバージョンをチェックできずエラーが発生してしまっていたようだ(該当コード - github).ダウンロードしてきた最新版にはちゃんとversion.pyが存在する.
$ pwd /home/***/workspace/ns-3-allinone $ find pybindgen/ -name version.py $ find PyBindGen-0.20.0/ -name version.py PyBindGen-0.20.0/pybindgen/version.py