Virtualenv: virtualenv์˜ ์Šคํฌ๋ฆฝํŠธ์— ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์Šคํฌ๋ฆฝํŠธ ํฌํ•จ

์— ๋งŒ๋“  2019๋…„ 08์›” 02์ผ  ยท  22์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pypa/virtualenv

2to3 ์ด ํ˜„์žฌ Virtualenv์—์„œ ๋ฆฌ๋””๋ ‰์…˜๋˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด์„œ๋Š” https://travis-ci.community/t/2to3-command-not-found-in-virtualenv-in-bionic/4495 ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์ผ๋ฐ˜์ ์œผ๋กœ PATH ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

EOL์ด ์ž„๋ฐ•ํ•œ Py2์— ๋น„์ถ”์–ด ์ด์— ๋Œ€ํ•œ ์ˆ˜์š”๊ฐ€ ์ฆ๊ฐ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค!


  • [X] ์ตœ์†Œํ•œ์˜ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์˜ˆ ๋˜๋Š” ์ž์„ธํ•œ ์„ค๋ช…
$ 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 ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

  • [X] OS ๋ฐ pip list ์ถœ๋ ฅ
    ์šฐ๋ถ„ํˆฌ ๋ฐ”์ด์˜ค๋‹‰ ๋ฐ์Šคํฌํƒ‘ x64
$ ~/.pyenv/versions/3.6.9/bin/python -m pip list
Package    Version
---------- -------
pip        18.1   
setuptools 40.6.2 
virtualenv 16.7.2 
enhancement help-wanted

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด virtualenv ๋‚ด์—์„œ ๋™๋“ฑํ•œ ๊ธฐ๋Šฅ๊ณผ ํ•จ๊ป˜ python -m lib2to3 ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  22 ๋Œ“๊ธ€

pyenv rehash๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„์—๋„ ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ?

pyenv rehash ์ „ํ›„์— shim์„ ์‹คํ–‰ํ•  ๋•Œ ๋ฌด์—‡์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ด๊ฒƒ์ด pyenv์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค๋Š” ๋Š๋‚Œ์ด ๋“ญ๋‹ˆ๋‹ค.

pyenv rehash๋ฅผ ์ˆ˜ํ–‰ํ•œ ํ›„์—๋„ ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ?

๋„ค.

pyenv rehash ์ „ํ›„์— shim์„ ์‹คํ–‰ํ•  ๋•Œ ๋ฌด์—‡์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๊นŒ?

$#$ 2to3 ๊ฐ€ ํฌํ•จ๋œ apt ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š์€ system Python์ด ์„ ํƒ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

pyenv: 2to3: command not found

The `2to3' command exists in these Python versions:
<list>

๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘.

๋‚˜๋Š” ์ด๊ฒƒ์ด pyenv์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค๋Š” ๋Š๋‚Œ์ด ๋“ญ๋‹ˆ๋‹ค.

pyenv ๋Š” ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์€ ๋‘ ๋ฒˆ์งธ 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 other @pypa/virtualenv-committers ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ virtualenv์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์–‘๋ฉด์ ์ด๋‹ค.

์ €๋Š” -0.5์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๋ฌธ์ œ๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์€ ์ถ”๊ฐ€ ํ˜ผ๋ž€์ด๋ฏ€๋กœ ํ•„์š”๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. EOL์ด ์ž„๋ฐ•ํ•œ Python 2๊ฐ€ ์—ฌ๊ธฐ์„œ ์ฐจ์ด๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์Šคํฌ๋ฆฝํŠธ๋Š” Windows์˜ ๋น„๊ฐ€์ƒ ํ™˜๊ฒฝ์—์„œ๋„ PATH ์— ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ ์กด์žฌํ•œ๋‹ค๋Š” ๊ธฐ๋Œ€๊ฐ€ ๋ณดํŽธ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์ผ๋ฐ˜์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ์˜ ๋ชจ๋“  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ๊ฐ€์ƒ ํ™˜๊ฒฝ ์ˆ˜์ค€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

EOL์ด ์ž„๋ฐ•ํ•œ Python 2๊ฐ€ ์—ฌ๊ธฐ์„œ ์ฐจ์ด๋ฅผ ๋งŒ๋“ ๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

+1

๊ทธ๊ฒƒ์€ ์—ฌ๊ธฐ์—์„œ๋„ ๋‚ด ๊ด€์‹ฌ์‚ฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. :)

์ถ”๊ฐ€ ์Šคํฌ๋ฆฝํŠธ๋Š” Windows์˜ ๋น„๊ฐ€์ƒ ํ™˜๊ฒฝ์—์„œ๋„ PATH ์— ์—†์Šต๋‹ˆ๋‹ค.

์˜ค. Scripts/ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๋‚ด ์ดํ•ด๋Š” ํ˜„์žฌ python.org ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์ด ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ PATH์— ์ถ”๊ฐ€ํ•˜๋ฏ€๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ์˜ ๋ชจ๋“  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ๊ฐ€์ƒ ํ™˜๊ฒฝ ์ˆ˜์ค€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์Œ... "์‘์šฉ ํ”„๋กœ๊ทธ๋žจ"์€ ์—ฌ๊ธฐ์—์„œ ์•ฝ๊ฐ„ ๋ชจํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ๊ฒƒ์„ ๋งํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ? ๋ฌด์Šจ ๋ง์ธ์ง€ ๋ช…ํ™•ํžˆ ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๊ฐ€ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์–ด์จŒ๋“  ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ์˜ ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐ์—๋Š” -1์ด๊ณ  ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ง€์›ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐ์—๋Š” ์–‘๊ฐ€์ ์ด๋ผ๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

์˜ค. Scripts/ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”, Scripts ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์€ ์„ค์น˜๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(๊ธฐ๋ณธ ์„ค์น˜์˜ pip, easy_install ๋ฐ wheel)์— ๋Œ€ํ•œ ์ง„์ž…์  ๋ž˜ํผ์ž…๋‹ˆ๋‹ค. ์กฐ๊ธˆ ๋” ์‚ดํŽด๋ณด๋ฉด 2to3.py ๊ฐ€ Tools/scripts ์— ์žˆ์ง€๋งŒ(60๊ฐœ ์ด์ƒ์˜ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ƒ๋‹นํžˆ ํ˜ผํ•ฉ๋˜์–ด ์žˆ์Œ) ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ๋Š” PATH ์— ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” "PATH์— Python ์ถ”๊ฐ€"๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์–ด์จŒ๋“  ํ˜ธ์ŠคํŠธ ํ™˜๊ฒฝ์˜ ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐ์—๋Š” -1์ด๊ณ  ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ง€์›ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐ์—๋Š” ์–‘๊ฐ€์ ์ด๋ผ๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

์ตœ์†Œํ•œ ๊ธฐ๋ณธ ์„ค์น˜๋ณด๋‹ค ๋” ๋งŽ์€ ๊ฒƒ์„ PATH์— ์ถ”๊ฐ€ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ฃผ์žฅํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์„ ํ•œ๋‹ค ํ•ด๋„ Windows์—์„œ๋Š” ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

pradyunsg๋Š” 2์‹œ๊ฐ„ ์ „์— virtualenv์˜ bin์— ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์Šคํฌ๋ฆฝํŠธ ํฌํ•จ/๊ฐ€์ƒ ํ™˜๊ฒฝ์˜ ์Šคํฌ๋ฆฝํŠธ์— ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์Šคํฌ๋ฆฝํŠธ ํฌํ•จ์ด๋ผ๋Š” ์ œ๋ชฉ์„ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์•ฝ๊ฐ„์˜ ๋ฒ”์œ„ ๋ณ€๊ฒฝ์ด๋ผ๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค. OP๋Š” ํŠนํžˆ 2to3 ์—๋งŒ ๊ด€์‹ฌ์ด ์žˆ์—ˆ๊ณ  ํŠนํžˆ virtualenv๋ฅผ ํ™œ์„ฑํ™”ํ•ด๋„ ์‹œ์Šคํ…œ 2to3 ์„ ๊ฐ€๋ฆฌ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค . ๊ทธ๊ฒƒ์ด ์ค‘์š”ํ•œ์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•ด์„œ๋Š” ์–ธ๊ธ‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(Windows์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์ผ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ฃผ์žฅํ–ˆ์ง€๋งŒ Unix์—์„œ ์ด๊ฒƒ์ด ๋ฌธ์ œ๋ผ๊ณ  ๋Š๋ผ๋Š”์ง€ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ๊ด€๋ จ ๊ฒฝํ—˜์ด ์—†์Œ). ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ "ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์Šคํฌ๋ฆฝํŠธ"์ธ์ง€ ์•Œ์ง€ ๋ชปํ•˜๋ฉด ์ด๊ฒƒ์ด ์ค‘์š”ํ•œ ์š”์ ์ธ์ง€ ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ , pyvenv ๋Š” ์•„๋งˆ๋„ ๋˜ ๋‹ค๋ฅธ "ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์Šคํฌ๋ฆฝํŠธ"์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €๋Š” virtualenv ํ™˜๊ฒฝ์—์„œ venv๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฒ„์ „์œผ๋กœ ์‹œ์Šคํ…œ ๋ฒ„์ „์„ ์„€๋„์ž‰ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์งˆ์ ์ธ ์ด์ต์ด ์—†์Œ).

OP๋Š” ... ๊ด€์‹ฌ์ด ... ํŠนํžˆ virtualenv๋ฅผ ํ™œ์„ฑํ™”ํ•ด๋„ ์‹œ์Šคํ…œ 2to3์„ ๊ฐ€๋ฆฌ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

(์ด ๋ฌธ๊ตฌ๊ฐ€ ์ œ ์ž…์— ๋ฌด์—‡์„ ๋‹ด๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์–‘๋ฐฉํ–ฅ์œผ๋กœ ํ•ด์„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

๋ช…ํ™•์„ฑ์„ ์œ„ํ•ด 2to3 ์— ๋Œ€ํ•œ ์‹ฌ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด virtualenv ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

(์›๋ณธ ๊ฒŒ์‹œ๋ฌผ์„ ์˜ˆ์ƒ ๋™์ž‘์œผ๋กœ ์ˆ˜์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ƒ๋žตํ•˜๋ฉด ํ˜ผ๋ž€์„ ์ผ์œผํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.)

(์›๋ณธ ๊ฒŒ์‹œ๋ฌผ์„ ์˜ˆ์ƒ ๋™์ž‘์œผ๋กœ ํŽธ์ง‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค)

์™„๋ฃŒ. ๋˜ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ PATH ์— ์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•œ ์ด์œ ๋ฅผ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ง์ด ๋‚ด ์ž…์— ๋ฌด์—‡์„ ๋‹ด๊ณ  ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค

๊ท€ํ•˜์˜ ์˜๊ฒฌ์„ ์ž˜๋ชป ์ „๋‹ฌํ•˜์—ฌ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์„ค๋ช…ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! (์š”์ฒญํ•˜์‹  ๋‚ด์šฉ์„ ์ œ๋Œ€๋กœ ์ดํ•ดํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค๋งŒ, ์ œ๊ฐ€ ์ž˜๋ชป ๋‹ค์‹œ ํ•œ ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค...)

๋˜ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ PATH์— ์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•œ ์ด์œ ๋ฅผ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฐธ์กฐํ•œ ๋งํฌ๊ฐ€ ์•ฝ๊ฐ„ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๊ณ  xenial์—์„œ ์ž‘๋™ํ•˜์ง€๋งŒ ๋ฐ”์ด์˜ค๋‹‰์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ virtualenv์— ์žˆ๋Š” ๊ฒฝ์šฐ ๊ทธ ์ด์œ ๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (์ฐธ๊ณ : ์ด๊ฒƒ์€ ํŽธํ–ฅ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  virtualenv๊ฐ€ 2to3.py ๋ฅผ ๋ณต์‚ฌ ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ถ„๋ช…ํ•˜๋ฏ€๋กœ ์›๋ž˜ ๋ฌธ์ œ๊ฐ€ ๋” ๋ฏธ๋ฌ˜ํ•˜๋”๋ผ๋„ ์œ ํšจํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ๋…ผ์˜).

virtualenv์— 2to3์šฉ shim์„ ์ƒ์„ฑํ•˜๋„๋ก ์š”์ฒญํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” shim์„ ๋งŒ๋“ค์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ผ์€ 2to3.py ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. shim์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ(๊ทธ๊ฒƒ์€ pyvenv์˜ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค) ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์•˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•„๋‹ˆ์š”, ์Šคํฌ๋ฆฝํŠธ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์€ ์„ค์น˜๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(๊ธฐ๋ณธ ์„ค์น˜์˜ pip, easy_install ๋ฐ wheel)์— ๋Œ€ํ•œ ์ง„์ž…์  ๋ž˜ํผ์ž…๋‹ˆ๋‹ค.

์˜ค์˜ค์˜ค์˜ค์˜ค์˜ค์˜ค์˜ค์˜ค์˜ค์˜ค์˜ค์˜ค์˜ค์˜ค ๊ดœ์ฐฎ์•„.

์ด๊ฒƒ์€ ์•ฝ๊ฐ„์˜ ๋ฒ”์œ„ ๋ณ€๊ฒฝ์ด๋ผ๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

๋‚˜๋Š” 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์ด ์„ค์น˜๋œ ๋„์ปค ์ด๋ฏธ์ง€)์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ 2to3์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ Python ๋„์ปค ์ด๋ฏธ์ง€์—๋Š” ์–ธ๊ธ‰ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(์„ค์น˜๋œ ํŒจํ‚ค์ง€์—์„œ ์ œ๊ณต๋˜๋Š” pip, easy_install ๋ฐ wheel). ์•ฝ๊ฐ„ ๋ฐฐํฌ์— ์˜์กด์ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค :-(์ ์–ด๋„ ๊ด€๋ จ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ชฉ๋ก์€ ์ผ๊ด€์„ฑ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

BTW, ์œ„์—์„œ ๋งํ–ˆ๋“ฏ์ด ์ด ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•˜๋”๋ผ๋„ pyvenv๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

Ubuntu(Windows์˜ bash ๋ฐ python3์ด ์„ค์น˜๋œ ๋„์ปค ์ด๋ฏธ์ง€)์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ 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์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ˜„์žฌ ํ•ดํ‚น์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰