Hatena::ブログ(Diary)

カストリブログ

2009-11-03

Windows環境下でlxml+python(lxmlのバイナリは未使用)

| 23:41

はじめに

 最近、pythonでHTMLテキストをパースすることが必要になった。当初、HTMLパーサとして、BeautifulSoupを利用していた。しかし、しばしばある特定のWebページのパース時に、HTMLParseErrorという例外が発生した。そのため、他のpython用のHTMLパーサを調べた所、lxmlというものがあることを知った。そこで、このlxmlをWindows環境下でインストールしようとしたのだが、かなり手間取った。

 この記事では、Windows環境下で、lxmlのインストーラを使用しないで、lxmlをpythonから利用可能にする手順を説明する。

 lxmlのインストールが完了した時点で気付いたのだが、最新でないバージョンのlxmlにはWindows用のインストーラが配布されている。そちらを利用すれば、この記事で説明するような複雑な手順なしにlxmlをインストールできると思われる。


前提

  1. OSはwindows vista
  2. pythonのバージョン:2.6

lxmlのページ

公式ページ

配布場所


lxmlのインストール

 easy_installを既に導入している場合は、単純にコマンドライン上から「easy_install lxml」と実行します。

 easy_installが未導入の場合は、まずは上記のlxmlのページから「lxml2.2.3.tar.gz」をダウンロードします。このファイルを解凍したら、コマンドライン上で、解凍場所まで移動し、「python setup.py install」と実行します。


vcvarsall.batが見つかりませんというエラーメッセージが出た場合

原因はVisual Studio C++2008がを入れていないためです。なので、Visual Studio C++2008を入れます(Visual Studio C++2005では駄目です)。


libxml/xmlversion.hが見つかりませんというエラーメッセージが出た場合

 lxmlのインストールに必要なライブラリlibxml2がlibxslt存在しないためです。libxml2は、iconvとzlibというライブラリも使用しています。したがって、libxml2、libxslt、iconv、zlibの4つのライブラリのWindows用バイナリをこちらのサイトからダウンロードします。


 各ライブラリは、bin、include、libの3つのフォルダから構成されています。環境変数を設定する手間を考えて、4つのライブラリの中身を1つのフォルダにまとめる。このフォルダのフルパス名を仮に「my」とします。そして、環境変数のLIBに「my/lib」を、INCLUDEに「my/include」を追加します。必須ではないですが、各ライブラリ内のコマンドを手軽に使用したい場合は、環境変数PATHに「my/bin」を追加します。

 この設定までを済ませれば、lxmlのインストールは成功するはずです。




lxmlのインストール後の設定

 とりあえず、lxmlがインストールできたかを確認するために、pythonインタプリンタ上から、以下のコマンドを実行します。

from lxml import etree

エラーにならなければ、インストール完全成功です。


ImportError:DLL load failedというエラーメッセージが出力される場合

 先ほど導入したライブラリのdll(「my/bin」にあります)がpythonから見えていないことが原因です。環境変数PATHに「my/bin」を追加していてもエラーになります。

対処法は以下の3つです。

  1. python.exeと同一フォルダに「my/bin」内のdllを置く
  2. 「pythonのインストール場所/Scripts」内のdllを置く
  3. lxmlのファイル群と同一の場所にdllを置く

 私の場合は、lxmlのファイル群の場所は「pythonのインストール場所/Lib/site-packages/lxml-2.2.3-py2.6-win32.egg/lxml」でした。

sakurai_youheisakurai_youhei 2016/03/03 10:30 日本語だとここがGoogleで一番上に来るので。lxmlのpipインストールで一番簡単な方法↓

set STATICBUILD=true && pip install lxml

ソース
・http://stackoverflow.com/a/23858541
・http://lxml.de/build.html#static-linking-on-windows