読者です 読者をやめる 読者になる 読者になる

WindowsでPython3.3科学計算用環境を整えてみ…ようとしたんですが

プログラミング scipy Python

 Python2.7から3.3に移行しました。
 このタイミングで移行した理由は、Python3.xは文字コードunicodeに統一されているとか高速化されていると言われてたので前々から移行したかったところに、SciPyなどの科学計算ライブラリが3.3でも動作するようになったと聞いたからです。
参考として以下を読みました。
2.x系と3.x系の違い 
Python 3.3 が間もなくリリースされるので新機能を確認しておく 

 確認したところ、大体のライブラリは動いてるけど、全てが上手くいくわけではないっぽいので、今の時点で移行する必要性があるかどうかはかなり微妙です。おすすめするつもりはありません。

インストール作業

本家からPython3.3本体をダウンロードしてインストールします。
Windows用科学計算ライブラリなどのバイナリファイルは下記から落としてきます。
Unofficial Windows Binaries for Python Extension Packages
入れたもの:NumPy, SciPy, Matplotlib, pandas, Python-igraph
(残念ながら、私の環境ではNLTKはインストールは出来たものの、importの時点でこけました…。networkXに至ってはインストールすら出来ず…)
単純にexeをDLして叩けばインスコ可能です。

Pythonの様々なモジュール入れるためにpipやeasy_installを利用することが多かったと思います。
Python3.3でもそれらを利用できるようにここに従ってインスコ。
(他、pipやeasy_installを代替するpysetupが標準搭載されると聞いたのですがここ見る限り、今回は採用見送ったんですかね)

動作確認

 2.7時代に作ったスクリプトをそのまま色々流して見たのですが、色んな所でこけまくります(メジャーバージョン上がってるので当然と言えば当然ですが)。
 私はよくワードカウントなどするのですが、その際辞書を作ってランダムにキーを取得するなんてことをしてました*1

d={"a":100, "b":200}
d.keys()[random.randint(0,len(d)-1)]

これが動かない。
なぜかというと、keysは2.7ではlistを返してくれたのですが、3系ではviewを返してくれるからです。
なので、同じことしたければ

d={"a":100, "b":200}
list(d.keys())[random.randint(0,len(d)-1)]

と一旦listに変換する必要があります(他何か方法があれば教えて下さい)。


 また、urllibを利用する際、2.7ではimport urllib2としていたのですが、3.3で同じことすると"No module named 'urllib2'"と怒られました。
ここを見るとわかるように、urllib2さんはurllib.request, urllib.errorに変更されたそうです。
なのでfrom urllib.request import urlopenとやればOKです。
今のところ標準的なライブラリで大きくこけたのはこれくらいです。


 で、追加で入れた科学計算系、特にmatplotlibは色々こけまくってます…。未だにどうすれば解決するのかわから無いモノも多く、これといった理由が無い限り、3.3に移行するのはちょっと待った方が良いかなーという感じです。ってかNLTKとNetworkX使えないの本当に痛い…。一体どうすれば…。

まとめ

2.7最高!

後日談

requestsとかBeautifulSoupとかも正常に動いてないことが判明したので2.7に戻しました…

まとめ2

2.7最高!!

*1:下記コードを見て「Pythonの辞書は順序を保証してない」云々というご指摘を何度も頂きましたが、以下の処理は「ランダムに何でもいいから取ってこれば良い」って意図でやっておりますのでご安心ください