PythonとTwitter Stream APIをいじってみたくなったその1(失敗談)
ってことで、インストールとか環境設定の話。
バージョンが変わったりとかしても対処しません。個人的な作業ログに近いです。
Pythonインストール
ダウンロード
http://www.python.jp/Zope/download/pythoncore
とりあえず新しいものって感じで3.1.3のWindows版をダウンロード。
インストールは特に設定変更せずにNext!
環境変数設定
「システムのプロパティ」を開いて「詳細設定」。Windowsのエディションによって微妙に名前が違うけど適当に読み替えてください。
「システム環境変数」(「ユーザー環境変数」でも可)の変数「Path」を選択して「編集」。
末尾に「;C:\Python31」(セミコロンを忘れないように)を入力して「OK」。
easy_installをインストール
なんか、PythonからTwitterのAPIを使うのにtweepyってモジュールをインストールするみたいなんだけど、そのモジュールを簡単にインストールするためのモジュールみたいだけどよくわからない。
下記サイトに従ってインストール。
easy_install
まずはこいつをダウンロード。面倒なのでデスクトップに配置。
ez_setup.py
コマンドプロンプトで「cd Desktop」してから「python ez_setup.py」。(Windows 7なのでDesktop。XPならDesktopはデスクトップに読み替えて…日本語混じっても実行できるのかな?出来なかったら別なディレクトリに入れてやればいいよ。XPだとDocument and Settingsフォルダ配下だからスペースも心配!)
File "ez_setup.py", line 106 except pkg_resources.VersionConflict, e: ^
…やったね!シンタックスエラーだ!
例外を受け取るときの書き方とかPython 3系では変更されてるからなぁ.
(Windows の Python 2.5,2.6,3.1にsetuptoolsを入れる - Livingdead の日記)
Python 3で例外を受け取る場合は、コンマの変わりにキーワード「as」を使って以下のように書きます。Python 2.6以上でもこの文法が利用できます。
(言語としての一貫性を重視したPython 3の進化 − @IT)
なるほどー。
106行目の
except pkg_resources.VersionConflict, e:
を
except pkg_resources.VersionConflict as e:
に変える。
よし、実行!
File "ez_setup.py", line 241 print "Setuptools version",version,"or greater has been installed." ^ SyntaxError: invalid syntax |<< シンタックスエラー! >> printを括弧付き…関数として呼べば通る。 この呼び方は2.6・3.0どちらでも使えるので、括弧付きを使っておいたほうが無難。 (<a href="http://d.hatena.ne.jp/qnzm/20090315/1237121603">Python3ではprintは関数 - qnzm.log(クニジマログ)</a>) << 今までは関数じゃなかったらしい。へー。 241行目と242行目 >|| print "Setuptools version",version,"or greater has been installed." print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' |<< を >|| print ("Setuptools version",version,"or greater has been installed.") print ('(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)') |<< に変更。 こーんどこそー。 >|| File "ez_setup.py", line 278, in <module> main(sys.argv[1:]) File "ez_setup.py", line 210, in main egg = download_setuptools(version, delay=0) File "ez_setup.py", line 132, in download_setuptools import urllib2, shutil ImportError: No module named urllib2
ダメでした。
ちなみに、Python3系ではPython2系のurllibは廃止され、urllib2もurllib.requestという名称に変更されている。ということで、Python3系を見据えるならurllibではなくurllib2を利用するのが望ましいようだ。
(日本語リファレンスには書いてない話:urllibとurllib2の違いってなんだ « DailyHckr)
モジュールインストールしてもうまくいかないとかありそうな気がしてきたなぁ…とりあえずやるだけやってみるか。
132行目
import urllib2, shutil
を
import urllib.request, shutil
に
158行目
src = urllib.request.urlopen(url)
を
src = urllib2.urlopen(url)
に変更。
その結果…
Downloading http://pypi.python.org/packages/3.1/s/setuptools/setuptools-0.6c11-p y3.1.egg Traceback (most recent call last): File "ez_setup.py", line 206, in main import setuptools ImportError: No module named setuptools During handling of the above exception, another exception occurred: Traceback (most recent call last): File "ez_setup.py", line 278, in <module> main(sys.argv[1:]) File "ez_setup.py", line 210, in main egg = download_setuptools(version, delay=0) File "ez_setup.py", line 158, in download_setuptools src = urllib.request.urlopen(url) File "C:\Python31\lib\urllib\request.py", line 121, in urlopen return _opener.open(url, data, timeout) File "C:\Python31\lib\urllib\request.py", line 356, in open response = meth(req, response) File "C:\Python31\lib\urllib\request.py", line 468, in http_response 'http', request, response, code, msg, hdrs) File "C:\Python31\lib\urllib\request.py", line 394, in error return self._call_chain(*args) File "C:\Python31\lib\urllib\request.py", line 328, in _call_chain result = func(*args) File "C:\Python31\lib\urllib\request.py", line 476, in http_error_default raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 404: Not Found
のっとふぁうんど。
サイトを直接確認。
Index of /packages/3.1/s
……ない。つまり、そういうことです。
アンインストールして2.xをインストールするかー。