おまえらこのライブラリ使ってないの? m9 (2013-07)

2,086 views
2,029 views

Published on

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,086
On SlideShare
0
From Embeds
0
Number of Embeds
447
Actions
Shares
0
Downloads
3
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

おまえらこのライブラリ使ってないの? m9 (2013-07)

  1. 1. おまえらこのライブラリ使ってないの?  m9 ふるかわとおる   @torufurukawa  
  2. 2. お前だれよ? •  ふるかわとおる   •  @torufurukawa   •  #bucho   •  株式会社バスキュール   – TV連動サービス作ってますした  
  3. 3. アンケート結果より... •  仮想環境   •  シェル拡張   •  コーディングスタイル   •  テスト   •  追加は  #pyfes  #m9  で、ツイートしてください。   h8ps://twi8er.com/search?q=%23pyfes%20AND%20%23m9&src=typd  
  4. 4. 仮想環境でインストールし放題 •  複数のプロジェクト   •  ライブラリの競合を避けたい
  5. 5. virtualenv $  virtualenv  .   $  ls   bin          include  lib   $  source  bin/activate   インストールし放題!
  6. 6. venv  (3.x) $  python3.3  -­‐m  venv  .   $  source  bin/activate   インストールし放題!
  7. 7. virtualenvwrapper $  mkvirtualenv  myenv   $  workon  myenv   インストールし放題!
  8. 8. 対話シェル拡張 •  対話シェルだけでは...   •  Python  の対話シェルでもっといろいろやる
  9. 9. ipython $  ipython   Python  2.7  (r27:82500,  Nov    7  2010,  14:17:28)     Type  "copyright",  "credits"  or  "license"  for  more  informaXon.     IPython  0.13.2  -­‐-­‐  An  enhanced  InteracXve  Python.   ?                  -­‐>  IntroducXon  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]:  
  10. 10. In  [1]:  import  random     In  [2]:  random.choice?   Type:              instancemethod   String  Form:<bound  method  Random.choice  of   <random.Random  object  at  0x10183f820>>   File:              /usr/local/Cellar/python/2.7/ lib/python2.7/random.py   Definition:  random.choice(self,  seq)   Docstring:    Choose  a  random  element  from  a   non-­‐empty  sequence.
  11. 11. In  [3]:  random.choice??   Type:              instancemethod   String  Form:<bound  method  Random.choice  of   <random.Random  object  at  0x10183f820>>   File:              /usr/local/Cellar/python/2.7/ lib/python2.7/random.py   Definition:  random.choice(self,  seq)   Source:          def  choice(self,  seq):                  """Choose  a  random  element  from  a   non-­‐empty  sequence."""                  return  seq[int(self.random()  *   len(seq))]    #  raises...  
  12. 12. ls  とか  cd  とか In  [4]:  ls   bin/    lib/    share/   include/  man/    src/     In  [5]:  cd  src   /Users/torufurukawa/works/pyfes201307/src
  13. 13. コマンド実行 In  [6]:  !ps        PID  TTY                      TIME  CMD    2739  8ys000        0:00.84  -­‐zsh    6059  8ys000        0:01.13  /Users/torufurukawa/ works/pyfes201307/bin/python2.7  /Us....  
  14. 14. In  [7]:  !redis-­‐server   [6080]  27  Jul  12:59:29  #  Warning:  no  config  file   specified,  using  the  default  config.  In  order  to   specify  a  config  file  use  'redis-­‐server  /path/to/ redis.conf'   [6080]  27  Jul  12:59:29  *  Server  started,  Redis   version  2.4.10   [6080]  27  Jul  12:59:29  *  The  server  is  now  ready   to  accept  connecXons  on  port  6379  
  15. 15. bpython 誰か書いて
  16. 16. コーディングスタイル •  汚いコードを見つけてくれる   •  自分でチェックしなくていい!
  17. 17. from  urllib  import  urlopen    #  使ってない   def  add(a,  b  ):    #  カッコのまわりに不要スペース          addressess  =  None    #  スペルミス          return  a  +  b  
  18. 18. pep8 $  pep8  spam.py   spam.py:2:1:  E302  expected  2  blank  lines,  found  0   spam.py:2:13:  E202  whitespace  before  ')'  
  19. 19. pyflakes $  pyflakes  spam.py   spam.py:1:  'urlopen'  imported  but  unused   spam.py:3:  local  variable  'addressess'  is  assigned   to  but  never  used
  20. 20. flake8 $  flake8  spam.py   spam.py:1:1:  F401  'urlopen'  imported  but   unused   spam.py:2:1:  E302  expected  2  blank  lines,  found   0   spam.py:2:13:  E202  whitespace  before  ')'   spam.py:3:1:  F841  local  variable  'addressess'  is   assigned  to  but  never  used
  21. 21. misspellings $  misspellings  spam.py   spam.py:3:  addressess  -­‐>  "addresses"
  22. 22. HTTP  リクエスト •  urllib  だけだとちょっと...   •  リクエストを簡単に書きたい   •  レスポンスを簡単に取得したい
  23. 23. requests >>>  import  requests   >>>  r  =  requests.get('h8p://wozozo.jp/')   >>>  r.status_code   200   >>>  r.content   'n<!DOCTYPE  html>n<!-­‐-­‐[if  IEMobile  7  ]><html   class="no-­‐js  iem7"><![endif]-­‐-­‐>n<!-­‐-­‐[if  lt  IE   9]><html  class="no-­‐js  lte-­‐ie8"><![endif]-­‐-­‐>n<!-­‐-­‐[if   (gt  IE  8)|(gt  IEMobile  7)|!(IEMobile)|!(IE)]><!-­‐-­‐ ><html  class="no-­‐js"  lang="en"><!-­‐-­‐<![endif]
  24. 24. >>>  r.json()    #  辞書を返す   {'spam':  'ham',  'foo':  [1,2,3]}    
  25. 25. requests.post(    'h8p://wozozo.jp/',            data={'name':  'xaxtsuxo'},    #  パラメータ            auth=('user',  'pass')    #  Basic  Auth   )
  26. 26. テスト •  テストを手早く書きたい   •  失敗したテスト結果は分かりやすくならん?
  27. 27. py.test •  テストランナー  +  ディスカバラー   •  エラーをきれいに見せてくれる   •  確認しやすい
  28. 28. import  uni8est     class  MyTest(uni8est.TestCase):          def  test(self):                  self.assertEqual(True,  True)     def  test2():          x  =  {'foo':  'bar',  'hoge':  'fuga'}          y  =  {'foo':  'bar',  'hoge':  'wozozo'}          assert  x  ==  y  
  29. 29. $  py.test  mytest.py   =============================  test  session   starts  ==============================   pla{orm  darwin  -­‐-­‐  Python  2.7.0  -­‐-­‐  pytest-­‐2.3.5   collected  3  items       mytest.py  .F   ...  
  30. 30. ...            def  test2():                  x  =  {'foo':  'bar',  'hoge':  'fuga'}                  y  =  {'foo':  'bar',  'hoge':  'wozozo'}   >              assert  x  ==  y   E              assert  {'foo':  'bar',  'hoge':  'fuga'}  ==  {'foo':  'bar',...ge':  'wozozo'}   E                  Hiding  1  idenXcal  items,  use  -­‐v  to  show   E                  Differing  items:   E                  {'hoge':  'fuga'}  !=  {'hoge':  'wozozo'}    
  31. 31. watchdog •  ファイル変更を監視して、コマンド実行 •  継続的テスト  
  32. 32. watchdog $  watchmedo            shell-­‐command            -­‐-­‐pa8erns="*.py"            -­‐-­‐command="py.test            mytest.py"  

×