Pythonで書かれたマイクロサービスを2to3した
by
iwamot
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Pythonで書かれたマイクロサービスを 2to3した 2022-04-14 みんなのPython勉強会 #80 懇親会 https://startpython.connpass.com/event/242556/ Takashi Iwamoto (@iwamot)
Slide 2
Slide 2 text
技術的負債を解消したくて転職した 昨夏、AWS Japanを辞めてENECHANGE株式会社に転職した 面接時に「技術的負債の解消に取り組みたい」と明言した 内定をもらえ、負債の解消がミッションのひとつとなった
Slide 3
Slide 3 text
Python 2のコードがあった Elastic BeanstalkのDockerコンテナで動いているFlaskアプリ Lambdaに移行すればコストを減らせる LambdaではPython2のサポートが終わっている
Slide 4
Slide 4 text
Python 3に上げることにした 「移行に取り組みたい」と手を挙げ、OKをもらった
Slide 5
Slide 5 text
テストを走らせたらfailした 9%のテストケースがfailした パフォーマンス向上のためのコード改善が原因だった
Slide 6
Slide 6 text
passするように直した テストケースとソースコードを修正した カバレッジは80%と高めだった
Slide 7
Slide 7 text
2to3というツールがあることを知った 2to3 - Python 2 から 3 への自動コード変換 https://docs.python.org/ja/3/library/2to3.html Python 3の公式Dockerイメージにも2to3が含まれている $ docker run -it --rm python:3 2to3 --help | head -1 Usage: 2to3 [options] file|dir ...
Slide 8
Slide 8 text
2to3を実行したら、色々変換された (1) dict - dict.values() + list(dict.values()) - dict.iteritems() + dict.items() except - except Exception, e: + except Exception as e:
Slide 9
Slide 9 text
2to3を実行したら、色々変換された (2) has_key - dict.has_key(key) + key in dict import - import weather + from . import weather
Slide 10
Slide 10 text
2to3を実行したら、色々変換された (3) imports - import ConfigParser + import configparser print - print 'foo' + print('foo')
Slide 11
Slide 11 text
2to3を実行したら、色々変換された (4) unicode - u'foo' + 'foo' xrange - range(1, 13) + list(range(1, 13))
Slide 12
Slide 12 text
必要ない変換は元に戻した たとえばdictによる変換は不要だった - list(dict.values()) + dict.values() Python 2では dict.values() はリストを返す Python 3では dict.values() はビューオブジェクトを返す ビューオブジェクトのまま処理できるなら、そのままでよい
Slide 13
Slide 13 text
あとは手作業で進めた 依存パッケージのアップグレード テストがfailする部分の修正 Lambda対応
Slide 14
Slide 14 text
2to3があってよかった 初見から数日で移行できた こういう移行ツールが用意されていると助かる
Slide 15
Slide 15 text
負債に困ったらご相談ください Spot Resourceという屋号で副業しています https://iwamot.github.io/