WindowsでPython Netifacesをインストールする

WindowsでPython Netifacesをインストールする
Page content

Pythonでマジックパケットを監視してみようと思ってプログラムを書いていたのですが、自分宛てのマジックパケットをフィルタリングするためにPythonで自分のNICのMACアドレスを取得する必要がでてきました。しかし、どうも調べた範囲ではマルチプラットフォームでMACアドレスを取得するAPIは標準では存在しない可能性が高いことがわかりました。そこで、Netifacesパッケージを使ってみようと思ったのですが、Windowsでインストールするには一手間加える必要があったのでメモしときます。

2014-05-23 追記:最新版(0.10.4)では以下の手順は不要になった模様です。easy_installやpipでそのままインストールできます。

エラーの原因

Netifacesは、ネットワークインターフェイスに関する情報を取得するマルチプラットフォーム対応のPythonパッケージです。情報を取得する部分はパッケージ中のnetifaces.cで、C99で書かれているためインストール時にコンパイルする必要があります。しかし、VC++環境で.cの拡張子のファイルをビルドしようとするとC89でコンパイルするようになっているため、エラーが出てそのままではコンパイルできません。そこで、C99としてコンパイルするように修正をする必要があります。

解決法

distutilsは拡張子を見てコンパイラへ渡すオプションを変えているので、netifaces.cnetifaces.cppに変えてやればOKです。

  1. ソースをダウンロード、展開
  2. netifaces.cnetifaces.cppにリネーム
  3. setup.py中の'netifaces.c''netifaces.cpp'に変更
  4. python setp.py installでインストール