Virtualenv: pip ์‹คํ–‰ ํŒŒ์ผ์—์„œ Shebang ๊ธธ์ด๊ฐ€ ์ดˆ๊ณผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2014๋…„ 04์›” 25์ผ  ยท  16์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pypa/virtualenv

์ƒˆ virtualenv๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ํ•ด๋‹น virtualenv์— ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒƒ๋“ค ์ค‘ ํ•˜๋‚˜๋Š” python ํŒจํ‚ค์ง€ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์ธ pip์ž…๋‹ˆ๋‹ค.

Linux์—์„œ pip ์‹คํ–‰ ํŒŒ์ผ์€ ์…ธ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. ์ด pip ์…ธ ์Šคํฌ๋ฆฝํŠธ์˜ ๋งจ ์œ„์—๋Š” virtualenv์—์„œ python ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์ง€์ •ํ•˜๋Š” shebang(#!) ์ค„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค„์—๋Š” ํŒŒ์ด์ฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ๋Œ€ํ•œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

virtualenv์˜ python ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ๋Œ€ํ•œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ๋งค์šฐ ๊ธธ๋ฉด(๊นŠ๊ฒŒ ์ค‘์ฒฉ๋˜๊ฑฐ๋‚˜ ํฐ ๊ฒฝ๋กœ ์ด๋ฆ„) shebang ํ–‰์— ํ—ˆ์šฉ๋˜๋Š” ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์ดˆ๊ณผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

shebang ๋ผ์ธ์˜ ์ตœ๋Œ€ ๊ธธ์ด๋Š” /usr/include/linux/binfmts.h์— ์„ค์ •๋œ BINPRM_BUF_SIZE์— ์˜ํ•ด ์ปค๋„์—์„œ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ณธ Linux ์‹œ์Šคํ…œ์—์„œ ์ด ์ œํ•œ์€ 128๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ python virtualenv๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์ง€๋ฉด ํ•ด๋‹น virtualenv์˜ pip๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. "์ž˜๋ชป๋œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ: ํ•ด๋‹น ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค" ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ pip๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  virtualenv์˜ python ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  pip ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์†Œ์Šค๋กœ python์— ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๊ฒƒ์„ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ์ƒ๊ฐํ•œ๋‹ค๋ฉด:

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ pip๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  virtualenv์˜ python ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  pip ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์†Œ์Šค๋กœ python์— ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฆ‰, pip install -r requirements.txt ๋Œ€์‹  python -m pip install -r requirements.txt

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

์ €๋„ ์ด ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋„.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

๋ž˜ํผ ์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ค์ œ๋กœ setuptools(sdist์—์„œ ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ) ๋˜๋Š” distlib(ํœ ์—์„œ ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ)์— ์˜ํ•ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ˆ˜์ • ์‚ฌํ•ญ์€ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ ์‹ค์ œ๋กœ ์š”์ฒญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์ด OS ์ œํ•œ์ด๋ผ๋ฉด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ •์ด _์—†์„๊นŒ์š”_? ํ•œ๋•Œ Perl์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋งˆ๋ฒ•์˜ ์ฃผ๋ฌธ์„ ์‚ฌ์šฉํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

#!/bin/sh
eval 'exec /the/long/interpreter/path/to/python $0 ${1+"$@"}'

Python์ด eval-exec ํ–‰์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๋„๋ก ์ถ”๊ฐ€ ํ•ญ๋ชฉ์ด ํ•„์š”ํ•˜์ง€๋งŒ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

setuptools ๋ฐ distlib์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ ์š”์ฒญ์œผ๋กœ ์ด์™€ ๊ฐ™์€ ๊ฒƒ์„ ์ œ์•ˆํ•˜๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ์ด ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ python virtualenv๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์ง€๋ฉด ํ•ด๋‹น virtualenv์˜ pip๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์‹œ์Šคํ…œ์—์„œ virtualenv ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ _์ •๋ง_ ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ช…๋ น์€ ์ด๋Ÿฌํ•œ ๊ธด ๊ฒฝ๋กœ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ๊ฒƒ์ด ๋ณธ์งˆ์ ์œผ๋กœ ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ผ๋ถ€ ๊ฒฝ๊ณ (๋˜๋Š” ์˜ค๋ฅ˜)๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ธฐ๋ณธ๊ฐ’.

์ด๊ฒƒ๋„ ๋•Œ๋ ค์š”. pwd์— ๋Œ€ํ•œ _๋งค์šฐ_ ๊ธด ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š” Jenkins ๋นŒ๋“œ ๋‚ด์—์„œ pip ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŠนํžˆ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ํฅ๋ฏธ๋กญ๊ฒŒ๋„ ๋™์ผํ•œ ๋นŒ๋“œ ์Šฌ๋ ˆ์ด๋ธŒ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์œผ๋ฉฐ(๋ชจ๋‘ BINPRM_BUF_SIZE๊ฐ€ 128๋กœ ์„ค์ •๋˜๊ณ  ๋™์ผํ•œ pip ๋ฐ python ๋ฐ virtualenv ๋ฒ„์ „์ด ์žˆ์Œ) ๊ฒฝ๋กœ ๊ธธ์ด๊ฐ€ ๋‹ค์–‘ํ•˜๋”๋ผ๋„ ์ผ๋ถ€์—์„œ๋Š” ์ด๋Ÿฌํ•œ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@b-long์˜ ์ œ์•ˆ์ด ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. virtualenv ๊ฐ€ ํ˜„์žฌ ์‹œ์Šคํ…œ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋ž˜ํผ๋ฅผ ๋งŒ๋“ค๋ ค๋Š” ๊ฒฝ์šฐ ์ตœ์†Œํ•œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฝ๊ณ ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

virtualenv๊ฐ€ ์ด ์ƒํ™ฉ์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” C ํ—ค๋”์˜ ๊ฐ’์„ ์ •ํ™•ํžˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์ด ์ œํ•œ์ด ์žˆ๋Š” ์‹œ์Šคํ…œ์— ์žˆ์Œ์„ ์–ด๋–ป๊ฒŒ ๊ฐ์ง€ํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค(Windows์—๋Š” ์—†์ง€๋งŒ OSX์—๋Š” ์žˆ์Šต๋‹ˆ๊นŒ?)

virtualenv ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ OS ์ œํ•œ์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ฐ€์น˜์žˆ๋Š” ์ผ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ƒ๊ฐ...

  1. ctypes ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
  2. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„๋‹จํ•œ ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?
# on Linux, BINPRM_BUF_SIZE == 128, giving us a maximum shebang length of 127
# 2 bytes for #!, 11 bytes for '/bin/python' leaves us with 114
if sys.platform() == 'Linux' and len(home_dir) > 114:
    log.warn("bin/activate may not work your system, as the length of the shebang line will exceed 128 characters")
  1. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.
  2. ๋‚˜๋Š” Windows ์‚ฌ์šฉ์ž์ด๋ฏ€๋กœ ์˜๊ฒฌ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด PR์„ ์˜ฌ๋ฆฌ๊ณ  Linux ์‚ฌ๋žŒ๋“ค์ด ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์„ ๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค ...

๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค๋„ ๋‚ด๊ฐ€ ์ œ์•ˆํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋†’์ด ํ‰๊ฐ€ํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์˜๊ฒฌ์„ ์ œ์‹œํ•˜๊ณ  PR์— ์˜๊ฐ์„ ์ฃผ๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ์„ ์—ด์–ด๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? @jantman ๊ณผ @pfmoore ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :smile:

BINPRM_BUF_SIZE ๋Š” ์ปค๋„ ํ—ค๋”์— ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ ์†Œ์ˆ˜์˜ ์ปค๋„ ๊ธฐ๋Šฅ์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์ด๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(ํ—ค๋”์—์„œ ์ฝ๊ธฐ๊ฐ€ ์งง๊ณ  ์‹คํ˜„ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Œ).

์ฆ‰, ์ด๊ฒƒ์ด ๊ณง ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค( ์—ฌ๊ธฐ์— ์ตœ๋Œ€ shebang ๊ธธ์ด์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ๊ฐœ์š”๊ฐ€ execve(2) ๋งค๋‰ด์–ผ ํŽ˜์ด์ง€ ์˜ "์ฐธ๊ณ " ์„น์…˜์—๋„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ "์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์‰˜ ์Šคํฌ๋ฆฝํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ์ตœ๋Œ€ ์ค„ ๊ธธ์ด๊ฐ€ 127์ž๊นŒ์ง€ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค."๋ผ๊ณ  ๋ช…์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  POSIX ํ˜ธํ™˜ ์šด์˜ ์ฒด์ œ์—๋Š” ์ผ์ข…์˜ ์ œํ•œ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€๋งŒ, ๊ทธ ์ค‘ ์ผ๋ถ€, ํŠนํžˆ BSD ๋ณ€ํ˜•์—๋Š” 8,000์ž๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ์ œํ•œ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ์ œ์•ˆ(ํ”Œ๋žซํผ์ด Linux์ด๊ณ  ์ค„์ด 127์ž๋ณด๋‹ค ๊ธด ๊ฒฝ์šฐ)์ฒ˜๋Ÿผ ์ˆœ์ง„ํ•œ ๊ฒƒ์„ ๋‹จ์ˆœํžˆ ํ•˜๋“œ ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ธ ์†”๋ฃจ์…˜์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ๋‚˜์—๊ฒŒ๋Š” ์ง€๋‚˜์น˜๊ฒŒ ์กฐ์žกํ•˜๊ณ  ๊ตฌ์ฒด์ ์ด๋ฉฐ ์œตํ†ต์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.

virtualenv ์— ๋„ˆ๋ฌด ๋งŽ์€ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด๊ฒƒ์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์—ฌ์ „ํžˆ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. d ์•ฝ๊ฐ„์˜ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํ—ˆ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •).

์ฃผ์–ด์ง„ ๊ฒฝ๋กœ๊ฐ€ ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ ๊ธธ์ด์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๊ฐœ๋… ์ฆ๋ช… ์ฝ”๋“œ๊ฐ€ ์žˆ์ง€๋งŒ ๋””์Šคํฌ์— ํŒŒ์ผ์„ ์ž‘์„ฑํ•œ ๋‹ค์Œ ์ถœ๋ ฅ์„ ์บก์ฒ˜ํ•˜๊ธฐ ์œ„ํ•ด ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์†Œ ๋ณด๊ธฐ ํ‰ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์ œ ๋ฐ ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. https://gist.github.com/jantman/ba39f98936643bc948bd

๋ฐค์ด๋ผ๊ณ  ๋ถˆ๋Ÿฌ์•ผ ํ•˜๊ฒ ์ง€๋งŒ, ์ด์ฏค์—์„œ ๋‹ค์‹œ ํ•ด๋ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ Linux ์‚ฌ์šฉ์ž๋‚˜ ๋น„์Šทํ•œ ์ œํ•œ์ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ OS ์‚ฌ์šฉ์ž์˜ ์˜๊ฒฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

ํ•œ๊ณ„์— ๋Œ€ํ•ด ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊นŒ๋‹ค๋กœ์šด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€์‹  ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ bash ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ํŒŒ์ด์ฌ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ˜ธ์ถœ๋˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ๋ณต์ˆญ์•„ ๊ฐ™๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•ด์„œ:

  1. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด setuptools ๋ฐ distlib PR์„ ์ œ์ถœํ•˜์„ธ์š”. ์ฝ”๋“œ๋Š” virtualenv ๋˜๋Š” pip์— ์—†์Šต๋‹ˆ๋‹ค.
  2. ํ—ˆ์šฉ๋˜๋ ค๋ฉด ์ฝ”๋“œ๊ฐ€ Linux๋ฟ๋งŒ ์•„๋‹ˆ๋ผ OSX, BSD ๋“ฑ ์ง€์›๋˜๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋ฌผ๋ก  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์—†๋Š” ๊ฒฝ์šฐ ํ”Œ๋žซํผ๋ณ„ ์กฐ๊ฑด๋ถ€ ํ—ˆ์šฉ).

virtualenv ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ์Šต๋‹ˆ๋‹ค(๊ธด ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์— ์ „์ฒด Python ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์„ค์น˜ํ•˜์—ฌ ๋™์ผํ•œ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Œ).

์šฐ๋ฆฌ๋Š” ๋ฐฉ๊ธˆ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

PATH์—์„œ ํŒŒ์ด์ฌ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? virtualenv๋Š” ์ด๋ฏธ bin dir ์•ž์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

#!/usr/bin/env python

virtualenv๋Š” ์ด๋ฏธ bin dir ์•ž์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

virtualenv๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ. Virtualenv๋Š” ํ™œ์„ฑํ™” ์—†์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๊ฒƒ์„ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ์ƒ๊ฐํ•œ๋‹ค๋ฉด:

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ pip๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  virtualenv์˜ python ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  pip ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์†Œ์Šค๋กœ python์— ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฆ‰, pip install -r requirements.txt ๋Œ€์‹  python -m pip install -r requirements.txt

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