Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

今年使ってみて良かった、Pythonモジュール、パッケージ、ツール

4,532 views

Published on

今年使ってみて良かった、Pythonモジュール、パッケージ、ツール

Published in: Technology
  • Be the first to comment

今年使ってみて良かった、Pythonモジュール、パッケージ、ツール

  1. 1. 今年使って良かったPythonモ ジュール・パッケージ・ツール pip-tools percol alfred-workflow defaultdict 2014/12/06 Shizuokapy#4 14年12月6日土曜日
  2. 2. 自己紹介 @aoshiman 静岡市で社内SEやってます Pythonは趣味です(2008年位から) Flask製のブログやってます http://blog.aoshiman.org 今年後厄でした 14年12月6日土曜日
  3. 3. 今年はプライベートで殆どPythonを弄るこ とが出来ませんでした。 それでも少しずつ面白そうなことを見つけて 遊んでいました。 今日は今年使ってみて良かった、面白かった Pythonモジュール、パッケージ、ツールを 紹介します。 使ったことある、あるいは使っているものが ある方もいると思いますが生暖かい目で見守 って下さい。 14年12月6日土曜日
  4. 4. pip-tools https://github.com/nvie/pip-tools pipとは Pythonのパッケージ管理ツール(3.4 2.7.9 よりPython本体に同梱) pip-toolsとは pipの補佐的な機能を提供するツー ル 補佐的とは パッケージのアップデート支援(pip-review) パッケージリストの作成(pip-dump) インストール pip install pip-tools(システムの Python、virtual env どちらでも可) 14年12月6日土曜日
  5. 5. pip-review 自身の環境下にあるパッケージのバージョンとPyPIにある パッケージのバージョンを比較する pip-review --auto(-a) でオートマチックに最新版 にアップグレード pip-review --interactive(-i) でパッケージ毎個別に アップグレード出来る 14年12月6日土曜日
  6. 6. pip-dump 自身の環境下にあるパッケージのリストをテキストファイ ル(*requirements.txt)に出力する そのファイルを元に他環境下で同じパッケージ郡を用意す ることが簡単に出来る $ pip install -r requiremrnts.txt 14年12月6日土曜日
  7. 7. pip-dump 基本的な使い方 $ pip install pip-tools $ pip-dump $ cat requirements.txt Flask==0.10.1 gnureadline==6.3.3 ipython==2.3.1 itsdangerous==0.24 Jinja2==2.7.3 MarkupSafe==0.23 pip-tools==0.3.5 Werkzeug==0.9.6 ダンプしたテキストより一括インストール $ pip install -r requirements.txt 14年12月6日土曜日
  8. 8. 直接必要なパッケージとそうでないものと分けたい $ touch dev-requirements.txt $ cat dev-requirements.txt ipython qnureadline $ touch requirements.txt ※空ファイル $ pip-dump $ cat requirements.txt Flask==0.10.1 itsdangerous==0.24 Jinja2==2.7.3 MarkupSafe==0.23 Werkzeug==0.9.6 $ cat dev-requirements.txt gnureadline==6.3.3 ipython==2.3.1 14年12月6日土曜日
  9. 9. Percol https://github.com/mooz/percol percol is an interactive grep tool in your terminal Emacsのanything.elみたいなもの(よく知ら ない) 開発者は日本人(moozさん) Python2.7.xで動く(Python3はブランチ) 似たようなツールにpeco(golang)など 14年12月6日土曜日
  10. 10. Percolの導入と使い方 基本的な使い方 $ sudo pip install percol $ ls | percol zshのコマンド履歴検索に使う よく行くディレクトリを絞り込んで移動 gitのブランチを絞り込んでcheckout 14年12月6日土曜日
  11. 11. alfred-workflow https://github.com/deanishe/alfred-workflow demo 14年12月6日土曜日
  12. 12. alfredとは Mac用 ランチャーアプリ 似たようなアプリにQuicksilverがある Powerpackという有料オプションを買うと 様々な機能がアンロックされる 例:iTunesコントロール、クリップボード履 歴操作、1Password連携 ユーザーが作成したworkflowを使うことが 出来る(今回紹介する箇所) 14年12月6日土曜日
  13. 13. workflowとは alfredをプラットフォームにして 入力->処 理->出力 というGUIアプリを作成出来る(超 概略)workflowはキーワードで呼び出し 使用言語はShellscript Perl PHP Ruby Python等 Packal(workflowのリポジトリ)に397 ものworkflowがある(2014.11.30現 在) 私のおすすめ(デモ) 14年12月6日土曜日
  14. 14. alfred-wokflow https://github.com/deanishe/alfred-workflow Pythonで書かれたalfred workflow作成 用ヘルパーライブラリ アウトプット周り(XML出力や通知)凄く楽 Python3はサポート外(OSXのPythonバ ージョンに合わせていると考えられる) ドキュメント(特にチュートリアル)が超絶 親切(作者はたぶん凄くいい人) https://alfredworkflow.readthedocs.org/en/latest/ 14年12月6日土曜日
  15. 15. 気になった機能 Self-Updating Github Releases との連携 tagを付けたリポジトリにリリースノート を記載出来たり添付ファイルをアップロー ド出来る versionをtagとし、ローカルにある workflowフォルダ内のversionと比較 し、ローカルのversionが古ければ添付さ れたworkflowをダウンロードする https://github.com/deanishe/alfred-workflow/ blob/master/workflow/update.py 14年12月6日土曜日
  16. 16. defaultdict 例えば ‘mississippi’ という単語に使われている 文字の 出現回数をカウントして辞書にしたい Python 3.4.2 (default, Oct 8 2014, 19:29:32) Type "copyright", "credits" or "license" for more information. IPython 2.3.1 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object', use 'object??' for extra details. In [1]: s = 'mississippi' In [2]: d = dict() In [3]: for c in s: ...: d[c] += 1 ...: 14年12月6日土曜日
  17. 17. Pythonの組み込みの辞書機能では、存在しないキーにア クセスしようとすると Keyerror が発生する In [3]: for c in s: ...: d[c] += 1 ...: --------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-3-239838da436f> in <module>() 1 for c in s: ----> 2 d[c] += 1 3 KeyError: 'm' ダイレクトに d[‘m’] を求めてエラーになるのと同じ In [4]: d['m'] --------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-4-267d51a5bba9> in <module>() ----> 1 d['m'] KeyError: 'm' 14年12月6日土曜日
  18. 18. なので 前もってキーの存在を調べたりする In [7]: s = 'mississippi' In [8]: d = dict() In [9]: for c in s: ...: if c in d: ...: d[c] += 1 ...: else: ...: d[c] = 1 ...: In [10]: d Out[10]: {'p': 2, 'i': 4, 's': 4, 'm': 1} ※他にもやり方はあります (d.get(c, 0) or setdefault(c, 0)) 14年12月6日土曜日
  19. 19. defaultdict を使う In [11]: from collections import defaultdict In [12]: d = defaultdict(int) それぞれのキーが最初に出現したとき、マッピングが存在 しない。defaultdictは第一引数に指定したfactory関 数を使ってデフォルト値を作成する。 この場合はintを使っているので、mississippiの各々の 文字が最初に出現したときに 0 を生成する。 In [13]: for c in s: ....: d[c] += 1 ....: In [15]: dict(d) Out[15]: {'p': 2, 'i': 4, 's': 4, 'm': 1} 14年12月6日土曜日
  20. 20. 但し、単純に数え上げるならば、 Counterのほうが... In [18]: from collections import Counter In [19]: c = Counter('mississippi') In [20]: dict(c) Out[20]: {'p': 2, 'i': 4, 's': 4, 'm': 1} 14年12月6日土曜日
  21. 21. defaultdictでtree(木構造)を作る https://gist.github.com/hrldcpr/2012250 In [32]: def tree(): return(defaultdict(tree)) In [33]: d = tree() In [34]: d['japan']['shizuoka-ken']['shizuoka-shi']['aoi-ku'] = 'hoge' In [35]: d['japan']['shizuoka-ken']['shizuoka-shi']['suruga-ku'] = 'fuga' In [36]: d['japan']['shizuoka-ken']['shizuoka-shi']['suruga-ku'] = 'foo' In [37]: d['japan']['shizuoka-ken']['fuzi-shi'] = 'fooo' In [38]: d['japan']['shizuoka-ken']['mishima-shi'] = 'bar' In [39]: pprint(d) {'japan': {'shizuoka-ken': {'fuzi-shi': 'fooo', 'mishima-shi': 'bar', 'shizuoka-shi': {'aoi-ku': 'hoge', 'suruga-ku': 'foo'}}}} 14年12月6日土曜日
  22. 22. defaultdictでtreeを作る② Adaway広告除去リストdomain一覧 (31856件)でドメインツリー作成 コード https://gist.github.com/aoshiman/a3ddec9e5c829bab22c3 結果 https://gist.github.com/aoshiman/c8513d191c7fca666b44 元ネタ http://sonickun.hatenablog.com/entry/2014/07/12/231443 14年12月6日土曜日
  23. 23. (本発表とあまり関係ない) まとめ Web アプリケーションフレームワークやコ マンドラインツール、研究目的等、Python の守備範囲は広い サーバサイドで言えばPaaSがコンテナサポ ートし始めているので(たぶん)どこでも Pythonで書けばよいよ なのでこれからも富士山見ながらPython書 きましょう 14年12月6日土曜日
  24. 24. 良いお年を 14年12月6日土曜日

×