Regen Techlog

Web・プログラミングの技術メモ

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

      2016/08/14

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でインストール

 - プログラミング

コメントを残す

  関連記事

THETA画像のEXIF読み取りと傾き補正

最近一部で話題のTHETA(ワンショット全球パノラマカメラ)ですが,THETAを …

VC++9.0でOpenMP使用時の注意点

OpenMPを使ったCライブラリをPythonで使うためにPython本体のバー …

Python小ネタ

Pythonの意外と知られていない小ネタを紹介します。

browsercookiejar: ブラウザのCookieをPythonから利用する

ウェブスクレイピングの記事を書きましたが、ログインが必要なページから情報を取得す …

SourceTreeのGit-Flowで必ずno-ffする

GUIでGit操作ができるクライアントの一つSourceTreeですが、Git- …

lxmlでスクレイピングするときのコツ

PythonでスクレイピングをしようとするとBeautifulSoupやlxml …

Suspend on LAN

ネットワークに接続されたPCを遠隔で起動する技術にWake on LAN(WoL …

「Unable to find vcvarsall.bat」の対処法

C/C++などのビルドが必要なファイルを含むPythonパッケージをWindow …

子テーマでサイドバーを最後に追加する

WordPressでテーマをカスタマイズする場合は子テーマを使うのが一般的ですが …

Pythonで簡単にWindowsサービスを作る

Pythonで書いた処理をバックグラウンドで動かしておきたいときに、Window …