スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Pythonの統合開発環境:spyder(2)

Pythonの開発環境でspyder 2.2.5を少し使ってみた。結構よくできているが、残念ながらローカル変数を表示する機能はサポート予定が当面ないようだ(たぶん、デバッグ機能として、pdbの機能をそのまま使っているのが原因ではなかいと思う。近々の2.3や2.4の拡張項目には入っているみたいなので、そのうちサポートされるかもしれないが、、、)。

Python debugging

に記載されているように、pdbでlocals()や__dict__を表示すれば、内容を表示することは可能だが、折角ソースコードデバッガを使っている意味が半減してしまう、、、。

spyder

以前から使っているPyscripterは、下記のように、ローカル変数も表示可能(ソースにマウスをもっていくとポップアップで表示することも可能)で、しばらくはまだ、Pyscripterを使うとするか?

Pyscripter

FC2 Management

Python統合開発環境:spyder

Pythonの統合開発環境(IDE)としては、以前からDelphiで記述されているPyScripter(場合によりEmacs+pdb)を使っていたが、PyScripterがここ最近更新されていないこともあり、最近話題(?)のWindows/Linuxでも動作するspyderというPythonで記述されたIDEを試しにインストールしてみた。

spyderが紹介されている記事はデータ解析用の環境としてMatplotlib、IPython、pandas等と一緒に紹介されることが多いようだが、単独のデバッグ環境としても、十分の機能を有するみたい。もう少し試用後、Pyscripterから乗り換えようかしら?

【動作環境】
●Windows 8.1(64bit)
●Python 2.7.2(32ビット)

【構築した環境】
spyder==2.2.5
pywin32==216
ipython==2.0.0
matplotlib==1.2.0
numpy==1.6.2
pyzmq==13.0.0
tornado==3.2


【やったこと】
spyder2.2.5のインストール
Python(x,y)、WinPython、Anaconda等のPython Scientific Distributionsを使えば、簡単にインストールできるようだが、今の自分には少し縁遠いここと、周世にmatplotlib等は使っていたので、個別にインストールする方法を選択。以下の インストーラをダウンロードして インストールを実施。

spyder-2.2.5.win32.exe

●PyQtのインストール
インストールするとPythonディレクトリ/Scriptsにspyder.batがインストールされるので、このバッチファイルを実行すると以下のエラーが発生するため、PyQtをインストール。

RuntimeError: Please check Spyder installation requirements:
PyQt4 4.4+ (or PySide 1.1.1+) is required.


PyQtはpipでのインストールには未対応とのことなので、PyQt4 Download からPyQt4-4.10.4-gpl-Py2.7-Qt4.8.5-x32.exeをダウンロードして、インストール。無事にsypderが起動。

●IPythonのインストール
spyderはIPythonとも連携しているので、IPythonもインストールしてみる。

pip install ipython


を実行してインストール後、sypder.batでsypder起動時にpyzmqがないために起動エラーが発生するため、pip pyzmqでインストールを試みるも、自分のMinGwのgccでは以下のようなコンパイルエラーが発生するため、

In file included from bundled\zeromq\src\err.hpp:40:0,

from bundled\zeromq\src\address.cpp:21:

bundled\zeromq\src\windows.hpp:168:21: fatal error: Mstcpip.h: No such file or directory

compilation terminated.

error: command 'gcc' failed with exit status 1


以下のURLからインストーラをダウンロードしてインストール。

https://pypi.python.org/pypi/pyzmq/13.0.0
 pyzmq-13.0.0.win32-py3.3.msi (md5)


合わせて、IPythonで注目のnotebookを起動する時に必要なtornadoを

pip install tornado


でインストール。無事にIpythonからnotebookも起動できるようになった。

Windows 8.1でVMWare Player

Windows8からWindows8.1にバージョンアップ後、久しぶりにVMWare Player 6.0.0上のUbuntueを使ってみたところ、なぜか、うまくネットワークに接続できない。Bridge接続、NAT接続のどちらもダメ。いろいろ調べたところ、VMWare Player 6.0.0には、以下のような問題があるみたい。6.0.1にバージョンアップすることで、すんなり元通りにネットワーク通信ができたが、ちょっと悲しい!

【IT支援部】Windows8.1にしたらVMwareがネットワークに繋がらなくなった
 Bridgeに関するProtocolがWindows8.1にしたら、無くなっているそうです。自分でインストールしたら、6.0.0でもBridge接続すれば、ネットワークにつながるようになりましたが、NATはやっぱだめでした。

Windows 8.1 で VMware Player のNATが動作しない?
VMNet8の設定がNATになっていならしいので、vmnetcfg.exeで再設定必要らしいのですが、VMWare Player6.0.0には梱包されていないらしいので、別途インストール必要らしいです。

VMware Player 6で仮想ネットワークエディタを使う方法(vmnetcfg.exe)
NAT and network Configuration in VM Player 6
 VMWare Worstation 10.0.1からvmnetcfg.exeをコピーしてインストールしても、なぜか起動せず。どうも、末尾のバージョンがあっていないせいで、dllがうまく動作しない模様。dllをいろいろコピーしてみましたが、結局、6.0.1にバージョンアップすることで、全て解決。


Evernoteで7つの習慣式TODO管理

TODO管理ツールとここ最近はWunderlistを使っていたが、昨年末からEvernoteへ徐々に乗換え中。折角なので、「7つの習慣」の


7つの習慣―成功には原則があった!7つの習慣―成功には原則があった!
(1996/12)
スティーブン・R. コヴィー

商品詳細を見る


第三の習慣:「重要事項を優先する」で紹介されているTODO管理もどきを実現することとする。

A=最重要事項(今日必ずすること)
B=重要事項(今日できればすること)
C=選択可能(今日できなくても構わない)


と分類して、1,2,3の数値と共に、優先度で優先順位をつけるそうだ。

最近のEvernoteでは、タグとは別にノートに 「TODO挿入」もできるようで、「リマインダー」 と合わせて使いうことで、結構本格的なTODO管理もできそうな予感。今までいろんなTODO管理ツールを使ってきたが、結局はツールではなく、それをどう自分が使いこなしていくかの方が重要なのだが、今年こそは長続きするかしら、、、???

【EvernoteでTODO管理例】
evernote.png

JSONによるPythonオブジェクトのシリアライズ

以前の JSON Schema でシリアライズ/デシリアライズするサンプルを作成。シリアライズは__dict__を使って簡単にできたが、デシリアライズの方は、なぜかエラーが発生してしまい、結局タプルから属性を切り出す方法になってしまった。いろんなJSONに簡単に対応できるように汎用的に作りたかったのに残念。

●参考にさせて頂いた資料、URL
Storing and Loading Data with JSON
Deserialize a json string to an object in python


#!/usr/bin/env python
# -*- coding: utf-8 -*-

#import simplejson
import json # Ptyhon2.6から標準
import codecs # 日本語ファイルアクセス用
import jsonschema

def validate(data, schema):
try:
jsonschema.validate(data, schema)
# print data
print(json.dumps(data, sort_keys=False, indent=2, ensure_ascii=False) )
except Exception, m: # 何故かValueErrorがキャッチできない!
print m.message

schema ={
"description" : "JSON Schema例", # 詳細な説明
"type" : "array",
"items" :{
"title" : "配列の項目定義", # 簡単な説明
"type" : "object",
"properties" : {
"country" : {
"title" : "国名",
"type" : "string",
"enum" : [u"日本", u"米国"], # 選択
"required": True, # 必須属性
},
"zipCode" : {
"title" : "郵便番号: 3桁-4桁",
"type" : "string",
"pattern" : "^[0-9]{3}-[0-9]{4}$", # 正規表現
"required" : True,
},
"prefecture" : {
"title": "都道府県",
"type" : "string", "minLength": 1, "maxLength": 3, # 文字列長の制限
},
"city" : {
"title" : "市",
"type" : "string"
},
"region" : {
"title" : "オプション:番地",
"type" : "integer", "minimum" : 1, "maximum" : 1000, # 上限、下限
},
"phone" : {
"type" : "string",
"format" : "phone" # フォーマット:電話番号
},
"email" : {
"type" : "string",
"format" : "email" # フォーマット:メールアドレス
},
},
},
"minItems" : 2, # 配列の最小値
"maxItems" : 5, # 配列の最大値
"uniqueItems": True, # 配列要素はユニークであること
}

class Address(object):
def __init__(self, country, zipCode, prefecture, city, region, phone, email):
self.country = country
self.zipCode = zipCode
self.prefecture = prefecture
self.city = city
self.region = region
self.phone = phone
self.email = email

def send(self):
print "Sending an email to %s !", self.email

@classmethod
def json_to_obj(cls, dct):
return Address(dct['country'], dct['zipCode'], dct['prefecture'], dct['city'], dct['region'], dct['phone'], dct['email'])

def __repr__(self):
return "" % (
self.country, self.zipCode, self.prefecture, self.city ,self.region, self.phone, self.email
)

def json_default(o):
if isinstance(o, set):
return list(o)
return o.__dict__

def test6():
global schema

data = [
{ "country" : u"日本", "zipCode" : "123-0000", "prefecture": u"神奈川", "city" : u"横浜", "region" : 999, "phone" : "+302108029409", "email": "taro@instore.jp" },
{ "country" : u"米国", "zipCode" : "123-0001", "prefecture": "AZ", "city" : "Tuson", "region" : 1, "phone" : "+302108029409", "email": "nvah@instore.gr" },
# { "country" : u"日本", "zipCode" : "123-0002"},
]
validate(data, schema)

data = [
Address(u"日本", "123-0000", u"神奈川", u"横浜", 999, "+302108029409", "taro@instore.jp"),
Address(u"米国", "123-0001", "AZ", "Tuson", 1, "+302108029409", "nvah@instore.gr"),
# Address(u"日本", "123-0002")
]
print(json.dumps(data, default=json_default, sort_keys=False, indent=2, ensure_ascii=False))

fp = open("address.json", "w")
fp.write(json.dumps(data, default=json_default, sort_keys=False, indent=2, ensure_ascii=False))
fp.close()

fp = open("address.json")
read_data = json.load(fp, object_hook = Address.json_to_obj)
fp.close()
a0 = read_data[0]
a1 = read_data[1]

print(json.dumps(a0, default=json_default, sort_keys=False, indent=2, ensure_ascii=False))
a0.send()
print(json.dumps(a1, default=json_default, sort_keys=False, indent=2, ensure_ascii=False))
a1.send()

def main():
test6()

if __name__=='__main__':
main()
プロフィール

Author:Zaike Yuki
オブジェクト指向、C++/Java、Python、Eclipse、Android、等に興味を持つソフトウェアエンジニア

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。