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.

サードパーティパッケージの歩き方

2,031 views

Published on

http://python-nyumon.connpass.com/event/30003/ で発表した資料

Published in: Technology
  • Login to see the comments

サードパーティパッケージの歩き方

  1. 1. Python の サードパーティパッケージの 歩き方 嶋田健志 (@TakesxiSximada)
  2. 2. 自己紹介 ● 嶋田健志 (@TakesxiSximada) ● フリーランスの Web エンジニア ● Python とか Javascript とか書いてます
  3. 3. 【宣伝】 Python による Web スクレイピング (O'Reilly Japan)
  4. 4. 【宣伝】 Python エンジニア養成読本 ( 技術評論社 )
  5. 5. 本題
  6. 6. アジェンダ ● サードパーティパッケージの歩き方 ● サードパーティパッケージを使おう ● サードパーティパッケージを読もう ● サードパーティパッケージを書こう ● まとめ
  7. 7. サードパーティパッケージを 使おう
  8. 8. サードパーティパッケージとは ? ● 標準ライブラリ以外のライブラリ / パッケージ ● 作者は一般の開発者 ● 完成度は様々
  9. 9. なぜサードパーティパッケージを 使うのか ? ● 作ってあるものを使ったほうが早い ● 完成度が高いものも結構ある
  10. 10. どうやって使うのか
  11. 11. pip ● Python 用のパッケージ管理コマンド ● pip install FOO でパッケージを入れられる
  12. 12. pypi ● https://pypi.python.org/pypi ● たくさんのサードパーティパッケージが登録さ れている ● pip コマンドはこのサイトからパッケージを探し てくる
  13. 13. venv / virtualenv ● Python のライブラリをインストールする先を切 り替える環境を作成する ● Python3 は venv が標準ライブラリに入っている http://docs.python.jp/3/library/venv.html ● Python2 は venv がないので virtualenv を install して 使う https://pypi.python.org/pypi/virtualenv
  14. 14. pypi の更新を追いかける ● Twitter に更新情報が流れるアカウント ● @PythonUpdate ● @py3k
  15. 15. 気になるやつはファボっておく ● 後で使ってみる ● README をなぞるだけならそんなに大変じゃな い ● 使ってみたらファボを外す
  16. 16. アジェンダ ● サードパーティパッケージの歩き方 ● サードパーティパッケージを使おう ● サードパーティパッケージを読もう ● サードパーティパッケージを書こう ● まとめ
  17. 17. サードパーティパッケージを 読もう
  18. 18. なぜサードパーティパッケージを 読むのか ? ● 処理がイメージしやすくなる ● 実装の参考になる ● ソースを読む心理障壁が下がる
  19. 19. どうやって読むのか ?
  20. 20. デバッガで追いかける ● pdb や ipdb ● すべてを知ろうとしない ● サードパーティパッケージのソースにも デバッガを仕掛けていくスタイル
  21. 21. pip install –editable ● エディタブルインストール ● Git のリポジトリを clone してそのコードを利用 する ● サードパーティパッケージ書き換えちゃったけ ど、場所をわすれちゃった ... → git checkout で元 どおり
  22. 22. 要は動かしながら読む
  23. 23. コードリーディング ● その名の通りコードを読むこと ● 読んだ内容をブログに書こう ● コードリーディングは楽しい ● 実装に対して不満に思うところも出てくる ● そういうのは割と受けが良い印象
  24. 24. コードリーディング ● 参考 ● Python で HLS 動画形式の m3u8 ファイルを操作するライブラ リ m3u8 のコードリーディング http://qiita.com/TakesxiSximada/items/ed07eab466a28220ff09 ● Python でパスワードの強度をしらべるライブラリ Safe のコ ードリーディング http://qiita.com/TakesxiSximada/items/de86eb4bbfe11810fd0e
  25. 25. アジェンダ ● サードパーティパッケージの歩き方 ● サードパーティパッケージを使おう ● サードパーティパッケージを読もう ● サードパーティパッケージを書こう ● まとめ
  26. 26. サードパーティパッケージを 書こう
  27. 27. なぜサードパーティパッケージを 書くのか ? ● 書かないとファイルをコピーしてつかう羽目に なっちゃう ● 逆になぜ書かないのか ....
  28. 28. setup.py を書こう ● setup.py とソースコードがあれば pip install できる ● setup.py の書き方は “ setup.py 書き方” で検索
  29. 29. ついでに README も書こう ● 1 ヶ月後の自分のために書く ● 最低限書いておきたい内容 ● install 方法 ● 簡単な使い方のコードスニペット ● これがないと、ちょっと使うのにもコードを読 まなければならなくなってしまう
  30. 30. 私の作成した パッケージの紹介
  31. 31. 問題点 ● 開発ツールがダイアログ操作だった ● 複数のツールを使う必要があったため夜間走行 が非効率だった ● Python で WIndows の GUI 操作をするライブラリは バイナリインストーラでインストールする必要 があった ● できれば Pure Python がいい
  32. 32. Guippy ● https://pypi.python.org/pypi/guippy ● Pure Python ● ctypes モジュールで win32.dll を呼びまくるライブラリに なった ● ダイアログとブラウザをシームレスに行き来できる ● 最初に pypi に公開したパッケージ ● 当時転職活動などなどでデモしまくった w
  33. 33. 問題点 ● 開発用のコマンドがたくさん作成されていたが 散らばっていた ● 開発用コマンドがまとめるような作業になるべ く工数をかけたくなかった
  34. 34. jumon ● https://pypi.python.org/pypi/jumon ● サブコマンドを作成するためのフレームワーク ● Python の dotted name がそのままサブコマンドに適応される ● そのためディレクトリの構造 == サブコマンドの構造になる ● ディレクトリの構造に従い main() 関数を探して実行する ● 勉強会で見せたら「こういうツールいっぱいあるよねー」 って感じだった。そうなのか。。。
  35. 35. 問題点 ● docker で MySQL を起動するときに VOLUME を host のディレクトリにしたい (VOLUME の容量とか 気にしたくないから ) ● そのためには mount するディレクトリの uid や gid などを mysql で期待しているものにしてあげな いといけない
  36. 36. docker-volume ● https://pypi.python.org/pypi/docker-volume ● docker-volume.yml で gid や uid は permission を指定で きるようにした ● 内部では VBoxManage コマンドを実行している ● docker と言いつつ vbox のツールだったのに package 名を docker-*** ってつけちゃったのは失策 だった
  37. 37. その他の作成したパッケージ ● csvorm – CSV用O/RMapper https://pypi.python.org/pypi/csvorm/ ● Azoth -sqlalchemy用のutility https://pypi.python.org/pypi/azoth ● vjson – JSONSchemaでvalidationの機能付きjsonモジュール https://pypi.python.org/pypi/vjson/ ● Pywad – selenium.webdriverのPytthon用testフレームワーク https://pypi.python.org/pypi/pywad/ ● dqn -Doxygenで出力したXMLをSphinx用のReST形式に変換する https://pypi.python.org/pypi/dqn/ ● scaff – Pythonパッケージのscaffoldingツール https://pypi.python.org/pypi/scaff
  38. 38. アジェンダ ● サードパーティパッケージの歩き方 ● サードパーティパッケージを使おう ● サードパーティパッケージを読もう ● サードパーティパッケージを書こう ● まとめ
  39. 39. まとめ ● 基本的なサードパーティパッケージの使い方を説明した ● 更新情報をどのように取得できるかを説明した ● デバッガとそれを使うときのちょっとしたコツを紹介した ● “ コードリーディングやってね”と言った ● パッケージ化のメリットとその方法を少し紹介した ● 自分が作ったパッケージを紹介した
  40. 40. みんなやろうよ Python おわり

×