When it’s ready.

出来るまで出来ない

Windows + Python2.5 + simplejson をeasy_install出来ないときの対処法

もうマジでWinむかつくんですよ。easy_installでインストールできないモジュールが多すぎるんですよ。多すぎるは、言いすぎだけど・・・
標準モジュールにしてもらいたいくらいのsimplejsonが、winだとなぜかスパッと行ってくれません。そのための対処法、以下三つ

  1. ソースを持ってくる。
  2. オプションをつけてインストール
  3. コピーされないときのおまじない

順を追って説明する

ソース持ってくる。

http://pypi.python.org/pypi/simplejson ここから、ソースを持ってくる。08/03/01現在は、1.7.4でした。そんで、適当なところで解凍します。中身は

 U:\MyDoc\Download\simplejson-1.7.4 のディレクトリ

2008/03/01  18:30    <DIR>          .
2008/03/01  18:30    <DIR>          ..
2008/03/01  18:30    <DIR>          build
2008/03/01  18:29    <DIR>          docs
2007/10/03  01:57             8,838 ez_setup.py
2008/03/01  18:30             9,075 ez_setup.pyc
2006/06/29  04:34             1,056 LICENSE.txt
2008/02/24  08:05             1,208 PKG-INFO
2008/03/01  18:29    <DIR>          scripts
2008/02/24  08:05                59 setup.cfg
2008/02/23  16:02             3,044 setup.py
2008/03/01  18:31    <DIR>          simplejson
2008/03/01  18:30    <DIR>          simplejson.egg-info

こんな感じになっていた。(コンパイル後なのでファイルが増えている可能性あり)

オプションをつけてインストール

このやり方を見つけた人神だと思った。エラい!ありがとう。
http://jhcore.com/2008/02/03/building-python-packages-from-source-on-windows/
このページを参考にして、コマンドを打ち込む

平常時(この方法だとCコンパイラがどうのこうのといってエラる)
> python setup.py install
今回は、オプションつきでやってあげる。(ソースを展開したフォルダー内でやること)
python setup.py build_ext --compiler=mingw32 install

ってやると、buildっていうフォルダー内になんかいろいろファイルが出来るらしい。
setup.pyやったドス窓(ドス窓っていうのかな?)でPythonを実行してimport simplejsonすると
無事にロードされるんだけど、IDLEとかから実行するとこの段階では、まだそんなモジュール氏らねー
といって怒られる。

おまじない(site-packagesにコピされてないぽいので無理やりコピー)

をすることによって、今回は回避した。やり方が正しいとは思えないが、動いたのでその辺のモヤモヤした気持ちは、忘れることにする。

YOURPATH\\simplejson-1.7.4\build\bdist.win32\egg 内のsimplejsonフォルダーを YOURPATH\Python25\Lib\site-packages\ にコピーする。
Python25\Lib\site-packages\easy-install.pth ファイルを修正する
./simplejson

という文字を最後の行の一行上に追加した。

完成したはず、チェックしてみる。
Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.

    ****************************************************************
    Personal firewall software may warn about the connection IDLE
    makes to its subprocess using this computer's internal loopback
    interface.  This connection is not visible on any external
    interface and no data is sent to or received from the Internet.
    ****************************************************************
    
IDLE 1.2.1      
>>> import simplejson
>>> s = simplejson
>>> s
<module 'simplejson' from 'C:\usr\bin\Python25\lib\site-packages\simplejson\__init__.pyc'>
>>> 
一件落着

 この方法は、sqlobjectとか他のモジュールでも適用できる気がする。ので、sqlobjectとか、昔インストールを断念してしまったモジュールとかにもいつかチャレンジしてみたい。これで、exeのインストーラを探すたびに出る回数が減ることになれば、うれしいなぁ・・・