.. _chap2to3: ========================================== \ :py:mod:`2to3`\ 繝��繝ォ縺ョ菴ソ縺�婿 ========================================== :py:mod:`2to3`\ 縺ョ讎りヲ� +++++++++++++++++++++++++++++++++++++++++++++++++ .. |2to3| replace:: :py:mod:`2to3` .. |fixer| replace:: https://docs.python.org/ja/3/library/2to3.html#fixers |2to3| 縺ッPython縺ィ蜈ア縺ォ繧、繝ウ繧ケ繝医�繝ォ縺輔l繧� **讓呎コ也噪縺ェ繝��繝ォ** 縺ァ縲� 縺昴�蜷阪�騾壹jPython2蜷代¢縺ョ繧ス繝シ繧ケ繧ウ繝シ繝峨r縲 ̄ython3蟇セ蠢懊�繧ス繝シ繧ケ繧ウ繝シ繝峨↓ 螟画鋤縺励※縺上l縺セ縺吶ょセ後↓隱ャ譏弱☆繧� :py:mod:`future` 繝「繧ク繝・繝シ繝ォ繧る。樔シシ縺ョ讖溯�繧呈戟縺、縺ヲ縺�∪縺�(:any:`future_module` 蜿ら�)縲� \ |2to3|\ 縺ッpython2蟇セ蠢懊さ繝シ繝峨rpython3蟇セ蠢懊さ繝シ繝峨↓ 螟画鋤縺吶k髫帙↓蠢�ヲ√↑螟画峩縺ョ縺サ縺ィ繧薙←縺ォ蟇セ蠢懊@縺ヲ縺�∪縺吶′縲∬凶蟷イ縺ョ謇狗峩縺励r 蠢�ヲ√→縺吶k蝣エ蜷医′縺ゅj縺セ縺吶� 縺励°縺励↑縺後i縲 ̄ython2蜷代¢繧ス繝シ繧ケ繧ウ繝シ繝峨r Python3蟇セ蠢懊↓縺吶k轤コ縺ョ譛蛻昴�荳豁ゥ縺ィ縺励※縺ッ蠢��医�繝��繝ォ縺ァ縺吶� :py:mod:`future` 繝「繧ク繝・繝シ繝ォ縺ョ futureize 繧ウ繝槭Φ繝峨d Modernize 繧ウ繝槭Φ繝峨b蜀�Κ縺ァ縺ッlib2to3縺ョ讖溯�繧剃スソ縺」縺ヲ縺�∪縺吶� .. hint:: 蜿りザRL :name: future 繝「繧ク繝・繝シ繝ォ縺ォ縺、縺�※縺ョ繝峨く繝・繝。繝ウ繝�(URL) `python-modernize <https://python-modernize.readthedocs.io/en/latest/>`_ `Automatic conversion to Py2/3 <https://python-future.org/automatic_conversion.html>`_ `How to port Python 2 Code to Python 3 <https://docs.python.org/ja/3/howto/pyporting.html>`_ :py:mod:`2to3`\ 縺ョ蝓コ譛ャ逧�↑菴ソ縺�婿 +++++++++++++++++++++++++++++++++++++++++++++++++ |2to3|\ 縺悟、画峩縺輔l縺滓枚豕輔�縺ゥ繧後↓蟇セ蠢懊@縺ヲ縺�k縺九�縲� .. code-block:: bash 2to3 -l 繧貞ョ溯。後☆繧九%縺ィ縺ァ遒コ隱阪〒縺阪∪縺吶� 縺薙�譁�ォ�菴懈�譎ゅ↓螳溯。後@縺溘→縺薙m縲�52縺ョ螟画鋤鬆�岼�亥、画鋤繧オ繝悶�繝ュ繧ー繝ゥ繝�縺ォ蟇セ蠢懊@縺ヲ縺�k�峨′謖吶£繧峨l縺セ縺励◆縲� [#]_ .. [#] 2to3-3.10縺ァ繧ゅ%縺ョ謨ー(52)縺ッ蜷後§縺ァ縺励◆縲� .. hlist:: :columns: 5 * apply * asserts * basestring * *buffer* * dict * except * exec * execfile * exitfunc * filter * funcattrs * future * getcwdu * has_key * *idioms* * import * imports * imports2 * input * intern * isinstance * itertools * itertools_imports * long * map * metaclass * methodattrs * ne * next * nonzero * numliterals * operator * paren * print * raise * raw_input * reduce * reload * renames * repr * *set_literal* * standarderror * sys_exc * throw * tuple_params * types * unicode * urllib * *ws_comma* * xrange * xreadlines * zip 縺薙l繧峨�螟画鋤鬆�岼縺ッ "``-f``"繧ェ繝励す繝ァ繝ウ繧�"``-x``"繧ェ繝励す繝ァ繝ウ繧定ソス蜉�縺吶k縺薙→縺ァ縲∵�遉コ逧�↓螟画鋤鬆�岼縺ォ譛牙柑蛹厄シ冗┌蜉ケ蛹悶r謖�ョ壹〒縺阪∪縺吶� 縺薙l繧峨�螟画鋤鬆�岼縺ョ縺�¥縺、縺具シ� *buffer*, *idioms*, *set_lieteral*, *ws_comma* )縺ッ繧ェ繝励す繝ァ繝翫Ν縺ェ螟画鋤鬆�岼縺ィ縺ェ縺」縺ヲ縺翫j縲�壼クク縺ッ辟。蜉ケ蛹悶&繧後※縺�∪縺吶� 縺薙l繧峨�螟画鋤鬆�岼縺ォ繧医k邨先棡縺ッ縲∝宍蟇�↓遲我セ。縺ェ繝励Ο繧ー繝ゥ繝�繧剃ク弱∴繧玖ィウ縺ァ縺ッ辟。縺�%縺ィ縺九i縲√が繝励す繝ァ繝翫Ν縺ェ螟画鋤鬆�岼縺ィ縺ェ縺」縺ヲ縺�k繧医≧縺ァ縺吶� \ ``-f``\ 繧剃スソ縺」縺ヲ螟画鋤鬆�岼繧呈欠螳壹☆繧九→縲∵�遉コ逧�↓謖�ョ壹@縺溷、画鋤鬆�岼縺�縺代′譛牙柑蛹悶&繧後∪縺吶よ里螳壹�螟画鋤鬆�岼縺ォ螟画鋤鬆�岼繧定ソス蜉�縺吶k縺ォ縺ッ縲� .. code-block:: bash 2to3 -f all -f <螟画鋤鬆�岼蜷�> . 縺ィ縺励∪縺吶� 螟画鋤鬆�岼(螟画鋤繝励Ο繧ー繝ゥ繝�) ------------------------- 荳翫↓縺ゅ£縺溷、画鋤鬆�岼(apply,...) 縺ョ蜀�ョケ縺ッ縲∽セ九∴縺ー \ https://docs.python.org/ja/3/library/2to3.html#fixers\ 縺ォ隱ャ譏弱&繧後※縺�∪縺吶� 縺薙l繧峨�螟画鋤繝励Ο繧ー繝ゥ繝�縺ョ縺�■縲� ``imports/imports2`` 縺ッ ``python2`` 縺九i ``python3`` 縺ク縺ョ遘サ陦梧凾縺ォ繝「繧ク繝・繝シ繝ォ蜷阪′螟画峩縺輔l縺溘Δ繧ク繝・繝シ繝ォ(萓九∴縺ーTkinter -> tkinter)縺ォ蟇セ蠢懊@縺ヲ縺上l縺セ縺吶� imports縺ァ縺ッ縲ゝkinter, FileDialo, Tix, ttk 縺ェ縺ゥ縺ョTk髢「菫ゅ�繝「繧ク繝・繝シ繝ォ縲‥bm縺ォ髢「騾」縺励◆繝「繧ク繝・繝シ繝ォ, xmlrpc繧オ繝シ繝宣未菫ゅ�繝「繧ク繝・繝シ繝ォ縲� httplib繧ЗTTPServer縺ォ髢「騾」縺励◆繝「繧ク繝・繝シ繝ォ縺ェ縺ゥ縺ォ蟇セ蠢懊@縺ヲ縺�∪縺吶� 縺セ縺溘(mports2縺ァ縺ッwhichdbm, anydbm縺ョ菴ソ逕ィ縺慧bm繝「繧ク繝・繝シ繝ォ繧剃スソ縺�h縺�↓螟画峩縺輔l縺セ縺吶� imports縺ィimports2縺ォ蛻�屬縺輔l縺ヲ縺�k縺ョ縺ッ縲�"蜊倥↓謚陦鍋噪縺ェ蛻カ邏��縺溘a" 縺�縺昴≧縺ァ縺吶� ``urllib`` 縺ォ縺、縺�※縺ッ ``imports`` 縺ィ縺ッ蛻・縺ォ螟画鋤繝励Ο繧ー繝ゥ繝� ``urllib``��fix_urllib.py)縺檎畑諢上&繧後※縺�∪縺吶� ``idioms`` 螟画鋤繝励Ο繧ー繝ゥ繝�縺ッ縲�"Python 繧ウ繝シ繝峨r繧医j Python 繧峨@縺�嶌縺肴婿" 縺ォ縺吶k縺�¥縺、縺九�螟牙ス「繧定。後>縺セ縺吶� object縺ョ蝙欺 :code:`type(obj)`\ 縺ィType繧ェ繝悶ず繧ァ繧ッ繝�\ :code:`T`\ 縺ィ縺ョ 豈碑シ�r縲∝庄閭ス縺ェ縺ィ縺薙m縺ァ縺ッ縲― :code:`isInstance(obj,T)`\ 縺ォ鄂ョ縺肴鋤縺医k縲� \ :code:`while 1:`\ 繧箪 :code:`while True:`\ 縺ォ鄂ョ縺肴鋤縺医k縲� 蜿ッ閭ス縺ェ蝣エ謇縺ァ縺ッ\ :code:`sorted(EXPR)`\ 繧剃スソ縺�∫ュ峨�螟画鋤繧定。後>縺セ縺吶� Tab縺ィ繧ケ繝壹�繧ケ ------------------ http://python3porting.com/differences.html#index-14 縺ォ縺ッ谺。縺ョ險倩シ峨′縺ゅj縺セ縺吶� In Python 2 a tab will be equal to eight spaces as indentation, so you can indent one line with a tab, and the next line with eight spaces. This is confusing if you are using an editor that expands tabs to another number than eight spaces. In Python 3 a tab is only equal to another tab. This means that each indentation level has to be consistent in its use of tabs and spaces. If you have a file where an indented block sometimes uses spaces and sometimes tabs, you will get the error TabError: inconsistent use of tabs and spaces in indentation. 縺、縺セ繧翫}ython2縺ァ縺ッ 荳縺、縺ョ繝悶Ο繝�け荳ュ縺ァ tab縺ィspace繧呈キキ蝨ィ縺励※繧ゅ》ab縺ィspace縺ョ髢「菫�( 1 tab = 8 spaces)繧剃スソ縺」縺ヲ繝悶Ο繝�け蜀� 縺ョ蜷�。後�蟋九∪繧翫′荳閾エ縺励※縺�l縺ー蝠城。後�縺ゅj縺セ縺帙s縺ァ縺励◆縲� 荳譁ケpython3 縺ァ縺ッ縲∝酔縺倥ヶ繝ュ繝�け縺ョ荳ュ縺ァ縺ッ縲》ab縺ィ繧ケ繝壹�繧ケ縺ョ謨ー縺ィ菴咲スョ縺御ク閾エ縺励※縺�k蠢�ヲ√′縺ゅj縺セ縺吶� 縺薙�縺溘a縲∝酔縺倥ヶ繝ュ繝�け蜀�〒tab縺ィ繧ケ繝壹�繧ケ縺ョ謨ー縺檎焚縺ェ繧玖。後′縺ゅk繧ケ繧ッ繝ェ繝励ヨ縺ァ縺ッ縲}ython2縺ァ縺ッ蜍穂ス懊☆繧九¢繧後←縲}ython3縺ァ縺ッ蜍穂ス懊@縺ェ縺�%縺ィ縺ォ縺ェ繧翫∪縺吶� TAB縺ィ遨コ逋ス縺ョ豺キ蝨ィ縺ッ繧ィ繝�ぅ繧ソ縺ェ縺ゥ縺ョ迺ー蠅��驕輔>縺ォ繧医▲縺ヲ縲∬ヲ九°縺台ク翫�讒矩�縺ィ Python繧、繝ウ繧ソ繝励Μ繧ソ縺九i縺ソ縺滓ァ矩�縺檎焚縺ェ繧句�エ蜷医′縺ゅj縺セ縺吶� 縺薙l縺ッpython2縺ォ縺翫>縺ヲ繧ょ酔讒倥〒縺吶�縺ァ縲}ython2/python3縺ォ縺九°繧上i縺啜AB縺ィ遨コ逋ス縺ョ豺キ蝨ィ縺ッ驕ソ縺代※縺翫¥縺ョ縺悟セ礼ュ悶〒縺吶� 縺。縺ェ縺ソ縺ォ遘∬�霄ォ縺ッemacs縺ョPython-mode繧剃スソ縺аython繝励Ο繧ー繝ゥ繝�繧帝幕逋コ縺励∪縺吶� 豁、縺ョ迺ー蠅�〒縺ッ縲√く繝シ繝懊�繝峨°繧峨�TAB蜈・蜉帙�隍�焚縺ョ遨コ逋ス縺ォ鄂ョ縺肴鋤縺医※縺上l縺セ縺吶� 繝�ヵ繧ゥ繝ォ繝医�4蛟九�遨コ逋ス縺ァ縺吶′縲√%繧後r螟画峩縺吶k縺薙→繧ょ庄閭ス縺ァ縺�(Preference 縺ァ\ ``Python Indent Offset``\ 繧貞、画峩縺吶k)縲� 螟画峩驛ィ蛻��遒コ隱� --------------------- |2to3|\ 繧貞�蜉帙r謖�ョ壹☆繧九が繝励す繝ァ繝ウ繧偵▽縺代★縺ォ螳溯。後☆繧九%縺ィ縺ァ縲� |2to3|\ 縺悟刈縺医k螟画峩繧壇iff蠖「蠑上�蜃コ蜉帙〒遒コ隱阪〒縺阪∪縺吶� .. code-block:: bash 2to3 *.py 縺ゅk縺�� .. code-block:: bash 2to3 . 縺ァ迴セ蝨ィ縺ォ繝�ぅ繝ャ繧ッ繝医Μ縺ォ縺ゅkpython繧ウ繝シ繝峨〒蠢�ヲ√↑螟画鋤蜀�ョケ繧堤「コ隱阪@縺セ縺吶� 蠢�ヲ√↓蠢懊§縺ヲ縲~`-f``縺ゅk縺��``-x``繧ェ繝励す繝ァ繝ウ繧偵▽縺代※螟画峩鬆�岼縺ョ譛牙柑蛹厄シ冗┌蜉ケ蛹悶r隧ヲ陦後@縺ヲ隕九∪縺吶� 譁ー縺励>繝�ぅ繝ャ繧ッ繝医Μ縺ォPytho3蟇セ蠢懊た繝シ繧ケ繧ウ繝シ繝峨r菴懈�縺吶k縲� ---------------------------------------------------------------------------------------------------- |2to3|\ 縺ォ縺ッ讒倥�↑繧ェ繝励す繝ァ繝ウ縺檎畑諢上&繧後※縺�∪縺吶′縲∵ャ。縺ョ繧キ繧ァ繝ォ繧ウ繝槭Φ繝� .. code-block:: bash mkdir ../PY3 2to3 -W -n -o ../PY3 . 繧堤衍縺」縺ヲ縺�l縺ー縲∵怙菴朱剞縺ョ逕ィ縺ッ雜ウ繧翫k縺ァ縺励g縺�ゅ%縺ョ繧ウ繝槭Φ繝峨�縲� python2縺ョ繧ス繝シ繧ケ繧ウ繝シ繝峨�繝�ぅ繝ャ繧ッ繝医Μ縺ォ迴セ蝨ィ螻�k縺ィ縺励※縲� #. Python3逕ィ縺ョ菴懈・ュ繝�ぅ繝ャ繧ッ繝医Μ../PY3繧剃ス懈�縺励�(mkdir ../PY3) #. 縺昴�繝�ぅ繝ャ繧ッ繝医Μ縺ォ迴セ蝨ィ縺ョ繝�ぅ繝ャ繧ッ繝医Μ縺ォ縺ゅk蜈ィ縺ヲ縺ョPython繧ス繝シ繧ケ繧ウ繝シ繝峨r\ |2to3|\ 縺ァ蠢�ヲ√↑蝣エ蜷医↓縺ッ縲 ̄ython3蜷代¢縺ォ螟画鋤縺励�(|2to3|\ ) #. 螟画鋤縺ョ蠢�ヲ√�辟。縺�ヵ繧。繧、繝ォ繧貞性繧√※(-W -n) #. 譁ー縺励>繝�ぅ繝ャ繧ッ繝医Μ(../PY3)縺ォ譖ク縺榊�縺励∪縺吶�(-o ../PY3) #. ``-n`` 繧ェ繝励す繝ァ繝ウ縺ッ縲√が繝ェ繧ク繝翫Ν縺ョPython2蜷代¢繧ウ繝シ繝峨rbackup縺ィ縺励※菴懈�縺励↑縺�%縺ィ繧呈欠螳壹@縺ヲ縺�∪縺吶� ``-n`` 繧ェ繝励す繝ァ繝ウ縺ッ ``-o`` 繧ェ繝励す繝ァ繝ウ 繧剃スソ縺�圀縺ォ縺ッ蠢��医→縺ェ縺」縺ヲ縺�∪縺吶� \ |2to3|\ 繧ウ繝槭Φ繝峨�隧ウ邏ー縺ッ縲� .. code-block:: bash 2to3 --help 縺ァ遒コ隱阪〒縺阪∪縺吶� mercurial縺ェ縺ゥ繧剃スソ縺」縺ヲ邂。逅�@縺ヲ縺�k蝣エ蜷� ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 繧ス繝シ繧ケ繧ウ繝シ繝峨r mercurial 縺ェ縺ゥ縺ョ邂。逅�ヤ繝シ繝ォ繧剃スソ縺」縺ヲ 邂。逅�@縺ヲ縺�k蝣エ蜷医↓縺ッ縲√ヶ繝ゥ繝ウ繝√↑縺ゥ縺ョ讖溯�繧剃スソ縺」縺ヲ縲}ython3迚医� 髢狗匱繧帝イ繧√k縺薙→縺瑚�∴繧峨l縺セ縺吶� .. code-block:: bash mkdir PY3 cd PY3 hg clone <repository> . 縺ォ繧医▲縺ヲ縲∫樟蝨ィ縺ョ繝舌�繧ク繝ァ繝ウ縺ョ繧ウ繝斐�繧剃ス懈・ュ繝�ぅ繝ャ繧ッ繝医Μ(PY3)縺ォ菴懈�縺励∪縺吶ゅ%縺薙〒縲� .. code-block:: bash 2to3 -w -n . 繧貞ョ溯。後☆繧九→縲 ̄ython3縺ク縺ョ螟画峩縺悟ソ�ヲ√↑繝輔ぃ繧、繝ォ縺�縺代′\ |2to3|\ 縺ォ繧医▲縺ヲ螟画峩縺輔l縺セ縺吶� 螟画峩蜑阪�繝輔ぃ繧、繝ォ繧偵ヰ繝�け繧「繝��縺ィ縺励※谿九@縺ヲ鄂ョ縺阪◆縺��エ蜷医↓縺ッ縲� .. code-block:: bash 2to3 -w 縺ィ縺励∪縺吶ゅb縺」縺ィ繧ゅ”g縺ァ邂。逅�@縺ヲ縺�k縺ョ縺ァ縺ゅl縺ー縲”g diff縺ァ隕九k縺薙→縺後〒縺阪k縺ョ縺ァ縲√≠縺セ繧雁ソ�ヲ√↑辟。縺�h縺�↓諤昴o繧後∪縺吶� setup 繝��繝ォ縺ィ縺ョ騾」謳コ ------------------------- setuptools繧剃スソ縺」縺殃nstall script縺ァ縺ッ縲~`use_2to3`` 繧ェ繝励す繝ァ繝ウ 繧定ィュ螳壹☆繧九%縺ィ縺ァ縲≫捏etup.py intall"螳溯。梧凾縺ォ閾ェ蜍慕噪縺ォ\ |2to3|\ 繧帝←逕ィ縺励※縺九i繧、繝ウ繧ケ繝医�繝ォ縺吶k縺薙→縺後〒縺阪∪縺吶� 蠕後〒隕九k繧医≧縺ォ縲-2to3|\ 縺ァ閾ェ蜍募、画鋤縺励◆繝励Ο繧ー繝ゥ繝�縺継ython3縺ァ縺ッ諢丞峙縺励◆蜍穂ス懊→縺ェ繧峨↑縺��エ蜷医′縺ゅk縺薙→縺九i縲√◎縺ョ譛臥畑諤ァ縺ッ縺ゅ∪繧顔┌縺��縺九b縺励l縺セ縺帙s縲� setuptools 縺ョ繝峨く繝・繝。繝ウ繝医〒繧� .. epigraph:: Setuptools provides a facility to invoke 2to3 on the code as a part of the build process, by setting the keyword parameter use_2to3 to True, but the Setuptools project strongly recommends instead developing a unified codebase using six, future, or another compatibility library. -- setuptools 45.2.0 documentation 縺ィ縺ェ縺」縺ヲ縺�∪縺吶ゆク闊ャ逧�↓縺ッ縲√%縺ョ險倩ソー縺ォ繧りァヲ繧後i繧後※縺�k :py:mod:`six` 縺ゅk縺�� :py:mod:`future` 縺ェ縺ゥ縺ョ繝「繧ク繝・繝シ繝ォ繧剃スソ縺�%縺ィ縺梧耳螂ィ縺輔l縺ヲ縺�∪縺吶ょソ�ヲ√↑螟画峩縺ョ謨ー縺悟ー代↑縺��エ蜷医↓縺ッ縲∵怏蜉ケ縺ェ譁ケ豕輔〒縺吶�縺ァ縲√ム繝。繧ゅ→縺ァ荳蠎ヲ隧ヲ縺励※隕九k縺�縺代�萓。蛟、縺ッ譛峨j縺昴≧縺ァ縺吶�