์ด ๊ธฐ๋ฅ์ ์ฐพ๊ณ ์์๋๋ฐ ์ค๋ช ์์ ์์ด์ ๊ธฐ๋ฅ ์์ฒญ์ ์ฌ๋ ์ค์ ๋๋ค.
Python 2/3 ํธํ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ณ ๊ฐ๋ฅํ ํ ์ต์์ Python 2 ์ง์์ ์ ๊ฑฐํ๋ ํด๊ฒฐ์ฌ๋ฅผ ๋ณด๊ณ ์ถ์ต๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด:
__future__
๊ฐ์ ธ์ค๊ธฐ ์ ๊ฑฐ(์ print_function
)from future import standard_library
๋ฐ standard_library.install_aliases()
ํ ์ ๊ฑฐfrom builtins import *
๋ผ์ธ ์ ๊ฑฐfrom future.utils import python_2_unicode_compatible
์ ๊ฑฐ๊ทธ๋ฌํ ํด๊ฒฐ์ฌ๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ค๋ฉด ๊ทธ๊ฒ์ ๋ํด ์๊ณ ์ถ์ต๋๋ค.
๋ด ๊ณ ๊ฐ ์ค ๋ง์ ์๊ฐ future
๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ Python 3์ผ๋ก ์
๊ทธ๋ ์ด๋ํ ๋ค์ ๊ณง Python 2 ์ง์์ ์ค๋จํ๊ณ ์ด๋ฌํ ํด๊ฒฐ์ฌ๊ฐ ๋งค์ฐ ๋์์ด ๋ ๊ฒ์
๋๋ค.
์กด์ฌํ๋ค๋ฉด ์ ๋ฌธ์ํ๋์ง ์์ ๊ฒ์
๋๋ค. ์๋์ผ๋ก ๋ชจ๋ ์ ๊ฑฐํด์ผ ํ์ต๋๋ค. -3
์ ๊ฐ์ ํ๋๊ทธ์ ํจ๊ป ์๋ ์คํ๋๋ ๊ณ ์ ์ฅ์น๋ฅผ ์ฌ์ฉํ๋ฉด 3๊ฐ์ง ๊ท์ ์ค์์ ๋ํ ๋ฆฌํฉํฐ๋ง๋ง ์๋ฏธํ๊ณ python2 ํธํ์ฑ์ ๋ฌด์ํ ์ ์์ต๋๋ค.
๋ด๊ฐ ์ง์ ์ผ๋ถ ๋ณํ์ ๋ง๋ค๊ณ ์คํฌ๋ฆฝํธ๋ก ๋ฌถ์์ต๋๋ค. ํ์ฌ ์ฌ๊ธฐ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค: https://github.com/purplediane/drop2
์ผ๋ถ ๊ฒน์นจ์ด ์๋ ๊ด๋ จ ๋๊ตฌ(์ฆ, __future__
๊ฐ์ ธ์ค๊ธฐ):
๊ธฐํ ์ฃผ๋ชฉํ ๋งํ ์ฌํญ:
u
์ ๋์ฌ ์ ๊ฑฐclass
์ ์์์ (object)
์ ๊ฑฐsuper()
ํตํ ์
๋ฐ์ดํธmock
๊ฐ์ ธ์ค๊ธฐ ์
๋ฐ์ดํธ์ฆ, sed
๋ํด standard_library
sed
๋ฅผ ์ฌ์ฉํ ์ ์์์ต๋๋ค.
sed -i '' '/.*standard_library.*/d' **/*.py
-from future import standard_library
-standard_library.install_aliases()
import json
import logging
import urllib.parse
๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์๋ ๋์ผํ ์์ ์ ์ํํ ๊ณํ์ ๋๋ค.
.*python_2_unicode_compatible.*
.*implements_iterator.*
from builtins.*
๋๋ ์ด๋ฏธ pyupgrade๋ฅผ ์๊ณ ์๊ณ ๊ทธ๊ฒ์ ์ฌ์ฉํ์ต๋๋ค. ๋งค์ฐ ๋์์ด ๋ฉ๋๋ค.
pyupgrade
(+ ์ฌ์ ์ปค๋ฐ ํํฌ)๋ ์ด๋ฌํ ๋ชฉ์ ์ ์ํ ํ๋ฅญํ ๋๊ตฌ์
๋๋ค. ๋์์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์ด FR์ ๋ซ์ ์ ์์ต๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ด๊ฐ ์ง์ ์ผ๋ถ ๋ณํ์ ๋ง๋ค๊ณ ์คํฌ๋ฆฝํธ๋ก ๋ฌถ์์ต๋๋ค. ํ์ฌ ์ฌ๊ธฐ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค: https://github.com/purplediane/drop2