2to3
ã¯çŸåšVirtualenvã«ãã£ãŠãªãã€ã¬ã¯ããããŠããªãããã§ãã ãŠãŒã¶ãŒãäºæããªãã±ãŒã¹ã«ã€ããŠã¯ã httpsïŒ//travis-ci.community/t/2to3-command-not-found-in-virtualenv-in-bionic/4495ãåç
§ããŠãã ãããéåžžã¯PATH
ã§å©çšã§ããããã§ãã Linuxã€ã³ã¹ããŒã«ã®å Žåã¯
Py2ãEOLã«è¿ã¥ããŠããããšãèãããšããã®éèŠã¯é«ãŸãã§ãããã
$ which 2to3
/home/vmuser/.pyenv/shims/2to3
$ pyenv install 3.6.9
<...>
$ ~/.pyenv/versions/3.6.9/bin/python -m pip install virtualenv
Collecting virtualenv
Downloading https://files.pythonhosted.org/packages/db/9e/df208b2baad146fe3fbe750eacadd6e49bcf2f2c3c1117b7192a7b28aec4/virtualenv-16.7.2-py2.py3-none-any.whl (3.3MB)
100% |ââââââââââââââââââââââââââââââââ| 3.3MB 1.3MB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-16.7.2
$ ~/.pyenv/versions/3.6.9/bin/python -m virtualenv test
Using base prefix '/home/vmuser/.pyenv/versions/3.6.9'
New python executable in /home/vmuser/test/bin/python
Installing setuptools, pip, wheel...
done.
$ . test/bin/activate
(test) $ which 2to3
/home/vmuser/.pyenv/shims/2to3
äºæ³ãããåäœã¯ãæåŸã®which
ãvirtualenvå
ã®ãã¹ãè¿ãããšã§ãããããšãã°ã python
ãpip
ã®å Žåãšåãã§ãã
pip list
ã®åºå$ ~/.pyenv/versions/3.6.9/bin/python -m pip list
Package Version
---------- -------
pip 18.1
setuptools 40.6.2
virtualenv 16.7.2
ããã¯ãpyenv rehashãå®è¡ããåŸãçºçããŸããïŒ
pyenvã®åããã·ã¥ã®åãŸãã¯åŸã«å®è¡ãããšãshimã¯äœãå®è¡ããŸããïŒ
ããã¯pyenvãšé¢ä¿ããããšæããŸãã
ããã¯ãpyenv rehashãå®è¡ããåŸãçºçããŸããïŒ
ã¯ãã
pyenvã®åããã·ã¥ã®åãŸãã¯åŸã«å®è¡ãããšãshimã¯äœãå®è¡ããŸããïŒ
$ïŒ 2to3
ãå«ãapt
ããã±ãŒãžãã€ã³ã¹ããŒã«ãããŠããªãsystem
PythonãéžæãããŠããããã
pyenv: 2to3: command not found
The `2to3' command exists in these Python versions:
<list>
äž¡æ¹ã®å Žåã«ãããŠã
ããã¯pyenvãšé¢ä¿ããããšæããŸãã
pyenv
ã¯é¢ä¿ãããŸããã äºæ³ãããåäœã¯ã2çªç®ã®which
ãpython
ã®å Žåãšåæ§ã«ã virtualenv
ã®ã·ã ãè¿ãããšã§ããã ãã°ã¯ã virtualenv
ãäœæããªãããšã§ãã ïŒããã¯æããã ãšæããŸãããããããããã§ã¯ãããŸãããïŒ
ãããããããŸãã...ã¢ã¯ãã£ããŒã·ã§ã³åŸã®PATH
äœã§ããïŒ
ïŒç§ã¯ä»ãããåçŸã§ãããã·ã³ã䜿çšããŠããŸããïŒ
(test) vmuser<strong i="5">@ubuntuvm</strong>:~$ echo $PATH
/home/vmuser/test/bin:/home/vmuser/.rbenv/shims:/home/vmuser/.rbenv/bin:/home/vmuser/.pyenv/shims:/home/vmuser/.pyenv/bin:/home/vmuser/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/vmuser/.rvm/bin
(test) vmuser<strong i="6">@ubuntuvm</strong>:~$ ls /home/vmuser/test/bin
activate activate_this.py pip python3
activate.csh activate.xsh pip3 python3.6
activate.fish easy_install pip3.6 python-config
activate.ps1 easy_install-3.6 python wheel
åé¿çãšããŠãvirtualenvå
ã§åçã®æ©èœãåããpython -m lib2to3
ã䜿çšã§ããŸãã
/ccãã®ä»ã®@pypa/ virtualenv-ã³ããã¿ãŒã¯ãã¹ã¯ãªãããäœæãããšãã«æšæºã©ã€ãã©ãªããvirtualenvã«ã¹ã¯ãªãããè¿œå ããããšããå§ãããŸãã
ç§ã¯çžåããã
ç§ã¯-0.5ã§ãã ãããŸã§åé¡ãšããŠãã©ã°ãç«ãŠãããŠããªãã£ãã®ã¯äœåãªæ··ä¹±ãªã®ã§ãå¿
èŠã«ãªãããšã¯ãã£ãã«ãªããšæããŸãã Python2ãEOLã«è¿ã¥ããŠããããšãããã§éããçããšã¯æããŸããã äœåãªã¹ã¯ãªããã¯ãWindowsã®éä»®æ³ç°å¢ã§ãPATH
ã«ãªããããããããååšãããšããæåŸ
ãæ®éçã§ãããšã¯éããŸããã
ããã¯äžè¬çãªã¢ãããŒããšããŠæ©èœããã¯ãã ãšæããŸãã ãã¹ãç°å¢ã®ãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã¯ãä»®æ³ç°å¢ã¬ãã«ã§å©çšã§ããå¿ èŠããããŸãã
Python2ãEOLã«è¿ã¥ããŠããããšãããã§éããçããšã¯æããŸããã
+1
ããã¯ããã§ãç§ã®é¢å¿äºã§ã¯ãããŸããã :)
è¿œå ã®ã¹ã¯ãªããã¯ãWindowsã®éä»®æ³ç°å¢ã§ã
PATH
ã«ã¯ãããŸãã
ããŒã ãããã¯Scripts/
ãã£ã¬ã¯ããªã«ãããŸãããïŒ ç§ã®ç解ã§ã¯ãçŸåšã®python.orgã€ã³ã¹ããŒã©ãŒã¯ãã®ãã£ã¬ã¯ããªãPATHã«è¿œå ãããããå®è¡ã§ããŸãã
ãã¹ãç°å¢ã®ãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã¯ãä»®æ³ç°å¢ã¬ãã«ã§å©çšã§ããå¿ èŠããããŸãã
ãããš...ãã¢ããªã±ãŒã·ã§ã³ãã¯ããã§ã¯å°ãææ§ã§ã-ããªãã¯ã¹ã¯ãªãããŸãã¯äœãä»ã®ãã®ãåç §ããŠããŸããïŒ æå³ãæ確ã«ããŠããã ããŸãããïŒ
ãããè¡ãå Žåããšã«ãããã¹ãç°å¢ããã®ãã¹ãŠã®ã¹ã¯ãªãããå«ããããšã«ã€ããŠã¯åŒ·ã-1ã§ãããæšæºã©ã€ãã©ãªã«ãã£ãŠãµããŒããããŠããã¹ã¯ãªãããå«ããããšã«ã€ããŠã¯ææ§ã§ããããšã«æ³šæããŠãã ããã
ããŒã ãããã¯Scripts/ãã£ã¬ã¯ããªã«ãããŸãããïŒ
ãããã Scripts
ã«å«ãŸããŠããã®ã¯ãã€ã³ã¹ããŒã«ãããŠããã©ã€ãã©ãªïŒpipãeasy_installãããã³ããŒã¹ã€ã³ã¹ããŒã«ã®wheelïŒã®ãšã³ããªãã€ã³ãã©ãããŒã ãã§ãã ããå°ã詳ããèŠãŠã¿ããšã 2to3.py
ã¯Tools/scripts
ã«ãããŸãïŒ60以äžã®ä»ã®ã¹ã¯ãªãããããªãæ··åšããŠããŸãïŒãããã®ãã£ã¬ã¯ããªã¯PATH
ã«é
眮ãããŠããŸããããŠãŒã¶ãŒã¯ãPythonãPATHã«è¿œå ããéžæããŸãã
ãããè¡ãå Žåããšã«ãããã¹ãç°å¢ããã®ãã¹ãŠã®ã¹ã¯ãªãããå«ããããšã«ã€ããŠã¯åŒ·ã-1ã§ãããæšæºã©ã€ãã©ãªã«ãã£ãŠãµããŒããããŠããã¹ã¯ãªãããå«ããããšã«ã€ããŠã¯ææ§ã§ããããšã«æ³šæããŠãã ããã
å°ãªããšããåºæ¬çãªã€ã³ã¹ããŒã«ãããPATHã«è¿œå ããã¹ãã§ã¯ãªããšç§ã¯äž»åŒµããŸãã ã€ãŸãããããè¡ã£ãŠããWindowsã§ã¯è¡ããŸããã
pradyunsgã¯ã¿ã€ãã«ãå€æŽããŸãããvirtualenvã®binã«æšæºã©ã€ãã©ãªã¹ã¯ãªãããå«ãã/2æéåã«virtualenvã®ã¹ã¯ãªããã«æšæºã©ã€ãã©ãªã¹ã¯ãªãããå«ãã
ããã¯ããããªã¹ã³ãŒãã®å€æŽã§ããããšã«æ³šæããŠãã ããã OPã¯2to3
ã«ã®ã¿ç¹ã«é¢å¿ããããç¹ã«virtualenvãã¢ã¯ãã£ãåããŠãã·ã¹ãã 2to3
ãã·ã£ããŠã€ã³ã°ãããªãã£ãããšã«é¢å¿ããããŸããã ãããéèŠãã©ããã«ã€ããŠã¯ã³ã¡ã³ãã§ããŸããïŒãããWindowsã§çºçããªããšäž»åŒµããããšãèãããšããããåé¡ã§ãããšæãããã©ãããèšãã®ã«é¢é£ããUnixã®çµéšã¯ãããŸããïŒã ããããä»ã«ã©ã®ãããªã¹ã¯ãªããããæšæºã©ã€ãã©ãªã¹ã¯ãªãããã§ããããç¥ããªããã°ããããéèŠãªãã€ã³ãã§ãããã©ããã¯ã³ã¡ã³ãã§ããŸããã
ããŒãã pyvenv
ã¯ããããå¥ã®ãæšæºã©ã€ãã©ãªã¹ã¯ãªãããã§ããããã®ã·ã¹ãã ããŒãžã§ã³ãvirtualenvç°å¢ããvenvãå®è¡ããããŒãžã§ã³ã§ã·ã£ããŠã€ã³ã°ããããªããšç¢ºä¿¡ããŠããŸãïŒããã¯åã«è€éããåŒãèµ·ããã ãã§ãïŒå®çšçãªã¡ãªããã¯ãããŸããïŒã
OPã¯...èå³ãæã£ãŠããŸãã...ç¹ã«virtualenvãã¢ã¯ãã£ãåããŠãã·ã¹ãã 2to3ãã·ã£ããŠã€ã³ã°ãããªãã£ãããšã«èå³ããããŸããã
ïŒãã®ãã¬ãŒãºãç§ã®å£ã«äœãå ¥ããŠããã®ãããããŸãããäž¡æ¹ã®æ¹æ³ã§è§£éã§ããŸããïŒ
ããããããããããã«ã 2to3
ã®ã·ã ãäœæããããã«virtualenv
ãèŠæ±ããŠããŸãã
ïŒå ã®æçš¿ãæåŸ ã©ããã®åäœã§ç·šéãããŠãã ãããçç¥ããå Žåãæ··ä¹±ãçããŸããïŒ
ïŒæåŸ ãããåäœã§å ã®æçš¿ãç·šéãããŠãã ããïŒ
çµããã ãŸãããŠãŒã¶ãŒãPATH
ã«ãããšäºæ³ããçç±ãæããã«ããŸããã
ãã®ãã¬ãŒãºãç§ã®å£ã«äœãå ¥ããã®ãããããŸãã
ã³ã¡ã³ããäžåœè¡šç€ºããŠç³ãèš³ãããŸããã説æããŠããã ãããããšãããããŸãã ïŒç§ã¯ããªããäœãæ±ããŠããã®ããæ£ããç解ããããã§ããç§ã¯ãããã²ã©ãèšãçŽããŸãã...ïŒ
ãŸãããŠãŒã¶ãŒãPATHäžã«ãããšæåŸ ããçç±ãæããã«ããŸããã
ããªããåç
§ãããªã³ã¯ã¯å°ãçŽããããã§ãã ãŠãŒã¶ãŒã¯ãä¿¡é Œã§ãããŒãã¢ã«ã§ã¯æ©èœãããããã€ãªããã¯ã§ã¯æ©èœããªãããã»ã¹ãæã£ãŠããããã§ãã åé¡ãvirtualenvã«ããå Žåããªããããªãã®ãã¯ç§ã«ã¯ããããŸããã ïŒæ³šïŒããã¯äœè«ã§ã-ãšã«ãããvirtualenvã2to3.py
ãã³ããŒããªãã®ã¯æãããªã®ã§ãå
ã®åé¡ããã埮åŠã§ãã£ãŠããæå¹ã§ãããã©ããã®è°è«ã¯æå¹ã§ãïŒã
2to3ã®ã·ã ãäœæããããã«virtualenvãèŠæ±ããŠããŸãã
ã·ã ãäœæããããšã¯æ±ºããŠãªãããšã«æ³šæããŠãã ããã 2to3.py
ã¹ã¯ãªãããã³ããŒããã ãã§ãã ã·ã ãå¿
èŠãªå ŽåïŒããã¯pyvenvã®ããšã ãšæããŸãïŒããããåŠçããã®ã¯ç§ãã¡ã§ã¯ãããŸããã
ããããã¹ã¯ãªããã«å«ãŸããŠããã®ã¯ãã€ã³ã¹ããŒã«ãããŠããã©ã€ãã©ãªïŒpipãeasy_installãããã³ããŒã¹ã€ã³ã¹ããŒã«ã®wheelïŒã®ãšã³ããªãã€ã³ãã©ãããŒã ãã§ãã
Ooooooooooooooã ããã£ãã
ããã¯ããããªã¹ã³ãŒãã®å€æŽã§ããããšã«æ³šæããŠãã ããã
2to3ã¯ç¹å¥ãªã¹ããŒãã¬ãŒã¯ã§ã¯ãªããšæããŸãããããè¿œå ãããšã誰ããæ®ããæ±ããŠãã£ãŠãããšæããŸãã ãããå®å šã«è¡ããããŸã£ããè¡ããªããã®ã©ã¡ããã§ãã éäžã§ç«ã¡åŸçããããšã¯ãç§ãã¡ãããã§æãã§ããããšã§ã¯ãããŸããã
ïŒç§ã¯ã¢ãã€ã«UIãå«ãã§ãïŒ
ããã¯ãæšæºã©ã€ãã©ãªã«æ¯ããããŠãããæšæºLinuxã€ã³ã¹ããŒã«ã®å Žåã¯PATH
ã«ãããšããç¹ã§ãç¹å¥ãã§ãã
ãã®ãããªããŒã«ã¯ä»ã«ããŸããããŸããã 2to3
以å€ã¯ã pydoc
ã idle
ã pyvenv
ã®ã¿ã§ãã
$ ls ~/.pyenv/versions/3.6.9/bin
2to3 easy_install-3.6 idle3.6 pip3.6 pydoc3.6 python3.6 python3.6m python-config virtualenv
2to3-3.6 idle pip pydoc python python3.6-config python3.6m-config pyvenv
easy_install idle3 pip3 pydoc3 python3 python3.6-gdb.py python3-config pyvenv-3.6
ïŒãŸãããã§ã«ãªãã€ã¬ã¯ããããŠããpython-config
ïŒ
ããã@ native-apiã®èª¬æã«æè¬ããŸãïŒ ãšãŠãæé£ãã ãããWindows以å€ã®åé¡ã§ãããšãã@pfmooreã®èª¬æãšãšãã«ãç§ã®ç解ã«åœ¹ç«ã¡ãŸãã :)
ç§ã¯ãŸã ãããå«ããããšã«ã€ããŠã¯ææ§ã§ãã
2to3以å€ã¯ãpydocãidleãpyvenvã®ã¿ã§ãã
誰ããã®ãªã¹ããéžãã ã®ãç¥ãããã§ãã å ·äœçã«ã¯pyvenvã§ããïŒ UbuntuïŒWindowsäžã®bashãããã³python3ãã€ã³ã¹ããŒã«ãããdockerã€ã¡ãŒãžïŒã«ã¯ãããã©ã«ãã§2to3ããªãããã§ãããPython dockerã€ã¡ãŒãžã«ã¯ãåè¿°ãããã®ãšåããã€ããªïŒããã«ãã€ã³ã¹ããŒã«ãããããã±ãŒãžããã®pipãeasy_installãwheelïŒããããŸãã å°ãååžã«äŸåããŠããããã§ã:-(å°ãªããšãé¢é£ãããã€ããªã®ãªã¹ãã¯äžè²«ããŠããããã§ããã
ãšããã§ãç§ãäžã§èšã£ãããã«ãç§ãã¡ããã®å€æŽãè¡ã£ããšããŠããç§ã¯pyvenvãå«ããªãããšã匷ããå§ãããŸãã
UbuntuïŒWindowsã§ã¯bashãpython3ãã€ã³ã¹ããŒã«ãããDockerã€ã¡ãŒãžïŒã«ã¯ããã©ã«ãã§2to3ããªãããã§ã
ããã¯ãUbuntuã§ã¯2to3
ãå¥ã®ããã±ãŒãžã«ç§»åãããããã§ãã
$ apt-file search 2to3 | grep -E '/2to3[^/]*$'
2to3: /usr/bin/2to3
<...>
python2.7: /usr/bin/2to3-2.7
<...>
ãæšæºã®Linuxã€ã³ã¹ããŒã«ããšã¯ããã£ã¹ããªãã¥ãŒã·ã§ã³ã«å¹²æžããããšãªããPythonã®Linuxãã«ãã¹ã¯ãªããã«åºæã®ããžãã¯ãæå³ããŸããããšãã°ããœãŒã¹ããã€ã³ã¹ããŒã«ããå ŽåïŒããã¯pyenv
ãè¡ãããšã§ãïŒã
ç§ã¯ãããåãäžããããšãã§ããããã«åãçµãã€ããã§ãã
ããã¯ãã¢ã¯ãã£ããŒã·ã§ã³ã¹ã¯ãªããã®äžéšãšããŠpydocãè¿œå ãããšããçŸåšã®ããã¯ã«åã£ãŠä»£ããããšã«æ³šæããŠãã ããã
æãåèã«ãªãã³ã¡ã³ã
åé¿çãšããŠãvirtualenvå ã§åçã®æ©èœãåãã
python -m lib2to3
ã䜿çšã§ããŸãã