O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

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

4.612 visualizações

Publicada em

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

Publicada em: Tecnologia
  • Seja o primeiro a comentar

今年使ってみて良かった、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日土曜日

×