Virtualenv: [RFC] ์ฐจ์„ธ๋Œ€ virtualenv

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

1362๋…„ ์˜ ํ† ๋ก ์— ์ด์–ด virtualenv๊ฐ€ ์ƒˆ๋กœ์šด ์„ธ๊ณ„(Windows Store ์„ค์น˜, venv ์ธํ„ฐํ”„๋ฆฌํ„ฐ)๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ์œผ๋ ค๋ฉด ๋ฐฉํ–ฅ์„ ํฌ๊ฒŒ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ œ ์ œ์•ˆ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ธฐ์กด ์ธํ„ฐํŽ˜์ด์Šค ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•  ๊ณ„ํš์ธ ํ”„๋กœ์ ํŠธ์˜ ์ฃผ์š” ๋ฆฌํŒฉํ„ฐ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ

  • ์ž์ฒด ์‚ฌ์šฉ์ž ์ •์˜, ๋ณ„๋„๋กœ ์ œ์–ด ๊ฐ€๋Šฅํ•œ ํŒจํ‚ค์ง€ ๋ชฉ๋ก์ด ์žˆ๋Š” ์‹œ์Šคํ…œ(ํ˜ธ์ถœ์ž) python์˜ ์ƒˆ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค
  • ์ง€์›๋˜๋Š” ๋ชจ๋“  Python ํ™˜๊ฒฝ์—์„œ ๊ฐ€๋Šฅํ•œ ํ•œ ์ผ๊ด€๋œ ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ๋™์ž‘(์˜ˆ: ์ƒˆ๋กœ์šด venv ๊ธฐ๋Šฅ์„ ์ด์ „ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ๋ฐฑํฌํŠธ)
  • ํ™•์žฅ ๊ฐ€๋Šฅ(์ƒ์„ฑ ๋ฐ ์…ธ ํ™œ์„ฑํ™” ์Šคํฌ๋ฆฝํŠธ ๋ชจ๋‘ ํ˜„๋ช…ํ•˜๊ฒŒ ์ง€์›),
  • PyPi ํŒจํ‚ค์ง€(์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์—ญ ์™ธ ์—…๊ทธ๋ ˆ์ด๋“œ ๊ธฐ๋Šฅ).

๊ณ„ํš๋œ ๊ธฐ๋Šฅ

  • ๋ณดํŽธ์ ์ธ pypi ๋ฐ”ํ€ด ,
  • ํฌ๋กœ์Šค ํ”Œ๋žซํผ - Windows, ๋ชจ๋“  UNIX ๊ณ„์—ด, MacOS.
  • ๋Œ€๋ถ€๋ถ„์˜ ์ง€์›๋˜๋Š” pythons ์ง€์› , ์ง€์›๋˜๋Š” Python ๋ฒ„์ „์˜ ์ดˆ๊ธฐ ํ’€: python2.7 , python3.4 , python3.5 , python3.5 , pypy3 , pypy2 (IronPython๊ณผ Jython์ด ์–ธ์  ๊ฐ€ ์ง€์›๋˜๊ธฐ๋ฅผ ํฌ๋งํ•ฉ๋‹ˆ๋‹ค. ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ๋‹ค๋ฅธ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?)
  • 2๋…„ ์˜ ์ง€์›
  • ๋Œ€์ƒ python ์„
  • ๊ธฐ๋ณธ ์ œ๊ณต venv ์„ ํ˜ธ : ๋Œ€์ƒ ํŒŒ์ด์ฌ์— venv๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋‹ค๋ฅธ ๋ณด์žฅ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์ด์— ๋Œ€ํ•œ ํ›„์† ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค)
  • ์‹œ๋“œ ํŒจํ‚ค์ง€ ํ”„๋กœ๋น„์ €๋‹ ๊ธฐ๋Šฅ(๊ฐ€์ƒ ํ™˜๊ฒฝ ์ƒ์„ฑ ํ›„ ์ด ํŒจํ‚ค์ง€๋Š” ์ด๋ฏธ ์„ค์น˜๋จ):

    • ์šฐ๋ฆฌ๋Š” PEP-508 ํ˜•์‹์„ ๋ฐ›์•„๋“ค์ž…๋‹ˆ๋‹ค,
    • ์‚ฌ์–‘๊ณผ ์ผ์น˜ํ•˜๋Š” ์ตœ์‹  ์ •๋ณด๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด PyPi์— ์—ฐ๋ฝํ•˜๋Š” ๊ธฐ๋Šฅ ๋˜๋Š” ์˜คํ”„๋ผ์ธ ์ „์šฉ(์ด๋Ÿฌํ•œ ์„ค์น˜ ํŒจํ‚ค์ง€๋Š” ์˜คํ”„๋ผ์ธ์ด์–ด์•ผ ํ•จ)
    • ๊ธฐ๋ณธ์ ์œผ๋กœ pip , setuptools ๋ฐ wheel ๋Š” ์‹œ๋“œ ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค(์ด ํŒจํ‚ค์ง€๋Š” ์˜คํ”„๋ผ์ธ ํœ  ํŒจํ‚ค์ง€๋กœ๋„ ์ž๋™ ์ฃผ์ž…๋จ)
  • ์ธํ„ฐํŽ˜์ด์Šค :

    • CLI ์ธํ„ฐํŽ˜์ด์Šค( python -m virtualenv , virtualenv )
    • ํœ  ์ธํ„ฐํŽ˜์ด์Šค (env PYTHONPATH=/t/path/to/virtualenv.whl python -m virtualenv ) - ๋ฒ”์šฉ ํœ ,
    • zipapp ์ธํ„ฐํŽ˜์ด์Šค,
    • API ์ธํ„ฐํŽ˜์ด์Šค: import virtualenv; virtualenv.create("target")
  • ์‰˜ ์ง€์› - ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™” ์Šคํฌ๋ฆฝํŠธ ๋ฐ ํ”„๋กฌํ”„ํŠธ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ - ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    • ๋ฐฐ์‰ฌ / zsh,
    • ์‰ฟ,
    • ๋ฌผ๊ณ ๊ธฐ,
    • ํŒŒ์›Œ์‰˜,
    • xonsh,
    • cmd,
    • ํŒŒ์ด์ฌ,
    • ๋งž์ถค ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•œ ์ž˜ ์ •์˜๋œ API(ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹œ์Šคํ…œ์˜ ์ผ๋ถ€๋กœ).
  • 3๊ณ„์ธต ๊ตฌ์„ฑ ์‹œ์Šคํ…œ ์—์„œ ๊ฐ ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

    • ์ฒซ์งธ, ini ๊ตฌ์„ฑ ์ง€์›(์‚ฌ์šฉ์ž ํ™ˆ์— ์žˆ๋Š” ์ „์—ญ ini ๊ตฌ์„ฑ),
    • ๋‘ ๋ฒˆ์งธ, VIRTUALENV_ ์ ‘๋‘์‚ฌ๊ฐ€ ์žˆ๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜,
    • ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ช…๋ น์ค„ ์˜ต์…˜(argparse ๊ธฐ๋ฐ˜)
  • ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹œ์Šคํ…œ ์‚ฌ์šฉ์ž๊ฐ€ ๊ณ ์œ ํ•œ ์‚ฌ์šฉ์ž ์ •์˜ ๋…ผ๋ฆฌ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ  virtualenv(ํ˜„์žฌ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ๋…ผ๋ฆฌ)์˜ ํ™•์žฅ ๋ฒ„์ „์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์žฅ ์ง€์ ์ž…๋‹ˆ๋‹ค.

    • ํ™•์žฅ ํŒŒ์„œ(์‚ฌ์šฉ์ž ์ •์˜ CLI ํ”Œ๋ž˜๊ทธ ์ถ”๊ฐ€),
    • ์˜ต์…˜ ์กฐ์ •(CLI ๊ตฌ๋ฌธ ๋ถ„์„ ํ›„ ์˜ต์…˜ ๋ณ€๊ฒฝ),
    • ์„ค์น˜ ํ›„ (๊ฐ€์ƒ ํ™˜๊ฒฝ ์ƒ์„ฑ์ด ์™„๋ฃŒ๋˜๋ฉด ์ผ๋ถ€ ์ž‘์—… ์ˆ˜ํ–‰)
  • virtualenv ์ง€์› - ํ˜ธ์ถœํ•˜๋Š” python์ด virtualenv ์ƒ์„ฑ python์ธ ๊ฒฝ์šฐ์—๋„ ์ž‘์—…์ด ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • venv ์ง€์› - ํ˜ธ์ถœํ•˜๋Š” python์ด virtualenv ์ƒ์„ฑ python์ธ ๊ฒฝ์šฐ์—๋„ ์ž‘์—…์ด ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์žฌ๋ฐฐ์น˜ ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ : ๋ฃจํŠธ python์ด OS์—์„œ ์ œ๊ฑฐ๋˜์ง€ ์•Š๋Š” ํ•œ ํ™˜๊ฒฝ์€ ๊ณ„์† ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ๋ฃจํŠธ ํ™˜๊ฒฝ ํด๋”์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค).

stdlib venv์™€์˜ ์ฐจ์ด์ 

ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ venv์™€ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฐ€์š”? virtualenv ํŒจํ‚ค์ง€ ๊ณ„ํš:

  • PyPi ํŒจํ‚ค์ง€๋Š” ๋” ์ž์ฃผ ์—…๊ทธ๋ ˆ์ด๋“œ๋˜๊ณ  ์ตœ์‹  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์‰ฝ๊ณ  ํŒŒ์ด์ฌ ๊ฐ„์— ๊ธฐ๋Šฅ ํŒจ๋ฆฌํ‹ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๋‚ด์žฅ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๊ฒ€์ƒ‰ ๋ฐ ๊ต์ฐจ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์ง€์›,
  • ๋” ๋งŽ์€ ์ธํ„ฐํŽ˜์ด์Šค(zippapp, wheel, ์„ค์น˜๋œ ํŒจํ‚ค์ง€),
  • ๋” ์‰ฌ์šด ์‚ฌ์šฉ์ž ์ •์˜ - ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹œ์Šคํ…œ,
  • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์žฅ์†Œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค(์ด๋Š” venv๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ).
  • ๋” ๊ธด EOL.

์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ API๋กœ ํ•„์š”๋กœ ํ•˜๋Š” ๋‹ค๋ฅธ ๋‹ค์šด์ŠคํŠธ๋ฆผ ๋„๊ตฌ(์˜ˆ: tox, pre-commit, pipenv, pipsi, pipx)๊ฐ€ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

PyPy ํšŒ์›(๊ทธ๋ฆฌ๊ณ  ๋Œ€์ค‘๋„ ํ•จ๊ป˜ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค)์€ ๊ท€ํ•˜์˜ ์ƒ๊ฐ์„ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ ๋™์˜ํ•˜๋Š” ๊ฒฝ์šฐ ํ”Œ๋Ÿฌ์Šค ํ•˜๋‚˜๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. @pfmoore @dstufft @di @pradyunsg @cjerdonek @ncoghlan @jaraco @techalchemy @uranusjr @pganssle @benoit-pierre @dholth @lkollar @takluyver @zooba

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

๊ทธ๋ž˜์„œ ์žฌ์ž‘์„ฑ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์„ ๋ณด๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ๋Š” ๊ฒƒ์ด ํŽธ์•ˆํ•˜๋‹ค๊ณ  ๋Š๋ผ๋Š” ์ƒํƒœ์— ์ด๋ฅด๋ €์Šต๋‹ˆ๋‹ค. ์ด ์ผ์„ ๋„์™€์ค„ ์ž์œ  ์‹œ๊ฐ„์ด ์žˆ์œผ๋ฉด ์ €์—๊ฒŒ ์—ฐ๋ฝํ•˜์‹ญ์‹œ์˜ค. ์›”๋ง๊นŒ์ง€ ์ถœ์‹œํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค ๐Ÿคž ์ฐธ๊ณ  https://github.com/pypa/virtualenv/milestone/7 ์•„์ง ๊ตฌํ˜„ํ•ด์•ผ ํ•˜์ง€๋งŒ ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ๊ฑฐ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”์‹ . https://github.com/pypa/virtualenv/pull/1481/ ์—์„œ ํ”ผ๋“œ๋ฐฑ PR์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

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

์•ผ์‹ฌ์ฐฌ ์ œ์•ˆ!

ini ๊ตฌ์„ฑ ์ง€์›(์‚ฌ์šฉ์ž ํ™ˆ์— ์žˆ๋Š” ์ „์—ญ ini ๊ตฌ์„ฑ)

ํ”Œ๋žซํผ ์„ ํ˜ธ ์œ„์น˜์—์„œ ๊ตฌ์„ฑ์„ ๊ฒ€์ƒ‰ํ•˜๋ ค๋ฉด appdir(๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

appdirs๋Š” ์˜ต์…˜์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” ํŒจํ‚ค์ง€์— ๋ฌผ๊ฑด์„ ๊ณต๊ธ‰ํ•˜๋Š” ์‚ฌ์—…์„ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ณต์ •ํ•˜๋ ค๋ฉด ์ด ์ค‘ 70%๊ฐ€ ์ด๋ฏธ ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฉฐ ๋” ๋‚˜์€ ์žฌ๊ตฌ์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ณต๊ธ‰์—…์ฒด์— ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์™œ ๊ณต๊ธ‰์—…์ฒด์ž…๋‹ˆ๊นŒ? (๋ฒค๋”๋ง์ด ์–ด๋ ต๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹จ์ผ ํŒŒ์ผ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.) IMO, ์šฐ๋ฆฌ๋Š” (pip๋ฅผ ์ œ์™ธํ•˜๊ณ ) ํŒจํ‚ค์ง• ๋„๊ตฌ๊ฐ€ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋นŒ๋“œ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ •๋ง๋กœ ๋ฐ›์•„๋“ค์ผ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ข…์†์„ฑ์„ ๊ฐ–๋Š” ๊ฒƒ์ด PyPA ์•ฑ์ด ํ”ผํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์–ด๋ ต๋‹ค๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ์šฐ๋ฆฌ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ž˜ํ•˜๊ณ  ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ๋ฌด์—‡์„ ๋งํ•ฉ๋‹ˆ๊นŒ?

(์—ฌ๊ธฐ์„œ virtualenv์— ๋Œ€ํ•ด ํฐ ์š”์ ์„ ์ œ์‹œํ•˜์ง€ ์•Š์•„ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด "PyPI ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ํฐ ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค"๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์„ ๋ณด์•˜๊ณ , ๊ทธ๋Ÿฌ๋ฉด ๋‚ด๊ฐ€ ๋ฒค๋”๋ง ์ž‘์—…์„ ํ•˜๋Š” PyPA ๋„๊ตฌ๊ฐ€ ๊ถ๊ธˆํ•ด์ง‘๋‹ˆ๋‹ค...) .

ํฌ๋กœ์Šค ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๊ธฐ๋Šฅ์„ ๊ณต๊ธ‰ํ•˜์ง€ ์•Š๊ณ ๋Š” ์–ด๋ ค์šธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด virtualenv๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š์€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์œ„ํ•œ ๊ฐ€์ƒ ํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ.

PYTHONPATH=/t/๊ฒฝ๋กœ/to/virtualenv.whl ํŒŒ์ด์ฌ -m ๊ฐ€์ƒ ํ™˜๊ฒฝ

์–ด, ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ virtualenv์˜ ์ถ”๊ฐ€ ํŒจํ‚ค์ง€์— ์˜์กดํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. zipapp์„ ์ œ๊ณตํ•  ์˜ˆ์ •์ด๋ฏ€๋กœ ์ด๋ฅผ ํ†ตํ•ด ์–ด๋–ค ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ?

@gaborbernat -p ์˜ต์…˜์„ ๋ง์”€ํ•˜์‹œ๋Š” ๊ฑด๊ฐ€์š”? ๊ทธ๋Ÿด ๊ฒƒ ๊ฐ™์•„์š”. zipapps๊ฐ€ ๋„์›€์ด ๋˜๋„๋ก ์˜๋„๋œ ์ƒํ™ฉ๊ณผ ์ •ํ™•ํžˆ ๊ฐ™์€ ์ƒํ™ฉ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„๋ฌด๋„ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๊ณผ๊ฐํžˆ ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@pradyunsg์—์„œ :

์–ด, ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ virtualenv์˜ ์ถ”๊ฐ€ ํŒจํ‚ค์ง€์— ์˜์กดํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค

์‚ฌ์‹ค, @gaborbernat ๋ง๋Œ€๋กœ -p ์˜ต์…˜์€ ์•„๋งˆ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค :-( ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๊ฐ€ "์— ๋ฐ”ํ€ด๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋ฅผ ๊ถ๊ธˆํ•ด์„ PYTHONPATH "์˜ต์…˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ zipapp์„ - ํŠนํžˆ ๋ฐ”ํ€ด ์ฃผ์–ด์ง„ on PYTHONPATH ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ผ๋ฐ˜์ ์ธ pip ๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํ•‘ ์ด์œ  ๋•Œ๋ฌธ์— virtualenv ๋‚ด์—์„œ ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. pip๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•œ ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค ;-))

์ง€์› ์œ ์˜ˆ ๊ธฐ๊ฐ„ 2๋…„

ํ ...

์—ฌ๊ธฐ์„œ ๋‚ด ๊ฑฑ์ •์€ ์ด๊ฒƒ์˜ ๋„คํŠธ์›Œํฌ ํšจ๊ณผ๋กœ ์ธํ•ด ์ตœ์‹  ๋ฒ„์ „์˜ Python ์ฑ„ํƒ์ด ๋Š๋ ค์ง€๊ณ  ์ง€์›๋˜๋Š” Python ์ˆ˜์˜ ์กฐํ•ฉ ํญ๋ฐœ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. CPython์€ 3.9์˜ ๋‹ค๋ฅธ ๋ฆด๋ฆฌ์Šค ์ฃผ๊ธฐ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ 2๋…„์€ ์ผ๋ถ€ ๋ฆด๋ฆฌ์Šค๊ฐ€ ํ•ต์‹ฌ ๊ฐœ๋ฐœ์ž์˜ ๊ฒƒ๋ณด๋‹ค ๋” ๊ธธ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ๋‚˜๋Š” ์ด๊ฒƒ์„ ์ฐจ๋‹จํ•˜๊ณ  ์‹ถ์ง€ ์•Š์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์€ ๋‚ด๊ฐ€ ์ด๊ฒƒ์„ ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ๋ถ„๋ช…ํžˆ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

(์–ธ์  ๊ฐ€ IronPython๊ณผ Jython์„ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ์ง€์›ํ•ด์•ผ ํ•  ๋‹ค๋ฅธ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?)

๋ถ„๋ช…ํžˆ. @gaborbernat์€ ์•„๋งˆ๋„ ๋‚ด๊ฐ€ ์ด๋ ‡๊ฒŒ ๋งํ•  ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์ด ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์ง€๋งŒ ๊ตฌํ˜„์— ๋” ์ต์ˆ™ํ•œ ์‚ฌ๋žŒ๋“ค์ด ์ด๊ฒƒ์„ ํ•˜๊ธฐ์— ๊ฐ€์žฅ ์ข‹์€ ์œ„์น˜์— ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ ์žฅ๊ธฐ์ ์ธ ์ง€์› ์ธก๋ฉด์—์„œ, ๊ทธ๋ฆฌ๊ณ  ์ด์ƒ์ ์œผ๋กœ๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ์ž˜ ์ง€์›๋˜๋„๋ก ํ•˜๋Š” ์ž‘์—…(CI, ํ…Œ์ŠคํŠธ ๋“ฑ)์ž…๋‹ˆ๋‹ค.

์ฒซ์งธ, ini ๊ตฌ์„ฑ ์ง€์›(์‚ฌ์šฉ์ž ํ™ˆ์— ์žˆ๋Š” ์ „์—ญ ini ๊ตฌ์„ฑ),

์ €๋Š” ํŽธ๊ฒฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ด๊ฒƒ์ด ๋Œ€์‹  TOML์ด ๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. :)

(์–ด๋”˜๊ฐ€์— ๊ฐ€์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„์ง ์ด๊ฒƒ์„ ์™„์ „ํžˆ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค -- ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ํ›Œ๋ฅญํ•œ ์ „์ฒด ๋ชฉํ‘œ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค!)

์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ๊ต์ฐจ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ๊ธฐ๋Šฅ์œผ๋กœ ์ธํ•ด ์ถ”๊ฐ€ ํŒจํ‚ค์ง€์— ์‹ค์ œ๋กœ ์˜์กดํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ด๊ฒƒ์„ ์ฃผ์š” ๋‹จ์ ์œผ๋กœ ์ƒ๊ฐํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์„ค์น˜/์ข…์†์„ฑ ์—†๋Š” ๋ฐฉ๋ฒ•์„ ์›ํ•ฉ๋‹ˆ๋‹ค(์‚ฌ๋žŒ๋“ค์ด ํ•„์š”ํ•  ๋•Œ ํ•„์š” ๋…ธ๋“œ ํŒจํ‚ค์ง€์—์„œ ํ˜ธ์ถœ). ๋น„์šฉ์ด ๋งŽ์ด ๋“ค์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ zipapp ์™ธ์— ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ €๋ ดํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ œ๊ณต venv ์„ ํ˜ธ: ๋Œ€์ƒ ํŒŒ์ด์ฌ์— venv๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋Ÿฐ ๋‹ค์Œ ์šฐ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋‹ค๋ฅธ ๋ณด์žฅ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์ด์— ๋Œ€ํ•œ ํ›„์† ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค).

์ด์— ๋Œ€ํ•œ ๊ทผ๊ฑฐ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์˜ ์œ ์ง€ ๋ณด์ˆ˜ ํ•  ๊ฒƒ์ด๋‹ค ๊ฒƒ ๊ฐ™๋‹ค virtualenv ์–ด๋ ต๊ฒŒํ•˜๊ณ  ์ดํ•ดํ•˜๋Š” ์ตœ์ข… ์‚ฌ์šฉ์ž์˜ ํ–‰๋™์„ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. setuptools ๋Š” ๊ณ„์†ํ•ด์„œ ์›์ˆญ์ด ํŒจ์น˜๋ฅผ ์ ์šฉํ•˜๊ธฐ ๋ณด๋‹ค๋Š” distutils ๋ฅผ ํก์ˆ˜ํ•˜๋ ค๊ณ  ํ•˜์—ฌ ์ด๋ฏธ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@pganssle ๋ฒ”์œ„๊ฐ€ ๋‹ค๋ฅด๊ณ  ๋ฌธ์ œ ๊ณต๊ฐ„๋„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. virtualenv ๋ฌธ์ œ๋Š” ์‹œ์Šคํ…œ์ด ์ข…์ข… ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€์— ์ถ”๊ฐ€ ์ œ์•ฝ์„ ๋‘๋ฏ€๋กœ ์ด๋ฅผ ์ค€์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด์žฅ๋œ venv๋ฅผ ์›์ˆญ์ด ํŒจ์น˜ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์„ ๋ณต์ œํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค(์˜ˆ: #1362 ์ฐธ์กฐ).

FWIW ๊ฒฉ๋ฆฌ๋ฅผ ์œ„ํ•ด ๋‚ด์žฅ๋œ venv ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅธ ์ƒ๊ฐ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ๋‚ด์žฅ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ(stdlib ๋ชจ๋“ˆ์ธ distutils๊ฐ€ ์•„๋‹˜) virtualenv ๋ณด๋‹ค ํ›จ์”ฌ ๊นจ๋—ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Virtualenv๋Š” ๋˜ํ•œ ์•„๋ฌด ๊ฒƒ๋„ ์›์ˆญ์ด ํŒจ์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ๊ณต๊ฐœ API๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

FWIW ๋‚ด ์˜ค๋ž˜๋œ ์žฌ์ž‘์„ฑ virtualenv ๋ถ„๊ธฐ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ๋งŽ์ด ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์•„๋งˆ๋„ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹œ์Šคํ…œ์ด virtualenv์— ๋งค์šฐ ์œ ์šฉํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ œ์•ˆํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๊ปํ•ด์•ผ ํ•˜๋‚˜์˜ ํ›„ํฌ, ํฌ์ŠคํŠธ ์ƒ์„ฑ ๋‹จ๊ณ„๊ฐ€ ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์œผ๋ฉฐ ์‹ฌ์ง€์–ด ์„ค์น˜ํ•  ํ•ญ๋ชฉ ๋ชฉ๋ก๋งŒ ์žˆ์œผ๋ฉด ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ "์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ" ๊ณ„์†ํ•ด์„œ zipapp์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ zipapp ์ž์ฒด ๋‚ด๋ถ€์—์„œ ๊ณต๊ธ‰์—…์ฒด์— ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋Œ€์ƒ ํŒŒ์ด์ฌ ์˜ต์…˜์—์„œ ์žฌ์‹คํ–‰์—์„œ ๋ฉ€์–ด์ง€๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚˜์œ ์ผ์ด๋ฉฐ ํ›จ์”ฌ ๋” ๊นจ๋—ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

697 -- @dstufft ์˜ ์ด์ „ PR

PYTHONPATH=/t/๊ฒฝ๋กœ/to/virtualenv.whl ํŒŒ์ด์ฌ -m ๊ฐ€์ƒ ํ™˜๊ฒฝ

OTOH, ์šฐ๋ฆฌ๋Š” ์•„๋งˆ๋„ ์ด๊ฒƒ์„ ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค -- https://www.python.org/dev/peps/pep-0427/#is -it-possible-to-import-python-code-directly-from- ํœ  ํŒŒ์ผ

@pradyunsg ๊ทธ๋ž˜์„œ ๊ฒฝ๋กœ์— ๋ฐ”ํ€ด๋ฅผ ๋‘์ง€ ์•Š๊ณ  ํ•์„ ๋ถ€ํŠธ์ŠคํŠธ๋žฉํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

pip ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์€ ์•„๋งˆ๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด virtualenv๊ฐ€ ์ง€๊ธˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค 1 . ๊ทธ๋Ÿฌ๋‚˜ virtualenv ์ž์ฒด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ˆ˜๋‹จ์ด ์•„๋‹ˆ๋ผ pip ์—๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

1 ํ•˜์ง€๋งŒ ๋ณต์žกํ•œ ๊ธฐ๋Šฅ์€ ํ”ผํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. PATH์—์„œ ํœ ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ํœ ์—์„œ pip๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์€ ๊ฑฐ์˜ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” certifi ์‹ค์ œ ํŒŒ์ผ๋กœ ์ž„๋ฒ ๋””๋“œ ์ธ์ฆ์„œ ๋ฒˆ๋“ค์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค (๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋‚˜์—๊ฒŒ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚จ ์ ์ด ์—†์–ด์š”์ด ์ž˜๋ชป ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚˜๋Š” ์•Œ๊ณ ์žˆ๋‹ค, ์•ก์„ธ์Šค์™€ ๊ฐ™์€ ํœ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ„ฐ๋„ท์„, ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฒฝ์šฐ์— ๋ฌธ์ œ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค get-pip.py ๋Š” ์ด ์ง€์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ช…์‹œ์ ์œผ๋กœ ํœ ์—์„œ ์ธ์ฆ์„œ๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.

pip๋ฅผ zipapp ๋กœ ๋ฐฐ์†กํ•˜์ง€ ์•Š๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ๋Œ€๋กœ ์ด๋Ÿฌํ•œ ํ•„์š”์„ฑ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ zipapp์€ python 2.7์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๐Ÿค”

@gaborbernat ํ•ด๋ดค์–ด? ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? ๊ท€ํ•˜๊ฐ€ ์„ค๋ช…ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์ด Windows์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒฝ์šฐ ์ดˆ๊ธฐ ๋ฌธ์ œ๋Š” ์—†์ง€๋งŒ @uranusjr ์€ ํ”ผ๋“œ๋ฐฑ์„ @dstuff ์™€

pip๋ฅผ zipapp์œผ๋กœ ๋ฐฐ์†กํ•˜์ง€ ์•Š๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ์œ„์—์„œ ๋งํ–ˆ๋“ฏ์ด pip๊ฐ€ zip ํŒŒ์ผ(๋˜๋Š” ํœ , ๋™์ผํ•œ ๊ฒƒ)์—์„œ ์ง์ ‘ ์‹คํ–‰๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์‹œ๊ฐ„์˜ 99%(๊ฒฝ๊ณ  - ๊ตฌ์„ฑ ๋ฒˆํ˜ธ)๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ ๋•Œ๋กœ๋Š” ์ธ์ฆ์„œ ๋ฒˆ๋“ค์ด ์‹ค์ œ ํŒŒ์ผ์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

shiv๊ฐ€ zipapp์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์••์ถ•์„ ํ’€๊ธฐ ๋•Œ๋ฌธ์— pip๋ฅผ shiv ๋กœ ๋ฌถ๋Š” ๊ฒƒ์ด ์•„๋งˆ๋„ ์ž˜ ์ž‘๋™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ ์•„๋ฌด๋„ ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

ํ‰์†Œ์™€ ๊ฐ™์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์€ ์ฃผ์š” ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ์•„๋ฌด๋„ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
  2. ์•„๋ฌด๋„ ๊ทธ๊ฒƒ์„ ํ•  ์‹œ๊ฐ„/๋™๊ธฐ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
  3. ํ˜„์žฌ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ž˜ ์ž‘๋™ํ•˜๋ฉฐ ๋” ํฐ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํŠ€๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฝ๋กœ์— ๋ฐ”ํ€ด๋ฅผ ๋‘์ง€ ์•Š๊ณ  pip๋ฅผ ๋ถ€ํŠธ์ŠคํŠธ๋žฉํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์—ฌ๊ธฐ์—์„œ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. virtualenv๋Š” pip ํœ ์„ ์‚ฌ์šฉํ•˜์—ฌ IIRC ์ž์ฒด์—์„œ ์„ค์น˜ํ•˜๋ฏ€๋กœ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. @pfmoore๊ฐ€ ๋งํ–ˆ๋“ฏ์ด get-pip.py๊ฐ€ ํ•˜๋Š” ์œ ์ผํ•œ "์ถ”๊ฐ€" ์ž‘์—…์€ ์ธ์ฆ์„œ์˜ ์••์ถ•์„ ํ’€๊ณ  ์ธ์ฆ์„œ์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. virtualenv์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋„คํŠธ์›Œํฌ์— ๋„๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ ์ƒˆ๋กœ์šด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ž˜ ์ž‘๋™ํ•˜๋ฉฐ ๋” ํฐ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํŠ€๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‹ค๋ฅธ IMO๋ณด๋‹ค ํ›จ์”ฌ ๋งŽ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๋” ์˜ํ–ฅ๋ ฅ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. :)

๋‚˜๋Š” pip๋ฅผ zip ์•ฑ์œผ๋กœ ๋นŒ๋“œํ•œ PR์„ ํ•œ ๋ฒˆ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์ง€๋งŒ ์ž‘๋™ํ–ˆ์ง€๋งŒ IIRC์—์„œ๋Š” pip๊ฐ€ ์™„์ „ํžˆ ์ž‘๋™ํ•˜๋„๋ก ๋ณ€๊ฒฝํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

pip๊ฐ€ PEP 517์— ๋Œ€ํ•œ ์ž์ฒด ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๋กœ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ์€ ์•ฝ๊ฐ„ ๋ณต์žกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ํƒ์ƒ‰ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ์€ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ shiv(๋˜๋Š” ๋‹ค๋ฅธ ์ž๋™ ์••์ถ• ํ’€๊ธฐ ์˜ต์…˜)๋Š” pip๋ฅผ zip ์‹คํ–‰ ๊ฐ€๋Šฅ์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค pip์— ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์ด๊ฒƒ์ด ํ˜„์‹œ์ ์—์„œ ํŠน๋ณ„ํžˆ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. surepip์€ ์ด๋ฏธ wheel-on-path ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๋˜‘๊ฐ™์ด ํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋” ํฐ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋ชจ๋‘ ํŠ€๊ธด ํ›„ ๋Œ€์ฒด pip ๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํ•‘์„ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž ์žฌ์ ์œผ๋กœ stdlib์— ๋‹ค์‹œ ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋” ํฐ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋ชจ๋‘ ํŠ€๊ธด ํ›„ ๋Œ€์ฒด ํ• ๋ถ€ํŠธ์ŠคํŠธ๋žฉ์„ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[์šฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ ๋”ฐ๋ฅด๊ณ  ์žˆ๋Š” ๊ณ„ํš]์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ;)]

ํ”ผ๋“œ๋ฐฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งํฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค . https://github.com/gaborbernat/virtualenv/tree/rewrite/src/virtualenv ์—์„œ ์ดˆ๊ธฐ ์ž‘์—…์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค 20.0.0 ์ถœ์‹œํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ venv๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ +1์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด PyPy์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ๋” ๊ฐ„๋‹จํ•ด์ง‘๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์žฌ์ž‘์„ฑ์€ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฒƒ์„ ๋ณด๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ๋Š” ๊ฒƒ์ด ํŽธ์•ˆํ•˜๋‹ค๊ณ  ๋Š๋ผ๋Š” ์ƒํƒœ์— ์ด๋ฅด๋ €์Šต๋‹ˆ๋‹ค. ์ด ์ผ์„ ๋„์™€์ค„ ์ž์œ  ์‹œ๊ฐ„์ด ์žˆ์œผ๋ฉด ์ €์—๊ฒŒ ์—ฐ๋ฝํ•˜์‹ญ์‹œ์˜ค. ์›”๋ง๊นŒ์ง€ ์ถœ์‹œํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค ๐Ÿคž ์ฐธ๊ณ  https://github.com/pypa/virtualenv/milestone/7 ์•„์ง ๊ตฌํ˜„ํ•ด์•ผ ํ•˜์ง€๋งŒ ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ๊ฑฐ๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”์‹ . https://github.com/pypa/virtualenv/pull/1481/ ์—์„œ ํ”ผ๋“œ๋ฐฑ PR์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ์š”์ฒญ: ์‚ฌ์šฉ์ž ์ง€์ • ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด env.txt ํŒŒ์ผ์„ ํ‘œ์ค€ ํ˜•์‹์œผ๋กœ venv bin ๋””๋ ‰ํ† ๋ฆฌ์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

VARNAME=value
OTHERVAR=othervalue

๋‚ด๊ฐ€ ๋‹น์‹ ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์•„์š”? ์ด๋Ÿฌํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ์–ธ์ œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ, ์„ค์ •๋ฉ๋‹ˆ๊นŒ?

ํŽธ์ง‘ํ•˜๋‹ค. NM. https://github.com/pypa/virtualenv/issues/1124์—์„œ ํ™•์žฅํ•œ ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค

์ž‘์€ ์—…๋ฐ์ดํŠธ; ๋‚˜๋Š” ์—ฌ์ „ํžˆ ์•ฝ๊ฐ„์˜ ์‚ฌ๋ž‘์ด ํ•„์š”ํ•œ ๋‘ ๊ฐ€์ง€๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ์ฐจ๋‹จ ๋ฌธ์ œ๋ฅผ ๋‹ซ์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ์—๋Š” ํ—ค๋” ํฌํ•จ + ์•ฑ ๋ฐ์ดํ„ฐ์— ์ผ๋ถ€ ์ž ๊ธˆ์ด ์ ์šฉ๋œ python ์งˆ๋ฌธ ํ˜ธ์ถœ ์บ์‹ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ๋ณ‘๋ ฌ๋กœ(๋‹ค๋ฅธ ์œ„์น˜์—) ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์†๋„์—์„œ๋Š” ๋ฉฐ์น  ๋Šฆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ... ํ™•์‹คํžˆ 2์›” 7์ผ๊นŒ์ง€ ๋‚˜๊ฐ€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์‹œ ์ธก๋ฉด์—์„œ ์šฐ๋ฆฌ์˜ ๊ณ„ํš์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ฉ”์ธ ๋ฆด๋ฆฌ์Šค ์ด์ „์— ๋ฒ ํƒ€ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋ž˜, ์›”์š”์ผ์— ๋ญ”๊ฐ€๋ฅผ ๋‚ด๋ณด๋‚ด๊ณ  ์‹ถ์–ด... ๊ทธ๋ฆฌ๊ณ  ํ”ผ๋“œ๋ฐฑ, ์ˆ˜์ •์„ ์œ„ํ•ด ์ž ์ •์ ์œผ๋กœ ์ผ์ฃผ์ผ์„ ๋น„์šฐ๊ณ ... ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋งˆ์Šคํ„ฐ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ณ  ๋ฆด๋ฆฌ์Šค๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

์ผ์ฃผ์ผ์ด๋ฉด ์ถฉ๋ถ„ํ•  ๊ฒƒ์ด๋ผ๊ณ  100% ํ™•์‹ ํ•  ์ˆ˜๋Š” ์—†์œผ๋ฉฐ ๋ฒ ํƒ€๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์—ฌ๋Ÿฌ ์ฑ„๋„์„ ํ†ตํ•ด ํ™•์‹คํžˆ ์†Œํ†ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ณณ์˜ ํ‚ค์›Œ๋“œ๋Š” ์ž ์ •์ ์œผ๋กœ . ๋‚ด๊ฐ€ ๋“ค์ธ ๋…ธ๋ ฅ์˜ ์–‘์„ ๊ฐ์•ˆํ•  ๋•Œ ๋‚˜๋Š” ์—ฌ๊ธฐ์—์„œ ๋‚™๊ด€์ ์ด๋‹ค. ๋‚˜๋Š” ํฐ ๋ฌธ์ œ๋ฅผ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์ง€๋งŒ ๐Ÿคทโ€โ™‚

๋ฒ ํƒ€๊ฐ€ ๋‚˜์˜ค๋ฉด์„œ ์ด ๋ฌธ์ œ๊ฐ€ ๋ชฉ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์ด๋งŒ ๋งˆ์น˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ „์šฉ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋” ์ง‘์ค‘์ ์œผ๋กœ ๋…ผ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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