niiyan's blog

niiyanの個人ブログ。

tweepy ライブラリのインストール

TwitterAPI を利用するにあたって、tweepy を使うことにしました。以下、インストールしたときのメモです。

ダウンロード〜インストール

tweepy/tweepy - GitHub からソースをダウンロード。

joshthecoder-tweepy-X.X.X-XX-XXXXXXXX.zip (または .tar.gz)を解凍して、tweepy フォルダをまるごと web2py/site-packages にコピーする。

INSTALL.txt より引用:

bundle with your application

                                                      • -

You may also download a source archive or checkout via Git.
Then just include the tweepy package folder inside your application's source folder.

json モジュールへのパスを通す

» Google App EngineでTwitterを活用する: エスキュービズム ラボ Blog によると、json モジュールへのパスを通す必要があるらしい。

tweepy/utils.py にある import_simplejson 関数を見てみる。

def import_simplejson():
   try:
       import simplejson as json
   except ImportError:
       try:
           import json  # Python 2.6+
       except ImportError:
           try:
               from django.utils import simplejson as json  # Google App Engine
           except ImportError:
               raise ImportError, "Can't load a json library"

   return json

Google App Engine (GAE)用に django からインポートする処理が含まれている。

このままではエラーが出たので、gluon.contrib.simplejson からインポートするようにした。

            except ImportError:
               try:
                   from gluon.contrib import simplejson as json  # Google App Engine
               except ImportError:
                   raise ImportError, "Can't load a json library"

これも ImportError が出たが、サーバーとブラウザを再起動したら、エラーは出なくなった。

tweepy がインポートできない

ここでいったん wev2py のサーバーをストップ。ためしに GAE のサーバーを起動してみると、今度は tweepy 自体インポートできない。

ImportError: No module named tweepy

調べてみると、site-packages からのインポートができないという話題が見つかった。

importing modules from site-packages on GAE - web2py-users | Google グループ

ここに投稿されていた次のコードを gaehandler.py に追加すると、GAE のローカルサーバーではエラーが出なくなった(ように見えた)。

sys.path.append(os.path.dirname(__file__))
sys.path.append(os.path.join(os.path.dirname(__file__),'site- packages')) 

上のコード追加は関係ない?

上述のように gaehandler.py にコードを追加すると tweepy モジュールがインポートできるようになった……と思ったのですが、毎回ではないものの、その後も GAE の開発環境で tweepy がインポートできない旨のエラーが出ることがありました。

その場合に、gaehandler.py を変更なしで上書き保存しただけで動くようになったりしたので、上のコードの追加は関係なかったのかもしれません(実際、今は追加したコードを削除した状態で問題なく使えています)。

そしてエラーが出なくなった

いつからかわかりませんが、開発をつづけるうちに ImportError に遭遇することがなくなりました。上で追加したコードは削除した状態です。

なぜエラーが出なくなったのか。理由はよくわからないのですが、エラーが出なくなった頃に以前と変えたことといえば、次の 2 つが思い当たります。

  • web2py と GAE、両方の開発環境を切り替えながら使っていたが、GAE の開発環境だけを使うようにした。
  • 以前は管理者用のスクリプトからのみ tweepy をインポートしていたが、一般公開用の方でもインポートするようになった。
    • foo.py (トップページとか)と bar.py (管理用)があって、以前は bar.py でのみインポートしていた。foo.py と bar.py は依存関係にない。

追記

2011-05-19 0:08

tweepy のページの URL が変更になっていたようなので、修正。