Pip: ์ƒˆ๋กœ์šด ํ•ด์„๊ธฐ: ์ถœ์‹œ, ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„ ๋ฐ ๊ฐœ๋ฐœ ํ๋ฆ„

์— ๋งŒ๋“  2019๋…„ 05์›” 25์ผ  ยท  83์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pypa/pip

์ €๋Š” #988์— ๋Œ€ํ•ด ์กฐ๊ธˆ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ํŒŒ์†์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์œ ์šฉํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์ตœ๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋กค์•„์›ƒํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๋งˆ์นจ๋‚ด ๋‘ ์—„์ง€์†๊ฐ€๋ฝ + ์‹œ๊ฐ„์ด ๋‚จ์•„์„œ ์ด ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ ๋‹ค์Œ ๋‚ด์šฉ์€ ๋ชจ๋‘ ๋…ผ์˜ ๋Œ€์ƒ์ž…๋‹ˆ๋‹ค. :)


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

ํ”ผ๋“œ๋ฐฑ ๊ด€๋ฆฌ ์ธก๋ฉด์—์„œ ๋‹ค๋ฅธ ์ €์žฅ์†Œ์˜ ์ด์Šˆ ํŠธ๋ž˜์ปค์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์š”์ฒญํ•  ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฌธ์ œ ์ถ”์ ๊ธฐ์— ๋ฌธ์ œ๋ฅผ ๋‘๋Š” ์ด์œ ๋Š” ์—ฌ๊ธฐ์—์„œ ๋…ธ์ด์ฆˆ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋” ์ง‘์ค‘์ ์ธ ํ† ๋ก /์กฐ์‚ฌ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฃผ์š” ์ด์Šˆ ํŠธ๋ž˜์ปค(์ด๊ฒƒ)์— "ํ•ด๊ฒฐ์˜ ๋ฒ„๊ทธ" ์ด์ƒ์˜ ๊ฒƒ์„ ๋ฒ„๋ธ”๋งํ•ฉ๋‹ˆ๋‹ค.

์ „ํ™˜ ์ธก๋ฉด์—์„œ ์ƒˆ๋กœ์šด ํ•ด๊ฒฐ ๋…ผ๋ฆฌ์— ๋Œ€ํ•œ ์ถฉ๋ถ„ํ•œ ํ™•์‹ ์ด ์ƒ๊ธฐ๋ฉด ์ „ํ™˜์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ํ”Œ๋ž˜๊ทธ ๋’ค์— ๋ฐฐ์น˜ํ•˜๋ฉด ๋ฆด๋ฆฌ์Šค์—์„œ ์ง์ ‘ ์ „ํ™˜ํ•˜๊ฑฐ๋‚˜ ์ƒˆ ํ™•์ธ์ž๋ฅผ "์•ˆ์ •ํ™”"ํ•˜๊ณ  (๋‹ค์ค‘ ๋ฆด๋ฆฌ์Šค?) "์ „ํ™˜ ๊ธฐ๊ฐ„"์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ๋œ ์ •ํ™•ํ•œ ์ ˆ์ถฉ์•ˆ์„ ๋” ์ž˜ ์ดํ•ดํ•˜๊ฒŒ ๋˜๋ฉด ๋‚˜์ค‘์— ์ „ํ™˜ ๊ณ„ํš์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

git/GitHub ์ธก๋ฉด์—์„œ ์ด๊ฒƒ์€ ์•„๋งˆ๋„ pip ๋‚ด์—์„œ ์ตœ์ดˆ์˜ "์‹คํ—˜์ " ๊ธฐ๋Šฅ ๊ตฌํ˜„์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. FWIW, ์ €๋Š” ํฌํฌ์— ๋Œ€ํ•œ ์‹คํ—˜ ๋“ฑ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ •๊ธฐ์ ์œผ๋กœ ์ง„ํ–‰ ์ƒํ™ฉ์„ pip์˜ ๊ธฐ๋ณธ ์ €์žฅ์†Œ ์ž์ฒด์— ๋ณ‘ํ•ฉํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค(๋‹จ๋… ์ฝ”๋“œ, pip._internal.resolution). ๋ฉ”์ธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์‹œ๋„๋Ÿฝ๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ์ง€๋Š” ์•Š์ง€๋งŒ master ๋ฅผ ์ด ์ž‘์—…๊ณผ ๋™๊ธฐํ™”๋œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.


ํ”„๋กœํ† ํƒ€์ž…์„ ๋นŒ๋“œํ•  ๋•Œ ๋นŒ๋“œ ๋กœ์ง์„ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ๊ณ ํ†ต์Šค๋Ÿฌ์› ๋Š”์ง€ ์ด ์ž‘์—…์„ ์œ„ํ•ด #5051์„ ์ฐจ๋‹จ๊ธฐ๋กœ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

dependency resolution maintenance

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

๋‚˜๋Š” ์–ด๋ฆฌ๊ณ  ๋ฉ์ฒญํ•˜๊ณ  ๋‚™๊ด€์ ์ด์•ผ

:-) ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๋•Œ๋•Œ๋กœ ๋„ˆ๋ฌด ๋Š™๊ณ  ์ง€์น˜๊ณ  ๋ƒ‰์†Œ์ ์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์˜ ์ฒ ํ•™๊ณผ ํ•จ๊ป˜ ๊ฐ€์ž, ํ›จ์”ฌ ๋” ์ข‹๊ฒŒ ๋“ค๋ฆฐ๋‹ค :-)

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

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

ํ•œ ๊ฐ€์ง€ ์ด์œ ๋Š” ๋” ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒฝ์šฐ ์ƒˆ ๋™์ž‘์„ ๊ป๋‹ค๊ฐ€ ์ผฐ์„ ๋•Œ ์†์ƒ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์ ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋Œ€์ฒ˜ํ•ด์•ผ ํ•  ํ–‰๋™์˜ ๋งŽ์€ ์ž ์žฌ์ ์ธ ์ฐจ์ด.

์—ฌ๊ธฐ์—๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์‚ฌ์šฉํ•ด ๋ณด๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๋„๋ก ์š”์ฒญํ•˜๋Š” CTA๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

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

๋‚ด ๊ฐœ์ธ์ ์ธ ๋Š๋‚Œ์€ "์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ"์ด โ€‹โ€‹์šฐ๋ฆฌ๊ฐ€ ์ด์ „์— ์‹œ๋„ํ•œ ๊ฒƒ์— ๋Œ€ํ•œ ํฅ๋ฏธ๋กœ์šด ๋ณ€ํ˜•์ด์ง€๋งŒ ๊ถ๊ทน์ ์œผ๋กœ ํฐ ์ฐจ์ด๊ฐ€ ์—†์„ ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ž๋™ํ™”๋œ ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๊ธฐ๋ณธ ์˜ต์…˜์ด ์žˆ๋Š” ์ตœ์‹  pip๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ƒˆ pip ๋ฒ„์ „์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์ „์— ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(PEP 517์—์„œ ์ด๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค).

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

git/GitHub ์ธก๋ฉด์—์„œ ์ด๊ฒƒ์€ ์•„๋งˆ๋„ pip ๋‚ด์—์„œ ์ตœ์ดˆ์˜ "์‹คํ—˜์ " ๊ธฐ๋Šฅ ๊ตฌํ˜„์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฌด์Šจ ๋ง์ธ์ง€ 100% ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” "์ด์ „ ๋ฐฉ์‹"์ด ์—ฌ์ „ํžˆ ์กด์žฌํ•˜๋Š” ๋™์•ˆ ์ถ”๊ฐ€๋œ ๊ณผ๊ฑฐ์— ํ™•์‹คํžˆ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” "๊ธฐ๋ณธ์ ์œผ๋กœ ๊บผ์ ธ ์žˆ๊ณ  ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •"ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์ง€๋Š” ์•Š์ง€๋งŒ ๊ทธ ์ด์œ ๋Š” ๋Œ€๋ถ€๋ถ„ ํ”ผ๋“œ๋ฐฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(์œ„ ์ฐธ์กฐ).

์ด ํฌ์ŠคํŠธ ํ•˜๋‚˜๋ฅผ ์“ฐ๋Š” ๋ฐ 60๋ถ„ ์ •๋„(re-re-re-re-re-)๋ฅผ ์ผ์œผ๋ฏ€๋กœ ์ด์ œ ๋‰ด์š•์˜ ์žฅ์†Œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค! ๋น ๋ฅธ ์‘๋‹ต์ด ์—†์œผ๋ฉด ๊ด€๊ด‘ ๋ชจ๋“œ์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.


์ƒˆ ์ฝ”๋“œ์™€ ํ˜„์žฌ ์ฝ”๋“œ ๊ฐ„์— ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์ƒˆ ์ฝ”๋“œ ๊ฒฝ๋กœ์™€ ํ˜„์žฌ ์ฝ”๋“œ ๊ฒฝ๋กœ ๊ฐ„์— ๋” ๋งŽ์€ ๊ณต์œ ๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก ์ž‘์—…ํ•˜๋ฉด์„œ ํ˜„์žฌ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ„ฐ๋งํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ! ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ #5051์„ ์•ž์— ๋‘๋Š” ์ด์œ ์˜ 80%์ž…๋‹ˆ๋‹ค. ์ €๋Š” ๋นŒ๋“œ ๋กœ์ง์— ์ถ•์ ๋œ ๋งŽ์€ ๊ธฐ์ˆ ์  ๋ถ€์ฑ„๋ฅผ ๊ฐš์•„ ์žฌ์‚ฌ์šฉ(์ „๋ถ€?)ํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฝ๋„๋ก ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์˜ ๋ฌด๋ฆฌ๋Š” :fire: ํ•ด์•ผ ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ํ™•์‹คํžˆ ํ•ฉ๋ฆฌ์ ์ธ ๋งŒํผ ์žฌ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” "๊ธฐ๋ณธ์ ์œผ๋กœ ๊บผ์ ธ ์žˆ๊ณ  ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •"ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋„ค, ์ •๋ง์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ ์—ฌ๊ธฐ์„œ ๊ฐœ๋ฐœ ํ๋ฆ„์— ๋Œ€ํ•ด ์•”์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. IMO ๋นˆ ์ธํ”„๋ผ(์ดํ›„ PR์—์„œ ๊ตฌ์ฒดํ™”๋  raise NotImplementedError() ์— ๋ถˆ๊ณผํ•œ ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” ํด๋ž˜์Šค)๋ฅผ ๋ณ‘ํ•ฉํ•ด๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. "experimental/alpha"๋กœ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ์‹œ๋œ ํ”Œ๋ž˜๊ทธ ๋’ค์—๋งŒ ์‚ฌ์šฉ๋˜๋Š” ํ•œ master ๋ถ„๊ธฐ์— ๋ชจ๋“  ๊ฒฝ์šฐ(ํ•˜ํ”„ ๋ฒ ์ดํฌ๋œ ๊ตฌํ˜„)๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ: ํ”ผ๋“œ๋ฐฑ

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

์ตœ๊ทผ์˜ "์ฃผ์š”" ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‚ดํŽด๋ณด๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์›Œํฌํ”Œ๋กœ๊ฐ€ ์ค‘๋‹จ๋˜์—ˆ์„ ๋•Œ ๋ฌธ์ œ๋ฅผ ์ธ์‹ํ•˜๊ณ  ์ด์— ๋Œ€ํ•ด ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด ์—ฐ๋ฝํ•˜๋Š” ๋ฐ˜์‘์ ์ธ ํ”ผ๋“œ๋ฐฑ์ด ๋Œ€๋ถ€๋ถ„์ด์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค ์ค‘ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์€ ๋งˆ์ฐฐ์„ ์ผ์œผํ‚ค๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์ •๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค„ ์‹œ๊ฐ„์ด ์—†์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋˜ํ•œ ์šฐ๋ฆฌ์˜ "์ดํƒˆ ์˜ˆ์‚ฐ"[1]์— ๋งŽ์€ ๋น„์šฉ์„ ๋“ค์ด๋Š”๋ฐ, Python Packaging์— ์–ด์จŒ๋“  ์–ผ๋งˆ ๋‚จ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ง€์ถœํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค[2].

FWIW, ๋‚˜๋Š” ๊ฝค ๋ˆˆ์— ๋„๋Š” ์œ„์น˜(์˜ˆ: ๋‚ด ๊ฐœ์ธ ๋ธ”๋กœ๊ทธ๊ฐ€ ์•„๋‹˜)์— ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์„ ์ž‘์„ฑํ•˜๊ณ , ํŒŸ์บ์ŠคํŠธ, ์ ์‹œ์— ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ด๋ฉ”์ผ ๋“ฑ์„ ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด PyPI ์ถœ์‹œ์—์„œ ๋ช‡ ๊ฐ€์ง€ ์•„์ด๋””์–ด๋ฅผ ๋นŒ๋ฆด ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๋” ๋งŽ์€ ์„ ํ–‰ ๊ธฐ์ˆ ์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. /ํ†ต๋กœ๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ PyCon์—์„œ ๋ฐฐ์šด (๋งŽ์€!) ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฑ„๋„์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฑ„๋„์€ ์ •๋ณด๋ฅผ ํผ๋œจ๋ฆฌ๋Š” ๋ฐ ๋„์›€์ด ๋˜์ง€๋งŒ ํผ๋œจ๋ฆด ๊ฒƒ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๊ณ  ์ฐพ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ ๋งํ•ด์„œ, ์ €๋Š” ์šฐ๋ฆฌ๊ฐ€ PEP 517์— ๋Œ€ํ•ด ์ทจํ•œ ๋กค์•„์›ƒ ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•ด ๋น„ํŒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ํŠนํžˆ ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ์ž์› ๋ด‰์‚ฌ์ž๋ผ๋Š” ์‚ฌ์‹ค์„ ๊ฐ์•ˆํ•  ๋•Œ ์ž˜ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ์šฐ๋ฆฌ๊ฐ€ ๊ฒช์—ˆ๋˜ ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ•ญ๋ชฉ์„ ๋ณด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ•ญ๋ชฉ์˜ ๋Œ€๋ถ€๋ถ„์€ ์œ ์ง€ ๊ด€๋ฆฌ์ž์˜ ๋” ๋งŽ์€ ์ž‘์—…์„ ํฌํ•จํ•˜๋ฉฐ ๋‚ด๊ฐ€ ์ด ๋ชจ๋“  ์‹œ๊ฐ„์„ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋Š” ์ฃผ๋œ ์ด์œ ๋Š” ์ด๊ฒƒ์„ ๋ณ€๊ฒฝ ๊ด€๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์žฌ๋ฏธ์žˆ๋Š” ํ•™์Šต ์—ฐ์Šต์œผ๋กœ ๋ณด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์žฌ: ๋ณด์กฐ๊ธˆ

๋„ค, ํ™•์‹คํžˆ ๊ต๋ถ€๊ธˆ/๊ฒฝํ—˜์ด ๋” ๋งŽ์€ ์‚ฌ๋žŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜, ๋กค์•„์›ƒ ๋ฐ ํ…Œ์ŠคํŠธ ์ธํ”„๋ผ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ณด๋‹ค ์•ˆ์ •์ ์ธ ์ฃผ๋‹น ์‹œ๊ฐ„์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์กฐ๊ธˆ ์ž‘์„ฑ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚ด๊ฐ€ ์ง€๊ธˆ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๊ตฌ์ฒด์ ์ธ ๊ณ„ํš์„ ์•Œ์•„๋‚ผ ์‚ฌ๋žŒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

FWIW, PSF๋Š” PyPA/ํŒจํ‚ค์ง• ๊ด€๋ จ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ Changeset Consulting๊ณผ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์ง€์†์ ์ธ ๊ณ„์•ฝ์„ ๋งบ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?


๋Œ€ํ™”์— ๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ๊ณ„ํš ๋‹จ๊ณ„์˜ ์ดˆ๊ธฐ ๋‹จ๊ณ„์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜๋„์ ์œผ๋กœ ์‚ฌ๋žŒ๋“ค์„ @-์–ธ๊ธ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐ์ฃผ:

  1. @ pganssle์ด ์‚ฌ์šฉํ•œ ์ •๋ง ์ข‹์€ ์šฉ์–ด์ธ๋ฐ ์ œ๊ฐ€ ํ™•์‹คํžˆ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  2. ์ด๊ฒƒ์ด ์ œ์•ˆ๋œ "pip-cli" ํŒจํ‚ค์ง€์˜ ๊ตฌํ˜„์ด ์žˆ๊ณ  ๋กค์•„์›ƒ์˜ ๋ชจ์–‘์— ๋Œ€ํ•œ ํ•ฉ๋ฆฌ์ ์ธ ํ•ฉ์˜๊ฐ€ ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  #3164๋ฅผ ๋ฐฑ ๋ฒ„๋„ˆ์— ๋„ฃ์€ ์ด์œ ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์–ด๋ฆฌ๊ณ  ๋ฉ์ฒญํ•˜๊ณ  ๋‚™๊ด€์ ์ด์•ผ

:-) ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๋•Œ๋•Œ๋กœ ๋„ˆ๋ฌด ๋Š™๊ณ  ์ง€์น˜๊ณ  ๋ƒ‰์†Œ์ ์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์˜ ์ฒ ํ•™๊ณผ ํ•จ๊ป˜ ๊ฐ€์ž, ํ›จ์”ฌ ๋” ์ข‹๊ฒŒ ๋“ค๋ฆฐ๋‹ค :-)

๋ถ„๋ช…ํžˆ! ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ #5051์„ ์•ž์— ๋‘๋Š” ์ด์œ ์˜ 80%์ž…๋‹ˆ๋‹ค. ์ €๋Š” ๋นŒ๋“œ ๋กœ์ง์— ์ถ•์ ๋œ ๋งŽ์€ ๊ธฐ์ˆ ์  ๋ถ€์ฑ„๋ฅผ ๊ฐš์•„ ์žฌ์‚ฌ์šฉ(์ „๋ถ€?)ํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฝ๋„๋ก ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์—„์ฒญ๋‚œ!

์ง€๊ธˆ IRC์—์„œ :

[sumanah] pradyunsg: ๋ฆฌ์กธ๋ฒ„์—์„œ ๋” ๋งŽ์€ ์ž‘์—…์„ ๋” ๋นจ๋ฆฌ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ๋„๋ก pip ๋ฐ ํŒจํ‚ค์ง• ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ์žˆ์Šต๋‹ˆ๊นŒ?
....
[pradyunsg] ์‚ฌ์‹ค, ์ง€๊ธˆ https://github.com/pypa/pip/issues/6536 ์— ๋Œ€ํ•œ ์ž…๋ ฅ์ด ์ž‘์—…์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•/์‚ฌ๋žŒ๋“ค๋กœ๋ถ€ํ„ฐ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๋Š” ๋ฐฉ๋ฒ• ๋“ฑ์„ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
....
[sumanah] pradyunsg: re: New Resolver: Rollout, Feedback Loops and Development Flow #6536 -- ์›ํ•˜๋Š” ์ž…๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์ข‹์€ ์•„์ด๋””์–ด์ธ๊ฐ€์š”? pip GitHub ๋ฌธ์ œ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๋Š” ๊ฒƒ์ด ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๊นŒ? ์‹ค์ œ ์ˆ˜๋™ ํ…Œ์ŠคํŠธ ๋ฐ ๊ฐ•๋ ฅํ•œ ํ…Œ์ŠคํŠธ ์ธํ”„๋ผ ๊ตฌ์ถ• ๋ฐ/๋˜๋Š” ์‚ฌ์ „ ์˜ˆ๋ฐฉ์  ํ†ต์‹ ์„ ์–ป๊ธฐ ์œ„ํ•ด ๋ณด์กฐ๊ธˆ ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ด ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๊นŒ?
...
[pradyunsg] ๋„ค -- ์ œ๊ฐ€ ์ œ์•ˆํ•˜๋Š” ์•„์ด๋””์–ด๊ฐ€ ์ข‹์€์ง€. ๋˜ํ•œ ๋กค์•„์›ƒ + ํ”ผ๋“œ๋ฐฑ์„ ๋ณด๋‹ค ์›ํ™œํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ์•„์ด๋””์–ด/์ ‘๊ทผ ๋ฐฉ๋ฒ•/์ƒ๊ฐ์€ ๊ต‰์žฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ:

๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์ข‹์€ ์•„์ด๋””์–ด์ž…๋‹ˆ๊นŒ? ์˜ˆ.

pip GitHub ๋ฌธ์ œ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๋Š” ๊ฒƒ์ด ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๊นŒ? ์˜ˆ. ๋œ ์ „๋ฌธ์ ์ธ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋œ ๊ตฌ์กฐํ™”๋œ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๋ฅผ ์ˆ˜๋ฝํ•˜๋Š” ์ž๋™ํ™”๋œ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ณด๋‹ค ๊ฐ•๋ ฅํ•œ ํ…Œ์ŠคํŠธ ์ธํ”„๋ผ๊ฐ€ ๋„์›€์ด ๋ ๊นŒ์š”? ์˜ˆ, ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ›„์›์ž๊ฐ€ ์šฐ๋ฆฌ ๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.

PyPA ์กฐ์ •/ํ†ต์‹ ์„ ๋•๊ธฐ ์œ„ํ•ด PSF์™€ ๊ธฐ์กด ๊ณ„์•ฝ์— ๋”ฐ๋ผ Changeset(์ €)์ด ์‚ฌ์ „ ์˜์‚ฌ ์†Œํ†ต์„ ํ†ตํ•ด Pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด๋‹ค ์ฒด๊ณ„์ ์ธ ์‹ค์ œ ์ˆ˜๋™ ํ…Œ์ŠคํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ๋กค์•„์›ƒ์„ ์‹œ์ž‘ํ•  ๋•Œ๊นŒ์ง€ ๊ณ„์•ฝ์— ๋‚จ์€ ์‹œ๊ฐ„์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ๊ฒฝํ—˜, ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜/ํ™๋ณด ๋ฐ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•ด ๋” ๋งŽ์€ ๋„์›€์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ๋ณด์กฐ๊ธˆ ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ด ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๊นŒ? ์˜ˆ. PSF ๋ณด์กฐ๊ธˆ ์€ NLNet ๋ณด์กฐ๊ธˆ ( 30,000์œ ๋กœ ๋ฏธ๋งŒ ์š”์ฒญ), ์ž ์žฌ์  ์œผ๋กœ ๊ณผํ•™ ๋ณด์กฐ๊ธˆ์„ ์œ„ํ•œ Chan Zuckerberg ํ•„์ˆ˜ ์˜คํ”ˆ ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด ๋ฐ Mozilla์˜ MOSS ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ž ์žฌ์  ์œผ๋กœ ๊ด€์‹ฌ ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Packaging WG ๋Š” ๋“ฑ๋ก ์‹ ์ฒญ์ž๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @pradyunsg ๋˜๋Š” @pfmoore ๊ฐ€ "์˜ˆ, ํฅ๋ฏธ๋กญ๊ฒŒ ๋“ค๋ฆฌ๋„ค์š”"๋ผ๊ณ  ๊ณ ๊ฐœ๋ฅผ ๋„๋•์ด๊ณ  ์‹ถ๋‹ค๋ฉด WG์™€ ํ•จ๊ป˜ ์ด๋Ÿฌํ•œ ๊ฐ€๋Šฅ์„ฑ์„ ์กฐ์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@pradyunsg ๋˜๋Š” @pfmoore ๊ฐ€ "์˜ˆ, ํฅ๋ฏธ๋กญ๊ฒŒ ๋“ค๋ฆฌ๋„ค์š”"๋ผ๊ณ  ๊ณ ๊ฐœ๋ฅผ ๋„๋•์ด๊ณ  ์‹ถ๋‹ค๋ฉด,

ํ™•์‹คํžˆ ํฅ๋ฏธ๋กญ๊ฒŒ ๋“ค๋ฆฝ๋‹ˆ๋‹ค :-)

@pradyunsg ๋˜๋Š” @pfmoore ๋Š” "์˜ˆ, ํฅ๋ฏธ๋กญ๊ฒŒ ๋“ค๋ฆฌ๋„ค์š”"๋ผ๊ณ  ๊ณ ๊ฐœ๋ฅผ ๋„๋•์ด๊ณ  ์‹ถ์–ดํ•ฉ๋‹ˆ๋‹ค.

_ ๋„๋•๋„๋• _ ์˜ˆ, ํฅ๋ฏธ๋กญ๊ฒŒ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

๋ณด๋‹ค ๊ฐ•๋ ฅํ•œ ํ…Œ์ŠคํŠธ ์ธํ”„๋ผ๊ฐ€ ๋„์›€์ด ๋ ๊นŒ์š”? ์˜ˆ, ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ›„์›์ž๊ฐ€ ์šฐ๋ฆฌ ๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.

@brainwane https://github.com/pypa/integration-test๋„ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„ค์ •์„ ํ•˜๋Š” ๊ฒƒ์ด ์ž๊ธˆ ์กฐ๋‹ฌ์„ ์œ„ํ•œ ๋˜ ๋‹ค๋ฅธ ์ž ์žฌ์  ์˜์—ญ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค . https://wiki.python.org/psf/Fundable%20Packaging%20Improvements์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ™•์ธ! ์ €๋Š” ํŒจํ‚ค์ง• ์›Œํ‚น ๊ทธ๋ฃน์„ ํ†ตํ•ด CZI ๋ณด์กฐ๊ธˆ์„ ์‹ ์ฒญํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด PSF ๋ฐ Chan Zuckerberg Initiative ์‚ฌ๋žŒ๋“ค๊ณผ ์ด์•ผ๊ธฐํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด pip ๋ฆฌ์กธ๋ฒ„๊ฐ€ ์ค‘์š”ํ•œ ์ด์œ ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ Fundable Packaging Improvements ํŽ˜์ด์ง€ ์— ์ถ”๊ฐ€ํ•˜๊ณ  integration-test ํ”„๋กœ์ ํŠธ๋ฅผ ํ•ด๋‹น ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ์šฐ๋ฆฌ์˜ ๋ณต์žกํ•œ ์˜ฌ-์˜จ-์ปค๋งจ๋“œ-๋ผ์ธ ํŒจํ‚ค์ง€ ๋ฐฐํฌ/์„ค์น˜ ๋„๊ตฌ ์ฒด์ธ์„ ์กฐ์‚ฌํ•˜๊ณ , ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๊ณ  ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ฉ˜ํƒˆ ๋ชจ๋ธ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž์™€ ๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ „๋ฌธ๊ฐ€์˜ ์ด๋ฆ„์„ ๋ชจ์œผ๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. , ์œ ์ง€ ๊ด€๋ฆฌ์ž์—๊ฒŒ ์กฐ์–ธํ•ฉ๋‹ˆ๋‹ค.

MOSS, CZI ๋˜๋Š” NLNET์—์„œ ๋ณด์กฐ๊ธˆ์„ ํ†ตํ•ด ๋ˆ์„ ๋ฐ›๋Š”๋‹ค๋ฉด ๋ˆ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋น ๋ฅด๋ฉด 10์›”์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. PSF์—์„œ ์ง์ ‘ ๋ณด์กฐ๊ธˆ์„ ๋ฐ›๋Š” ๊ฒƒ์ด ๋” ๋น ๋ฅผ ์ˆ˜ ์žˆ์ง€๋งŒ "ํ˜„์žฌ ์šฐ๋ฆฌ์˜ ์ดˆ์ ์€ Python ์›Œํฌ์ƒต, ์ปจํผ๋Ÿฐ์Šค(ํŠนํžˆ ์žฌ์ • ์ง€์›) ๋ฐ Python ๋‹ค์–‘์„ฑ/ํฌ์šฉ์„ฑ ๋…ธ๋ ฅ์ž…๋‹ˆ๋‹ค."

ํ•œ ๊ฐ€์ง€ ๊ณ ๋ ค ์‚ฌํ•ญ์€ Brett์™€ ์šด์˜ ์œ„์›ํšŒ์˜ ์‚ฌ๋žŒ๋“ค์ด ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์— ํˆฌ์žํ•˜๊ณ  ์ด๋Ÿฌํ•œ ํ”„๋กœ์ ํŠธ(์„ ๋ณ„ ๋ถ„๋ฅ˜, ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๋“ฑ)๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ผ์ข…์˜ ์œ ๋ฃŒ ์ž์› ํ™•๋ณด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์œผ๋ฉฐ PSF์™€ ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ณง์žฅ. ์žฅ๊ธฐ์ ์ธ ์ง€์† ๊ฐ€๋Šฅ์„ฑ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ๋“ค์—ˆ๊ณ  ๊ฑฐ๊ธฐ์— ์ฐธ์—ฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ๋ฝํ•˜์—ฌ ๊ทธ๋“ค์ด ๋ฌด์—‡์„ ํ•˜๊ณ  ์žˆ๊ฑฐ๋‚˜ ์ƒ๊ฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์ด ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ข‹๊ณ  ์˜ตํŠธ์ธ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ ๊ฐ€์ง€๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฆฌ์กธ๋ฒ„๋ฅผ ์‹œํ—˜ํ•ด ๋ณด๋ผ๊ณ  ๋ฌด์ž‘์œ„๋กœ ํ”„๋กฌํ”„ํŠธํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค(์˜ˆ: ๋งค์šฐ ๋งค์šฐ ๋“œ๋ฌผ๊ฒŒ ํ•œ ๋ฒˆ์— ์„ค์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ, ์ฆ‰ ์˜๊ตฌ์ ์œผ๋กœ ์ผœ๋„๋ก ๊ฐ•์š”ํ•˜์ง€ ์•Š์Œ). ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฆฌ์กธ๋ฒ„๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋„์›€์ด ๋˜์—ˆ๋Š”์ง€ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ๋ฆฌ์กธ๋ฒ„์—๊ฒŒ ์–ด๋–ค ์—ญํ• ์„ ํ–ˆ๋Š”์ง€, ์–ด๋–ค ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๊นŒ?)

์˜ˆ๋ฅผ ๋“ค์–ด ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ๋‚˜ ๋…น์—์„œ ์˜ค๋Š” ์‚ฌ๋žŒ๋“ค์€ ์ผ์ข…์˜ ์ž ๊ธˆ ํŒŒ์ผ๋„ ๊ธฐ๋Œ€ํ•˜๋ฏ€๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋›ฐ์–ด๋“ค์–ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค!

๋‚ด ๊ฐœ์ธ์ ์ธ ๋Š๋‚Œ์€ "์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ"์ด โ€‹โ€‹์šฐ๋ฆฌ๊ฐ€ ์ด์ „์— ์‹œ๋„ํ•œ ๊ฒƒ์— ๋Œ€ํ•œ ํฅ๋ฏธ๋กœ์šด ๋ณ€ํ˜•์ด์ง€๋งŒ ๊ถ๊ทน์ ์œผ๋กœ ํฐ ์ฐจ์ด๊ฐ€ ์—†์„ ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ž๋™ํ™”๋œ ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ๊ธฐ๋ณธ ์˜ต์…˜์ด ์žˆ๋Š” ์ตœ์‹  pip๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ƒˆ pip ๋ฒ„์ „์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์ „์— ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(PEP 517์—์„œ ์ด๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค).

๋ฐ”๋กœ ์ด๋Ÿฐ ์ด์œ ๋กœ ์ธํ•ด ์ผ๋ถ€ PEP 517 ๋ฌธ์ œ์— ์‹œ๋‹ฌ๋ฆฐ ์‚ฌ๋žŒ ์ค‘ ํ•œ ๋ช…์œผ๋กœ์„œ ์ €๋Š” ์‹ค์ œ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์˜ตํŠธ์ธ ๋ฐฉ์‹์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ --no-use-pep517 ํ”Œ๋ž˜๊ทธ ๋ฌธ์ œ ์ดํ›„์— ๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  python ํŒจํ‚ค์ง• ๋‰ด์Šค ์†Œ์Šค๋ฅผ ๊ตฌ๋…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๊ฒƒ๋“ค์— ๋Œ€ํ•ด์„œ๋งŒ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งํ•˜๋ ค๋Š” ๊ฒƒ์€ ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๋‰ด์Šค๋ฅผ ํผ๋œจ๋ฆฌ๋Š” ๊ฒƒ์ด ์–ด๋ ต๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ธฐ ์–ด๋ ค์šด ์ด์œ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ •๋ณด๊ฐ€ ๋” ์ž˜ ๋ณด๊ธ‰๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด๊ฒƒ์— ๊ด€์‹ฌ์„ ๊ฐ€์งˆ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋‹น์‹ ์ด ์ฐพ๊ณ  ์žˆ๋Š” ์ž์›์ด ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?

jriddy๊ฐ€ ๋งํ•˜๋Š” ๊ฒƒ์„ ๊ณ„์†ํ•˜๊ธฐ ์œ„ํ•ด, ์‚ฌ๋žŒ๋“ค์ด ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•˜๊ณ , ๊ฐ๊ฐ์˜ ์ƒˆ ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•ด CI ์„ค์ •์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ •๋ง ์–ด๋ ค์šธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํ›จ์”ฌ ๋” ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒƒ์€ _ํ•˜๋‚˜์˜_ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ๋งŒ ์•Œ๋ฉด ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•˜๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ๊ด€์ ์—์„œ "๋‹ค์Œ์— ๋‚˜์˜ฌ ๋‚ด์šฉ"์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์‚ฌ๋žŒ๊ณผ ํšŒ์‚ฌ๋Š” CI๋ฅผ ์„ค์ •ํ•˜์—ฌ CI๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ค๋ฅ˜๋กœ ์ธํ•œ ๋นŒ๋“œ ์‹คํŒจ ์—†์ด). ๋‚˜๋Š” Rust์™€ ๋น„์Šทํ•œ ๊ฒƒ์„ ์ƒ๊ฐํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๋ณ€๊ฒฝ์ด ๋„๊ตฌ ์ฒด์ธ์˜ "๋ฒ ํƒ€" ์ฑ„๋„์—์„œ ๊ตฝ๊ณ , ๋‹ค๋ฅธ CI ์ฑ„๋„์„ ์„ค์ •ํ•˜์—ฌ ๋ฒ ํƒ€ ๋„๊ตฌ ์ฒด์ธ์—์„œ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๊ณ  ์˜ค๋ฅ˜๋ฅผ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์‰ฝ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ์€ ์ƒˆ๋กœ์šด ๊ฐœ๋ณ„ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•ด ์ง€์†์ ์œผ๋กœ ํ•™์Šตํ•˜๊ฑฐ๋‚˜ CI ์„ค์ •์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ˆ˜๋™์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋Œ€์‹  ์ด ์„ค์ •์— ๋Œ€ํ•ด ํ•™์Šตํ•˜๊ณ  _ํ•œ ๋ฒˆ๋งŒ_ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํ›จ์”ฌ ๋” ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒƒ์€ ์•Œ์•„์•ผ ํ•  ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ๊ฐ€ _ํ•˜๋‚˜๋ฟ์ธ ๊ฒฝ์šฐ,

์–ด๋–ค ์˜๋ฏธ์—์„œ ์ด๊ฒƒ์€ ์ด๋ฏธ --pre ํ˜•ํƒœ๋กœ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? pip์˜ ๋ฒ ํƒ€ ๋ฆด๋ฆฌ์Šค ์ฑ„๋„์ด pip install --upgrade --pre pip ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋›ฐ์–ด๋“ค์–ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค!

@techalchemy ์ œ๋ฐœ, ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค ์ค‘ _๋‹น์‹ _์€ ๋ถ„๋ช…ํžˆ ์ด ํ† ๋ก ์—์„œ ํˆฌ๊ตฌํ•œ ๊ฒƒ์— ๋Œ€ํ•ด ๋ฏธ์•ˆํ•ดํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ๋‹น์‹ ์ด ์ฐพ๊ณ  ์žˆ๋Š” ์ž์›์ด ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?

์–ด๋Š ์ •๋„ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

reg: ๋ฒ ํƒ€ ๋ฆด๋ฆฌ์Šค/pip์šฉ "์ฑ„๋„"

@jriddy ์™€ @chrish42๋ฅผ ๋ถˆ๋Ÿฌ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ทธ๊ฒƒ์ด ํ™•์‹คํžˆ ์œ ์šฉํ•˜๊ณ  ์ค‘์š”ํ•œ ๋Œ€ํ™”๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋Š” ์•ฝ๊ฐ„ OT๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ์—ฌ๊ธฐ์— ํ•œ ๋ฒˆ ์‘๋‹ตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋” ๋…ผ์˜ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ด์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ณผ๊ฑฐ์— ์ด๊ฒƒ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ๊ฐ€์žฅ ์ตœ๊ทผ์—๋Š” pip 10์œผ๋กœ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž˜ ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์•ž์œผ๋กœ ์–ผ๋งˆ๋‚˜ ์ž˜ ์ž‘๋™ํ• ์ง€ ์•ฝ๊ฐ„ ํšŒ์˜์ ์ด์ง€๋งŒ, ์šฐ๋ฆฌ ํ”„๋กœ์„ธ์Šค์˜ ์ผ๋ถ€ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ์ด ์ž‘์—…์ด ์›ํ™œํ•˜๊ฒŒ ์ง„ํ–‰๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ์ƒํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. "๋ฒ ํƒ€ ์ „์šฉ" ๊ธฐ๋Šฅ ์„ธํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„๊นŒ์š”? -X all ๋ฅผ #5727์˜ ๊ตฌ๋ฌธ์œผ๋กœ ์ƒ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋กค์•„์›ƒ ๊ณ„ํš์˜ ์ผ๋ถ€๋กœ ์„ ํƒํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ์ดํฌ. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ์•Œ์•„๋‚ด๊ธฐ ์œ„ํ•ด ์‹œ๊ฐ„๊ณผ ์—๋„ˆ์ง€๋ฅผ ํˆฌ์žํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. :)

https://github.com/pypa/packaging-problems/issues/25#issuecomment -520167480์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์†”๋ฒ„๊ฐ€ pip ๊ฒฝํ—˜์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํ†ตํ•ฉ๋œ ์„ค๋ช…์„ ๊ฐ–๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋” ์—„๊ฒฉํ•œ ์‹œ์Šคํ…œ์œผ๋กœ์˜ ์ „ํ™˜์— ์ขŒ์ ˆํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ „์ฒด์ ์œผ๋กœ ๋” ์•ˆ์ •์ ์ด์–ด์•ผ ํ•˜์ง€๋งŒ ํ˜„์žฌ ์ฐจ๋‹จ๋˜์ง€ ์•Š๋Š” ๊ณณ์—์„œ ์ฐจ๋‹จ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ƒํ™ฉ์ด ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ์—ˆ๊ณ  ์™œ ์ข‹์€ ๋ณ€ํ™”์ธ์ง€์— ๋Œ€ํ•œ ์ค‘์‹ฌ ์„ค๋ช…์ด ์žˆ์œผ๋ฉด ํ™”๋‚œ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํ›จ์”ฌ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ๊ฒŒ์‹œํ•˜๊ณ  ์ถ”๊ฐ€ ์งˆ๋ฌธ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

ํ”„๋ฆฌ๋ฆด๋ฆฌ์ฆˆ๋Š” ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. conda์—๋Š” ์‹œํ—˜ํŒ ์ฑ„๋„์ธ conda-canary๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‚ฌ๋žŒ๋“ค์ด conda ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ canary์— ๋Œ€ํ•ด ์‹คํ–‰ํ•˜๋„๋ก CI ์ž‘์—…์„ ์„ค์ •ํ•˜๋„๋ก ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” ํ•ด๋‹น ๋ฒ„์ „์„ ์ถœ์‹œํ•˜๊ธฐ ์ „์— ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ๊ทธ ์ฑ„๋„์€ ๊ฝค ๋น„์ฐธํ•œ ์‹คํŒจ์˜€์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ์ •๋ง๋กœ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์œ ์ผํ•œ ์‹œ๊ฐ„์€ ๊ทธ๋“ค์ด ๊ณ ๊ตฐ๋ถ„ํˆฌํ•˜๋Š” ์ผ๋ถ€ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์‹  ๋ฆด๋ฆฌ์Šค๋ฅผ ์–ป๊ณ  ์‹ถ์„ ๋•Œ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์˜๋„ํ•œ ์–ผ๋ฆฌ ์–ด๋‹ตํ„ฐ๋กœ๋ถ€ํ„ฐ ๋งŽ์€ ๋ณด๊ณ ๋ฅผ ๋ฐ›์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ ํ”„๋ฆฌ๋ฆด๋ฆฌ์ฆˆ๊ฐ€ ์ข‹์€ ์ƒ๊ฐ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ œ๋Œ€๋กœ ์ง„ํ–‰๋˜์ง€ ์•Š๊ณ  ์‚ฌ๋žŒ๋“ค์ด 700๊ฐœ์˜ ๊ด€๋ฆฌ ๋…ธ๋“œ๋ฅผ ๊นจ๋œจ๋ฆฐ ๊ฒƒ์— ๋Œ€ํ•ด ๋‹น์‹ ์—๊ฒŒ ํ™”๋ฅผ ๋‚ผ ๋•Œ "๊ธ€์Ž„์š”, ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ์ถœ์‹œํ•˜๊ธฐ ์ „์— ์ผ์ฃผ์ผ ๋™์•ˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์™œ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ?"๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 700๊ฐœ ๋…ธ๋“œ์— ๋ฐฐํฌํ•˜๊ธฐ ์ „์— ์ด๋Ÿฌํ•œ ํ•ญ๋ชฉ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?" ๋‹น์‹ ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ผ์„ ๋” ์ž˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ธฐํšŒ๋ฅผ ๋„˜๊ธฐ๋Š” ๊ฒƒ์€ ๊ทธ๋“ค์—๊ฒŒ ๋” ํฐ ๊ณ ํ†ต์„ ์˜๋ฏธํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๋„๋ก ๋„์™€์ฃผ์‹ญ์‹œ์˜ค. ์ด๋Š” ๊ฐ€์น˜ ์žˆ๋Š” ํˆฌ์ž์ด๋ฉฐ CI์˜ ์ผ๋ถ€๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์„ค์ • ์™ธ์—๋Š” ์‹œ๊ฐ„์ด ์ „ํ˜€ ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•ด: ๊ตฌ์„ฑ ์˜ต์…˜(ํ”Œ๋ž˜๊ทธ์— ์ถ”๊ฐ€๋กœ)์ด ์žˆ๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ•ญ์ƒ ๊นƒ๋ฐœ์„ ๋„˜๊ธฐ๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. pip์— ์ด ๊ธฐ๋Šฅ์ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋” ์˜๊ตฌ์ ์ธ ์Šค์œ„์น˜๋ฅผ ์›ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํ•ด๋‹น env var๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ๋ง์”€ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๊นƒ๋ฐœ์— ๊ด€ํ•˜์—ฌ:

pip์˜ CLI ์˜ต์…˜์€ ์ ์ ˆํ•œ ์ด๋ฆ„์œผ๋กœ ๊ตฌ์„ฑ ํŒŒ์ผ ์˜ต์…˜ ๋ฐ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์ž๋™์œผ๋กœ ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค.

@msarahan ์‹œ๊ฐ„ ์„ ๋‚ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! :)

๊นจ์ง„ ์ข…์†์„ฑ์„ ๋ฌด์‹œํ•˜๋Š” "๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ํ•˜๋„๋ก ํ•˜์„ธ์š”" ์˜ต์…˜๊ณผ ๊ด€๋ จํ•˜์—ฌ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™•์ธ ํ”„๋กœ๊ทธ๋žจ์ด ์ผœ์ง„ ํ›„(์˜ˆ: ์‹œ์ž‘ --avoid-conflicts ๋ฅผ ์˜ตํŠธ์ธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒฐ๊ตญ --no-avoid-conflicts ๋กœ ์˜ตํŠธ์•„์›ƒ์œผ๋กœ ์ด๋™ํ•˜์ง€๋งŒ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‘ ์˜ต์…˜์„ ๋ชจ๋‘ ์ˆ˜๋ฝ)

๋˜ํ•œ --ignore-installed ๊ฐ€ ์†”๋ฒ„์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ๊ณ ๋ คํ•˜๊ณ  ์‹ถ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์†”๋ฒ„๊ฐ€ ์ „๋‹ฌ๋˜๋ฉด ์ด๋ฏธ ์„ค์น˜๋œ ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ๋ชจ๋“  ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋ฌด์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ์™ธ์—๋„ ๋ฆฌ์กธ๋ฒ„ ํ†ตํ•ฉ์„ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋” ์ž‘์€ ๋ฆฌํŒฉํ† ๋ง ํŒจ์น˜๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

@ncoghlan ํ•ด์„๊ธฐ์—์„œ "์„ ํƒ ํ•ด์ œ"๋Š” ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ์˜์กด์„ฑ ํ•ด๊ฒฐ(๋”ฐ๋ผ์„œ ๋ฆฌ์กธ๋ฒ„)์„ ์™„์ „ํžˆ ํ”ผํ•˜๋Š” ๊ฒƒ์€ --no-deps ์ž…๋‹ˆ๋‹ค. "์ด ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ๋ฒ„์ „ ์ถฉ๋Œ ๋ฌด์‹œ" ๋˜๋Š” ๊ทธ์™€ ๊ด€๋ จ๋œ ๋‚ด์šฉ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ์ €๋Š” "์ตœ์ดˆ ํ™•์ธ" ํ•ด๊ฒฐ ๋…ผ๋ฆฌ๋ฅผ ์ƒˆ ํ•ด๊ฒฐ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ธฐ๊ฐ„๋ณด๋‹ค ์˜ค๋ž˜ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์˜๋ฏธ๊ฐ€ ์—†๋‹ค๊ณ  ๋ด…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ๋‹ค๋ฃจ์ง€ ์•Š๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด์— ๋Œ€ํ•ด ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. :)


๋ณด๋‹ค ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ๋Š” ์—„๊ฒฉํ•œ ๋ฆฌ์กธ๋ฒ„์˜ ๋™์ž‘์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์›Œํฌํ”Œ๋กœ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ง€์› ์—ฌ๋ถ€/๋ฐฉ๋ฒ•์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ์ด๋Ÿฌํ•œ ์›Œํฌํ”Œ๋กœ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ์ €๋Š” "์ตœ์ดˆ ํ™•์ธ" ํ•ด๊ฒฐ ๋…ผ๋ฆฌ๋ฅผ ์ƒˆ ํ•ด๊ฒฐ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ธฐ๊ฐ„๋ณด๋‹ค ์˜ค๋ž˜ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์˜๋ฏธ๊ฐ€ ์—†๋‹ค๊ณ  ๋ด…๋‹ˆ๋‹ค.

IDK, ์ €๋Š” ์ด "๊ธฐ๋Šฅ"์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋นŒ๋“œ๋กœ ๊ฝค ๋ฏธ์นœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

# install just the packages I've built specifically
pip install --no-index --no-deps --find-links=/path/to/my/local/build/cache -r local-reqs.txt

# ...snip to later in a dockerfile, etc...

# install the deps from public PyPI
pip install -r local-reqs.txt

์ด ๊ฒฝ์šฐ ๋กœ์ปฌ ์กฐํƒ€์‹ค์—์„œ ๋ฏธ๋ฆฌ ๊ฒฐ์ •๋œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ ํ›„ ์ข…์†์„ฑ์„ ํ•ด๊ฒฐํ•˜๋„๋ก ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์ •ํ™•ํ•œ ๋ฒ„์ „์„ ํ•ด๋‹น local-reqs ํŒŒ์ผ๋กœ ์ฝ์–ด์„œ ๋ฆฌ์กธ๋ฒ„๋ฅผ ๋งŒ์กฑ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ pip์˜ ํ˜„์žฌ ๋™์ž‘์€ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์ž„์˜ ๋นŒ๋“œ ์ฃผ์ž… ๋‹จ๊ณ„๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ŠคํŽ˜์ด์Šค๋ฐ” ๋‚œ๋ฐฉ ์›Œํฌํ”Œ๋กœ ์˜ ๊ฒฝ์šฐ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ธ์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์•„๋งˆ๋„ "์ˆœ์ง„ํ•œ ํ•ด๊ฒฐ" ๋™์ž‘์ด ์—ฌ์ „ํžˆ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@pradyunsg๋‹˜ ๋ง์”€์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ์ฝ”๋“œ ์™€ ์ƒˆ๋กœ์šด ๋ฆฌ์กธ๋ฒ„๋ฅผ ๋ฌด๊ธฐํ•œ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ™•์‹คํžˆ pip ์œ ์ง€ ๊ด€๋ฆฌ์ž๋กœ์„œ ๋‚˜๋Š” ๊ทธ๋Ÿฐ ์ผ์— ๊ด€์‹ฌ์ด ์—†์Šต๋‹ˆ๋‹ค.

์ตœ์ข… ์‚ฌ์šฉ์ž POV์—์„œ ์ƒˆ ํ•ด์„๊ธฐ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ์ด์ƒํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Œ์„ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ธด๊ธ‰ "์ด์ „ ๋™์ž‘์„ ๋˜๋Œ๋ ค์ฃผ์„ธ์š”" ํ”Œ๋ž˜๊ทธ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ ์ค‘์š”ํ•œ ์ „ํ™˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค("์ด์ „ ๋ฒ„์ „์˜ pip๋กœ ์ผ์‹œ์ ์œผ๋กœ ๋กค๋ฐฑ" ์—ฌ๋ถ€๋Š” ๋…ผ์Ÿ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์ง€๋งŒ CI๋ฅผ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋„) ์ž๋™์œผ๋กœ ํ•ด๋‹น ์˜ต์…˜์„ ์˜นํ˜ธํ•˜๋Š” ์ตœ์‹  pip make๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์žฅ๊ธฐ์ ์œผ๋กœ ํ˜„์žฌ์˜ ํ–‰๋™์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์š” ์ƒํ™ฉ์„ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ฆฌ์กธ๋ฒ„ ๋ฒ„๊ทธ. ๋ช…๋ฐฑํ•œ ๊ฐ€๋Šฅ์„ฑ, ์‰ฌ์šด ์ˆ˜์ • - pip์˜ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—์„œ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค.
  2. ์ด์ „ ๋ฆฌ์กธ๋ฒ„๊ฐ€ ์ž˜๋ชป๋œ ๊ฒฝ์šฐ(์ œ์•ฝ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฐ๊ณผ ์ƒ์„ฑ). ์šฐ๋ฆฌ๋Š” ์•ž์œผ๋กœ ๊ทธ๊ฒƒ์„ ์ง€์›ํ•  ์ƒ๊ฐ์ด ์—†์Šต๋‹ˆ๊นŒ? (์ ์–ด๋„ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ์ •ํ•˜๊ณ  --no-deps ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์กธ๋ฒ„๋ฅผ ๋„๋Š” ๊ฒƒ๋ณด๋‹ค ๋œ ๊ทน๋‹จ์ ์ธ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด์„œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.)
  3. ์ด์ „ ๋ฆฌ์กธ๋ฒ„์™€ ์ƒˆ ๋ฆฌ์กธ๋ฒ„๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ ๋‘˜ ๋‹ค ์ฃผ์–ด์ง„ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ด์ „ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ•์ œ๋กœ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ œ์•ฝ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด (2)๋กœ ๋˜๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค). ๊ทธ๋ ‡๊ฒŒ ํ•  ์‹œ๊ฐ„์„ ์ฃผ์–ด์•ผ ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด์ „ ํ™•์ธ์ž๋ฅผ ์‚ญ์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  4. ์ง€์›ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ์ด์ƒํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋Š” ๊ทน๋‹จ์ ์ธ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ (3)๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ์ƒˆ ํ•ด์„๊ธฐ๊ฐ€ "์˜ฌ๋ฐ”๋ฅธ" ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ด์ƒํ•œ ๊ฒฝ์šฐ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ œ์•ฝ ์กฐ๊ฑด์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ --no-deps ๊ณ ์ •ํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ถ๊ทน์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” "ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค"๋ผ๊ณ  ๋งํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ๋ฌด์‹œํ•˜๋ฉด ์–ธ์  ๊ฐ€ ๋‹ค์‹œ "๊ฒฝ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค"๋ผ๋Š” ์ด์ „ ํ•ด๊ฒฐ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋†“์นœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์žˆ์Šต๋‹ˆ๊นŒ? ํŠนํžˆ ์ด์ „ ๋ฆฌ์กธ๋ฒ„๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ณณ์€ ์–ด๋””์ž…๋‹ˆ๊นŒ?

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , "์—ฌ๊ธฐ์— ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๊ทน๋‹จ์  ์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค"์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ฒŒ์‹œํ•˜์—ฌ ๊ธธ์„ ์žƒ์ง€ ์•Š๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ๊ณณ์€ ์–ด๋””์ž…๋‹ˆ๊นŒ? ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ์„ ์กฐ๊ธฐ์— ์‹œ์ž‘ํ•  ์ˆ˜๋งŒ ์žˆ๋‹ค๋ฉด ์ด์ƒํ•œ ์ƒํ™ฉ์„ ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์ด ์ˆ˜์ง‘ํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค :-)

์ถ”์‹ : ์ƒˆ๋กœ์šด ํ•ด์„๊ธฐ๋ฅผ ์œ„ํ•œ ์ค€๋น„ ์ž‘์—…์˜ ์ผ๋ถ€๋กœ "์ผ๋ฐ˜์ ์ธ" ์ œ์•ฝ ์กฐ๊ฑด ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์กฐ์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(PyPI์— ์žˆ๋Š” ๋‚ด์šฉ ๊ธฐ๋ฐ˜). ๋‚ด ์ž์‹ ์˜ ๊ฒฝ์šฐ "pip install". ๋ณต์žกํ•œ ๊ฒฝ์šฐ์— ๋„ˆ๋ฌด ๋น ์ ธ์„œ ๋Œ€๋‹ค์ˆ˜์˜ ๋‹จ์ˆœํ•œ ๊ฒฝ์šฐ๋ฅผ ๋†“์น˜๋Š” ๊ฒƒ์€ ๋ถ€๋„๋Ÿฌ์šด ์ผ์ž…๋‹ˆ๋‹ค.

  1. ๋ฆฌ์กธ๋ฒ„๊ฐ€ ๋„ˆ๋ฌด ๋Š๋ฆฝ๋‹ˆ๋‹ค(conda ์ฐธ์กฐ). 20๋ถ„ ์ด์ƒ์˜ ๋ฆฌ์กธ๋ฒ„ ๋˜๋Š” ํ˜„์žฌ ๋™์ž‘ ์ค‘์—์„œ ์„ ํƒํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ข…์ข… ํ˜„์žฌ ๋™์ž‘์„ ์›ํ•ฉ๋‹ˆ๋‹ค(๋˜๋Š” ์ตœ์†Œํ•œ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค. ๋งŽ์€ ๊ฒฝ์šฐ์— ์ข‹์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Œ).

  2. ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜๋‚ ์—๋Š” ๊ทธ๋‹ค์ง€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์ง€๋งŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋ฅผ ์‰ฝ๊ฒŒ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PyPI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” conda/conda-forge ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ณด๋‹ค ์ƒํƒœ๊ฐ€ ์ข‹์ง€ ์•Š์œผ๋ฉฐ ์ด๋ฏธ conda์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ํ‹€๋ ธ๊ณ  ์‚ฌ์šฉ์ž๋กœ์„œ ์†”๋ฃจ์…˜์„ ์–ป์„ ์ˆ˜ ์—†๋‹ค๋ฉด, ๋‚˜๋Š” ์•ฝ๊ฐ„์˜ ์˜ตํŠธ ์•„์›ƒ์„ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@rgommers 6์˜ ๊ฒฝ์šฐ "์ด ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „ ์ถฉ๋Œ ๋ฌด์‹œ" ์Šคํƒ€์ผ ์˜ต์…˜์ด ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, @rgommers - ์ข‹์€ ์ง€์ ์ž…๋‹ˆ๋‹ค.

๋ฆฌ์กธ๋ฒ„๊ฐ€ ๋„ˆ๋ฌด ๋Š๋ฆฝ๋‹ˆ๋‹ค. ๋ฆฌ์กธ๋ฒ„ ๋ฒ„๊ทธ๋กœ ๊ฐ„์ฃผํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ ๊ฒฝ์šฐ์— ์ถฉ๋ถ„ํ•œ ์„ฑ๋Šฅ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๋‚ด ์ƒ๊ฐ์— ๋ชฉ์ ์— ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ํ’€ ๋ฆฌ์กธ๋ฒ„๋กœ ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์—„์ฒญ๋‚˜๊ฒŒ ๋ณต์žกํ•œ ์ œ์•ฝ ๋„คํŠธ์›Œํฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ(20๋ถ„์ด ๊ณผ์žฅ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์–ด๋–ค ์ƒํ™ฉ์—์„œ๋„ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค!), ์šฐ๋ฆฌ๋Š” "์šฐ๋ฆฌ๊ฐ€ ์ง€์›ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋ณต์žกํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค." ๋‹ค์‹œ ๋งํ•ด "๋น ๋ฅด๊ณ  ๋”๋Ÿฌ์šด" ๋ถ€์ •ํ™•ํ•˜์ง€๋งŒ ๋น ๋ฅธ ํ•ด๊ฒฐ์ž๋ฅผ ์ œ๊ณตํ•˜๋„๋ก conda์— ์š”์ฒญํ•œ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋“ค์ด ๊ทธ๋ ‡๊ฒŒํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด (๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๊ทธ๋“ค์ดํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค) ์™œ pip๋ฅผ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๊นŒ?

์ž˜๋ชป๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๋ถ„๋ช…ํžˆ "์ง€์›ํ•˜์ง€ ์•Š์„ ๊ฒƒ"์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(์—ฌ๊ธฐ์„œ "์‚ฌ์šฉ ์ค‘๋‹จ ๊ธฐ๊ฐ„ ์ดํ›„"์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Œ์„ ๊ธฐ์–ตํ•˜์„ธ์š”!). ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ์‹œ๊ฐ„์„ ์ฃผ๊ณ  "ํŒจํ‚ค์ง€ X์—์„œ ๋ฒ„์ „ ์ถฉ๋Œ ๋ฌด์‹œ" ์ด์Šค์ผ€์ดํ”„ ์ ˆ ์˜ต์…˜์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•ด์„œ ๊ธฐ์กด ๊ธฐ๊ณ„๋ฅผ ๋ชจ๋‘ ์œ ์ง€ํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ํ•ด์„๊ธฐ๊ฐ€ "๊ฐ€๋น„์ง€ ์ธ, ๊ฐ€๋น„์ง€ ์•„์›ƒ" ๊ทœ์น™์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๋ฆฌ๊ณ  ์‚ฌ๋žŒ๋“ค์ด ํ•ด๋‹น ๋ฉ”์‹œ์ง€์— ์–ด๋–ป๊ฒŒ ์‘๋‹ตํ•˜๋Š”์ง€ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๊ฒƒ์€ ๋กค์•„์›ƒ ํ”„๋กœ์„ธ์Šค์˜ ๋งŽ์€ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

๋กœ์ปฌ ์กฐํƒ€์‹ค์—์„œ ๋ฏธ๋ฆฌ ๊ฒฐ์ •๋œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ ํ›„ ์ข…์†์„ฑ์„ ํ•ด๊ฒฐํ•˜๋„๋ก ์š”์ฒญํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@jriddy "ํ˜ธํ™˜๋˜๋Š” ๊ฒฝ์šฐ ๊ธฐ์กด ์„ค์น˜ ์‚ฌ์šฉ"์˜ ํ•ด๊ฒฐ ์ „๋žต์ด ์ด์— ๋Œ€ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

"๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๊ทน๋‹จ์ ์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค" ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ฒŒ์‹œํ•˜์—ฌ ๊ธธ์„ ์žƒ์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ์œ„์น˜๋Š” ์–ด๋””์ธ๊ฐ€์š”?

https://github.com/pradyunsg/zazo/

6์˜ ๊ฒฝ์šฐ "์ด ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „ ์ถฉ๋Œ ๋ฌด์‹œ" ์Šคํƒ€์ผ ์˜ต์…˜์ด ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์˜ฌ๋ฐ”๋ฅธ ์˜ต์…˜์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

(์ €๋Š” 20๋ถ„์ด ๊ณผ์žฅ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์–ด๋–ค ์ƒํ™ฉ์—์„œ๋„ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค!) ๊ทธ๋Ÿฌ๋ฉด ์šฐ๋ฆฌ๋Š” "์ง€์›ํ•˜๊ธฐ์— ๋„ˆ๋ฌด ๋ณต์žกํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ" ์˜์—ญ์— ๋“ค์–ด๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด "๋น ๋ฅด๊ณ  ๋”๋Ÿฌ์šด" ๋ถ€์ •ํ™•ํ•˜์ง€๋งŒ ๋น ๋ฅธ ํ•ด๊ฒฐ์ž๋ฅผ ์ œ๊ณตํ•˜๋„๋ก conda์— ์š”์ฒญํ•œ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋“ค์ด ๊ทธ๋ ‡๊ฒŒํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด (๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๊ทธ๋“ค์ดํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค) ์™œ pip๋ฅผ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๊นŒ?

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

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์•„๋‹Œ ํ•œ _ํ™•์‹คํžˆ_ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐ”๋กœ conda๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋‚˜์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค.
  • ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๋ฌธ์ œ๋Š” ๋” ์ž‘์Šต๋‹ˆ๋‹ค(์‚ฌ์‹ค์ด ์•„๋‹ˆ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. PyPI๋Š” ํฌ๊ณ  ์ข‹์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์ปค์•ผ ํ•จ)

์ž˜๋ชป๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๋ถ„๋ช…ํžˆ "์ง€์›ํ•˜์ง€ ์•Š์„ ๊ฒƒ"์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿด ์ˆ˜ ์žˆ์ง€. "์˜ฌ๋ฐ”๋ฅธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค"๋Š” ์ „์ฒด์ ์ธ ์ž…์žฅ์€ ์—ฌ๊ธฐ์—์„œ ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ์— ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ํ•œ? (๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด pip ๊ฒƒ์ด ์•„๋‹ˆ๋ผ PyPI๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค).

๋‚˜๋Š” ๋‹น์‹ ์ด ์ •๋ง๋กœ ๋‹น์‹ ์ด ์ƒ๊ฐํ•˜๋Š” ์˜ต์…˜์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

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

์‚ฌ๋žŒ๋“ค์ด Conda๊ฐ€ ๋Š๋ ค์„œ ํ™”๋ฅผ ๋‚ด๋Š” ๊ฒƒ์€ ๋ณธ์งˆ์ ์œผ๋กœ ํ•ญ์ƒ ๋‚˜์œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทผ๋ณธ ์›์ธ์— ๊ด€๊ณ„์—†์ด ์ง€๊ฐ๋œ ์†๋„ ์ €ํ•˜์— ๋Œ€ํ•ด ๋น„๋‚œ์„ ๋ฐ›์„ ๊ฒƒ์ด๋ผ๋Š” ์ ์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค. ์ž˜๋ชป๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๋•Œ๋•Œ๋กœ ์ž˜๋ชป๋œ ์ œ์•ฝ ์กฐ๊ฑด์ด์ง€๋งŒ ํ›จ์”ฌ ๋” ์˜ค๋ž˜๋˜๊ณ  ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์€ ์˜ต์…˜์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋Š” ์ œ์•ฝ ์กฐ๊ฑด์ด ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋” ๋งŽ์Šต๋‹ˆ๋‹ค. Conda๋Š” ์ตœ๊ทผ ํ•œ ๊ฐ€์ง€ ์ž‘์€ ์ผ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ํฌ๊ฒŒ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ถ€์ ์ ˆํ•œ(๋Œ€๋ถ€๋ถ„ ๋„ˆ๋ฌด ๊ฐœ๋ฐฉ๋œ) ์ œ์•ฝ ์กฐ๊ฑด์ด ์žˆ๋Š” ์ด์ „ ์†Œํ”„ํŠธ์›จ์–ด ์ปฌ๋ ‰์…˜์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐœ๋ฐฉํ˜• ์ œ์•ฝ ์กฐ๊ฑด์œผ๋กœ ์ธํ•ด conda๋Š” ๋งŽ์€ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ํ•„์š”ํ•œ ์ •๋ง ๋‚˜์œ ์†”๋ฃจ์…˜์„ ํƒ์ƒ‰ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๋ช‡ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋Š” ์บ์Šค์ผ€์ด๋“œ ๋ฐฉ์‹์œผ๋กœ ์ธํ•ด ๋งค์šฐ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์ž‘์—…์ด๋ฉฐ, ๊ฐ ๋‹จ๊ณ„๋Š” ์ œ์•ฝ์ด ๋œํ•˜๊ณ  ๋น„์šฉ์ด ๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค.

"์“ฐ๋ ˆ๊ธฐ ์ธ, ๊ฐ€๋น„์ง€ ์•„์›ƒ" ์‚ฌ๊ณ  ๋ฐฉ์‹์˜ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐ์‚ฌ์˜ ์œ ์ง€ ๊ด€๋ฆฌ์ธ์œผ๋กœ์„œ ๊ฐ€๋ฐฉ์„ ๋“ค๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•œ ์•„์ฃผ ์ข‹์€ ๊ฒฝํ—˜์  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋ฉด ๋‹น์‹ ์€ ๋ฌด๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์†”๋ฒ„๊ฐ€ ๋Š๋ฆฐ ์ด์œ ๋ฅผ ์กฐ์‚ฌํ•˜๊ณ  ๋ฌธ์ œ ํŒจํ‚ค์ง€๋ฅผ ๋ถ„๋ฆฌํ•œ ๋‹ค์Œ ๋ฌธ์ œ์˜ ์›์ธ์— ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋„๋ก ์š”์ฒญํ•ด์•ผ ํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋ฉ๋‹ˆ๋‹ค. ์ข‹์€ ์œ„์น˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ €๋ฅผ ๋ฏฟ์œผ์„ธ์š”. ์šฐ๋ฆฌ๋Š” conda๊ฐ€ conda-forge, bioconda ๋˜๋Š” ๊ธฐํƒ€ ํƒ€์‚ฌ ์ฑ„๋„์„ ํ˜ผํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋˜๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ์šฐ๋ฆฌ๋Š” ํƒ์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ํ•ด๋‹น ํƒ€์‚ฌ ์ฑ„๋„์— ์ˆ˜์ •ํ•ด์•ผ ํ•  ์‚ฌํ•ญ์„ ์•Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์งœ์ฆ๋‚œ๋‹ค.

conda์™€ ๋น„๊ตํ•  ๋•Œ๋Š” conda๊ฐ€ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋งค์šฐ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ทจํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Conda์—๋Š” ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†Œ์Šค๊ฐ€ ์žˆ์œผ๋ฉฐ ๋ชจ๋“  ๊ฒƒ์„ ํ•œ ๋ฒˆ์— ํ•ด๊ฒฐํ•˜์ง€๋งŒ pip๋Š” ํ•œ ๋ฒˆ์— ๊ฐ ํ•ญ๋ชฉ์„ ์žฌ๊ท€์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ณ  ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค(ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์—ญ์ถ”์ ). ๊ทธ๊ฒƒ์€ ๋‹น์‹ ์—๊ฒŒ ๋‹ค๋ฅธ ์ตœ์ ํ™” ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@wolfv ๋Š” ์ตœ๊ทผ์— conda์— libsolv๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํƒ์ƒ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Š” ๊ถ๊ทน์ ์œผ๋กœ conda์™€ ๋™์ผํ•œ ๋‹ต๋ณ€์„ ์ œ๊ณตํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์‚ฌ์‹ค์— ์ขŒ์ ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์ฐจ์ด๋กœ ๊ท€๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Libsolv๋Š” ์—ญ์ถ”์  ์†”๋ฒ„์ž…๋‹ˆ๋‹ค. ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด pip์— ๋Œ€ํ•œ ์„ ํƒ์  ์ปดํŒŒ์ผ๋œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ pip์— ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์— ๋ฏผ๊ฐํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

( @pradyunsg ๋Š” ์ž์‹ ์˜ ๋ธ”๋กœ๊ทธ์— 8์›” ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค .)

์‚ฌ๋žŒ๋“ค์ด ์ง€๊ธˆ ์ œ๊ธฐํ•˜๋Š” ์งˆ๋ฌธ๊ณผ ์š”๊ตฌ ์‚ฌํ•ญ ์ค‘ ์ผ๋ถ€๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์™€ ๊ฐ™์ด ์ง€๊ธˆ ์ˆ˜์ง‘์„ ์‹œ์ž‘ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋˜ํ•œ: ์ด ๋กค์•„์›ƒ์— ๋Œ€ํ•ด ํ˜„์‹ค์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ผ์ •์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ Pradyun์˜ ๊ฑด๊ฐ•๊ณผ ์ž์œ  ์‹œ๊ฐ„, ๋‹ค๋ฅธ pip ์œ ์ง€ ๊ด€๋ฆฌ์ž์˜ ์ฝ”๋“œ ๊ฒ€ํ†  ๊ฐ€์šฉ์„ฑ, ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์‹ ์ฒญํ•˜๋Š” ๋ณด์กฐ๊ธˆ์„ ๋ฐ›๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋งŽ์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋นŒ๋“œ ๋กœ์ง ๋ฆฌํŒฉํ„ฐ๋ง: ์ง„ํ–‰ ์ค‘, 12์›”-2์›” ์ค‘ ์™„๋ฃŒ
  • UX ์—ฐ๊ตฌ ๋ฐ ๋””์ž์ธ, ํ…Œ์ŠคํŠธ ์ธํ”„๋ผ ๊ตฌ์ถ•, ๊ตฌ์„ฑ ํ”Œ๋ž˜๊ทธ ๋ฐ ์ „ํ™˜ ์ผ์ •์— ๋Œ€ํ•ด ๋‹ค์šด์ŠคํŠธ๋ฆผ ๋ฐ ์‚ฌ์šฉ์ž์™€ ๋Œ€ํ™”: ์ด๋ฅผ ์œ„ํ•œ ์ž๊ธˆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ์ž‘์€ ์•„๋งˆ๋„ 12์›”์ด๋ฉฐ 2-3๊ฐœ์›”์ด ๊ฑธ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ์•ŒํŒŒ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ resolvelib/zazo ์— ์ •์˜๋œ ์ถ”์ƒํ™” ๋„์ž…: ๋ช‡ ๊ฐœ์›”์ด ๊ฑธ๋ฆฌ๋ฏ€๋กœ ๋ณด์ˆ˜์ ์œผ๋กœ ์ถ”์ •ํ•˜๋ฉด 2020๋…„ 5์›”์ž…๋‹ˆ๊นŒ?
  • ๋” ๋‚˜์€ ์ข…์†์„ฑ ํ•ด๊ฒฐ์„ ์ฑ„ํƒํ•˜๊ณ  ๋ฒ ํƒ€ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒŒ ์˜ณ์€ ๊ฑฐ๋‹ˆ? ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์ •๋ณด ์ˆ˜์ง‘ ์ž‘์—… ์ค‘ ์ผ๋ถ€๊ฐ€ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์ž ๋ฐ/๋˜๋Š” UX ์—ฐ๊ตฌ์›์ด ํ•ด์•ผ ํ•˜๋Š” ์ผ์ด๊ธฐ ๋•Œ๋ฌธ์— ์งˆ๋ฌธํ•ฉ๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” https://github.com/pypa/packaging-problems/issues/264 ๋ฐ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ์‚ฌ๋žŒ๋“ค์ด ์—ฌ๊ธฐ์—์„œ ์ œ๊ธฐํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž˜๋ชป๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๋•Œ๋•Œ๋กœ ์ž˜๋ชป๋œ ์ œ์•ฝ ์กฐ๊ฑด์ด์ง€๋งŒ ํ›จ์”ฌ ๋” ์˜ค๋ž˜๋˜๊ณ  ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š์€ ์˜ต์…˜์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋Š” ์ œ์•ฝ ์กฐ๊ฑด์ด ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋” ๋งŽ์Šต๋‹ˆ๋‹ค.

setup.py / pyproject.toml ์— ๋Œ€ํ•œ ์˜ˆ์™ธ๊ฐ€ ์•„๋‹ˆ๋ผ ์ œ์•ฝ์ด ์—†๋Š” ์ข…์†์„ฑ ๋˜๋Š” >= some_old_version ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ทœ์น™์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์„ ํƒ์„ ํ•ด์•ผ ํ•˜๋Š” "์ž˜๋ชป๋œ ์ œ์•ฝ ์กฐ๊ฑด"์ด๊ฑฐ๋‚˜ ์†”๋ฒ„์ธ์ง€ ์—ฌ๋ถ€๋Š” ๋ณ„๋กœ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด PyPI์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฐœ๋ฐฉํ˜• ์ œ์•ฝ ์กฐ๊ฑด์œผ๋กœ ์ธํ•ด conda๋Š” ๋งŽ์€ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ํ•„์š”ํ•œ ์ •๋ง ๋‚˜์œ ์†”๋ฃจ์…˜์„ ํƒ์ƒ‰ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์€ ์—ฌ๊ธฐ ์ „๋ฌธ๊ฐ€์ด์ง€๋งŒ ์ด์— ๋Œ€ํ•œ ์‹ค์šฉ์ ์ธ ํ•ด๊ฒฐ์ฑ…์€ ์—†์Šต๋‹ˆ๊นŒ? ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋จผ์ € ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฐ ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด 1๊ฐœ์˜ ๋ฒ„์ „๋งŒ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฑฐ์˜ ํ•ญ์ƒ ์ž˜๋ชป๋œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค(๋‚˜์œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋˜๋Š” ๋‹ค๋ฅธ ์›์ธ์œผ๋กœ ์ธํ•œ ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Œ).

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

conda๊ฐ€ ๊ฒฝํ•ฉํ•ด์•ผ ํ•˜์ง€๋งŒ pip๋Š” ๊ทธ๋ ‡์ง€ ์•Š์€ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ์˜ ์˜ˆ: python 3์„ ์‚ฌ์šฉํ•˜๋Š” anaconda ๋˜๋Š” miniconda ์‚ฌ์šฉ์ž๋Š” python 3.7๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋•Œ๋•Œ๋กœ python 3.6์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์†”๋ฒ„๋Š” python ๋ฐ ๊ธฐํƒ€ ๋ชจ๋“  non-noarch ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ํŒŒ์ด์ฌ ๋ฒ„์ „ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ๋™์ž‘์„ ๊ฐ€์ง์œผ๋กœ์จ ์ตœ์ ํ™”๋  ์ˆ˜ ์žˆ๋Š” ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์ด์ง€๋งŒ, ํ•œ ํŒจํ‚ค์ง€์˜ ๋ณ€๊ฒฝ์ด ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋กœ์˜ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์š”๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์š”์ ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. "์ง€๊ธˆ๊นŒ์ง€ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค"๋Š” ์‹ค์ œ๋กœ ํ•ญ์ƒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์–ด๋ฆฌ์„์€ ํ–‰์šด์ž…๋‹ˆ๋‹ค.

๋ฒ„์ „ ์ œํ•œ์— ๊ด€ํ•ด์„œ๋Š” ํ•ด๊ฒฐ ์ž์ฒด์—์„œ ์ ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋‹น์‹ ์˜ ์ œ์•ฝ์ด ์žˆ๊ณ  ๋ชจ๋“  ์ข…๋ฅ˜์˜ "ํ•˜๋‚˜์˜ ๋ฒ„์ „์œผ๋กœ ์—ด๊ธฐ"๋Š” ๋ชจ๋“  ํŒจํ‚ค์ง€๋งˆ๋‹ค ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ถฉ๋ถ„ํžˆ ์ผ๋ฐ˜์ ์ด๊ธฐ๋ฅผ ๋ฐ”๋ž„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์†”๋ฒ„ ์ด์ „์— ๋ฒ„์ „๋ณ„๋กœ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ž˜๋ผ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด conda์˜ "current_repodata.json"์ž…๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „๋งŒ. ์ž‘๋™ํ•˜๋ฉด ์ผ์ด ์ •๋ง ๋นจ๋ผ์ง€์ง€๋งŒ, ๊ทธ๊ฒƒ์ด ์œ ์ผํ•œ repodata๋ผ๋ฉด ์‚ฌ๋žŒ๋“ค์€ ์ •๋ง ํ™”๋ฅผ ๋‚ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ƒํ™ฉ์„ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์–ธ์  ๊ฐ€๋Š” ์ž‘๋™ํ•˜๋Š” ์‚ฌ์–‘์ด ๋‹ค์Œ์—๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์— ์ขŒ์ ˆํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ „์ฒด repodata์— ๋Œ€ํ•œ ๋Œ€์ฒด๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์ฃผ์–ด์ง„ ์‹œ์ ์— ์ตœ์‹  ๋ฒ„์ „๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ๋„์ž…ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ธ๋ฑ์Šค ๋ฐ์ดํ„ฐ๋ฅผ ์ ์ง„์ ์œผ๋กœ ์—ฌ๋Š” ๊ฒƒ์ด ์—ญ์ถ”์  ์†”๋ฒ„์—์„œ ๋” ์œ ์šฉํ•œ ๊ฐœ๋…์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

pip ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋„ _ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

-- pip์˜ ๊ฒฝ์šฐ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋Š” ์—…๊ทธ๋ ˆ์ด๋“œ์™€ ๊ฐ™์€ ์„ค์น˜ ์ œ๊ฑฐ ๋‹จ๊ณ„์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ถฉ์กฑํ•˜๋„๋ก ์š”์ฒญ๋ฐ›์€ ์ œ์•ฝ ์กฐ๊ฑด์ด ํ‘œ์‹œ๋˜๋ฉด ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ pip๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋ณด๋Š” ํ•œ setuptools๋ฅผ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค.

pip install "setuptools < 20.0"

"๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๊ทน๋‹จ์ ์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค" ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ฒŒ์‹œํ•˜์—ฌ ๊ธธ์„ ์žƒ์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ์œ„์น˜๋Š” ์–ด๋””์ธ๊ฐ€์š”?

https://github.com/pradyunsg/zazo/

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

conda๊ฐ€ ๊ฒฝํ•ฉํ•ด์•ผ ํ•˜์ง€๋งŒ pip๋Š” ๊ทธ๋ ‡์ง€ ์•Š์€ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ์˜ ์˜ˆ: python 3์„ ์‚ฌ์šฉํ•˜๋Š” anaconda ๋˜๋Š” miniconda ์‚ฌ์šฉ์ž๋Š” python 3.7๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋•Œ๋•Œ๋กœ python 3.6์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์†”๋ฒ„๋Š” python ๋ฐ ๊ธฐํƒ€ ๋ชจ๋“  non-noarch ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ํŒŒ์ด์ฌ ๋ฒ„์ „ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ๋™์ž‘์„ ๊ฐ€์ง์œผ๋กœ์จ ์ตœ์ ํ™”๋  ์ˆ˜ ์žˆ๋Š” ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์ด์ง€๋งŒ, ํ•œ ํŒจํ‚ค์ง€์˜ ๋ณ€๊ฒฝ์ด ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋กœ์˜ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์š”๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์š”์ ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. "์ง€๊ธˆ๊นŒ์ง€ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค"๋Š” ์‹ค์ œ๋กœ ํ•ญ์ƒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์–ด๋ฆฌ์„์€ ํ–‰์šด์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์ผ๋ฐ˜์ ์œผ๋กœ _๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€_ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋กœ์„œ ๋‚˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ๋ช…์‹œ์ ์œผ๋กœ 3.6์„ ์„ค์น˜ํ•˜๋„๋ก ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ˆ๋Š” ์ฑ„๋„ ๊ฐ„์˜ ๋ถˆ์ผ์น˜์ž…๋‹ˆ๋‹ค. ์ตœ๊ทผ ์˜ˆ: ์šฐ๋ฆฌ๋Š” Python 3.7.3์— ์žˆ์—ˆ๊ณ  base ๋Š” 3.7.4 $๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๋Ÿฌํ•œ ๋ฒ„์ „ ์ฐจ์ด์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์œผ๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๋Š” ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ "์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š์Œ"์ด " .4 > .3 , ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์˜ ์ฑ„๋„์„ base ๋กœ ๋ณ€๊ฒฝํ•ฉ์‹œ๋‹ค(๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜๋”๋ผ๋„)"๋ณด๋‹ค ํ›จ์”ฌ ๋‚ซ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ „์ฒด repodata์— ๋Œ€ํ•œ ๋Œ€์ฒด๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์ฃผ์–ด์ง„ ์‹œ๊ฐ„์— ์ตœ์‹  ๋ฒ„์ „๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ๋„์ž…ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋งค์šฐ ์œ ์šฉํ•œ ๊ฐœ์„ ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

"์“ฐ๋ ˆ๊ธฐ ์ธ, ๊ฐ€๋น„์ง€ ์•„์›ƒ" ์‚ฌ๊ณ  ๋ฐฉ์‹์˜ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐ์‚ฌ์˜ ์œ ์ง€ ๊ด€๋ฆฌ์ธ์œผ๋กœ์„œ ๊ฐ€๋ฐฉ์„ ๋“ค๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•œ ์•„์ฃผ ์ข‹์€ ๊ฒฝํ—˜์  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋ฉด ๋‹น์‹ ์€ ๋ฌด๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๋„ค ์‚ฌ์‹ค์ด์—์š”. ๋‚˜๋Š” ๋ชจ๋“  IDE, ๋ฐฐํฌํŒ ๋˜๋Š” "๋งŽ์€ ๊ฒƒ๋“ค์— ๋Œ€ํ•œ ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค"๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ setuptools ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ์ž…๋‹ˆ๋‹ค. ๊ฐ„์ ‘์ ์ธ ๊ฒƒ์€ ๋‚ด๊ฐ€ ์˜๋ฏธํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค(์˜ˆ: setuptools<20.0 in pyproject.toml`). ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์ž˜ ๋  ๊ฒƒ ๊ฐ™์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๋“œ๋ญ…๋‹ˆ๋‹ค.

"์“ฐ๋ ˆ๊ธฐ ์ธ, ๊ฐ€๋น„์ง€ ์•„์›ƒ" ์‚ฌ๊ณ  ๋ฐฉ์‹์˜ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐ์‚ฌ์˜ ์œ ์ง€ ๊ด€๋ฆฌ์ธ์œผ๋กœ์„œ ๊ฐ€๋ฐฉ์„ ๋“ค๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

100% ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์•„์ฃผ ์กฐ์‹ฌ์Šค๋Ÿฝ๊ฒŒ ๋‹ค๋ฃจ์–ด์•ผ ํ•˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ˜๋Œ€๋กœ, ์˜ค๋ž˜๋œ ์“ฐ๋ ˆ๊ธฐ์— ๋Œ€ํ•ด ์ •์ƒ์ ์ธ ํ–‰๋™์„ ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์–ด๋”˜๊ฐ€์— ์„ ์„ ๊ทธ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์ด ๋…ผ์˜๋Š” ๊ธฐ์กด ๋ฆฌ์กธ๋ฒ„๋ฅผ ๋ฌด๊ธฐํ•œ ์œ ์ง€ํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์œผ๋กœ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์  ์ค‘ ์–ด๋Š ๊ฒƒ์ด ํ•ด๋‹น ์งˆ๋ฌธ์— ์‹ค์ œ๋กœ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด ํ•ด๊ฒฐ์ž๊ฐ€ ์˜ณ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ์ž˜ ์•Œ๊ณ  ์žˆ๋Š” ๊ณ ์žฅ๋‚œ ํ–‰๋™์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์œ„์—์„œ ๋งํ•œ ๊ฒƒ์„ ์ง€์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ์ „ํ™˜ ๊ธฐ๊ฐ„์ด ์ง€๋‚œ ํ›„์—๋„ ์ด์ „ ๋ฆฌ์กธ๋ฒ„๋ฅผ ์œ ์ง€ํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ ๋งŽ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ ์ด์ „ ๋ฐ ์ƒˆ ํ•ด์„๊ธฐ๊ฐ€ ์–ด์จŒ๋“  ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

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

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

๋˜ํ•œ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋กœ์„œ ๋‚˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ๋ช…์‹œ์ ์œผ๋กœ 3.6์„ ์„ค์น˜ํ•˜๋„๋ก ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@rgommers , conda 4.7์ด ์—ฌ๊ธฐ๋กœ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ด๋„ˆ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๋ช…์‹œ์ ์ธ Python ์‚ฌ์–‘์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ๊ทธ๊ฒƒ์„ ์‹ซ์–ดํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณด์ปฌ์ด ๋ช‡ ๋ช…์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์˜ˆ์ „์—๋Š” conda install ๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ •๋ง, ์ •๋ง ์‹ซ์–ดํ–ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๊ทธ ์ด์œ ์— ๋Œ€ํ•ด ๋ณ„๋กœ ์‹ ๊ฒฝ์„ ์“ฐ์ง€ ์•Š๊ณ , ๋Œ€๋‹ต์— ๋Œ€๋ถ€๋ถ„ ๋‹ฌ๋ž˜์ง€๋งŒ, ๊ทธ ๋™์•ˆ ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์ ๋Œ€๊ฐ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ ๋˜ ๋‹ค๋ฅธ ์˜ˆ

"์˜ค๋ฅธ์ชฝ"์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์˜ˆ๋Š” ์ฑ„๋„ ๊ฐ„์˜ ๋ถˆ์ผ์น˜์ž…๋‹ˆ๋‹ค. ์ตœ๊ทผ ์˜ˆ: ์šฐ๋ฆฌ๋Š” Python 3.7.3์— ์žˆ์—ˆ๊ณ  base๋Š” 3.7.4๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๋Ÿฌํ•œ ๋ฒ„์ „ ์ฐจ์ด์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์œผ๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๋Š” ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ "์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š์Œ"์€ "์ด๋ด .4 > .3, ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์˜ ์ฑ„๋„์„ ๊ธฐ๋ณธ์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ์‹œ๋‹ค(๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜๋”๋ผ๋„)"๋ณด๋‹ค ํ›จ์”ฌ ๋‚ซ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํ›จ์”ฌ ๋” ๋ณต์žกํ•œ ์ ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ ์ตœ์ ํ™” ๊ธฐ์ค€์„ ์ œ์•ˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. https://www.anaconda.com/understanding-and-improving-condas-performance/ ์˜ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์—์„œ ํ˜„์žฌ 11๋‹จ๊ณ„๋ฅผ ๋ณด์…จ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

์•ˆ๋…•ํ•˜์„ธ์š”, ์ด ๋ฌธ์ œ์—์„œ ์ €๋ฅผ ์–ธ๊ธ‰ํ•ด ์ฃผ์‹  @msarahan ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ข€ ๋” ์ผ์ฐ ์—ฐ๋ฝํ•˜๊ณ  ์‹ถ์—ˆ์ง€๋งŒ ์‹œ๊ฐ„์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ libsolv ๋ฅผ conda ์‚ฌ์–‘์— ๋Œ€ํ•œ ์†”๋ฒ„๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๊ฝค ๋งŽ์€ ์‹คํ—˜์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ์ž‘๋™ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋‚จ์€ ์ฐจ์ด์ ์€ conda๊ฐ€ ๋นŒ๋“œ ๋ฒˆํ˜ธ์— ๋Œ€ํ•ด ๋ณ„๋กœ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์ง€๋งŒ ์ฝ”๋”ฉ๋œ ๋ฐฉ์‹(์—ญ์ถ”์  ์†”๋ฒ„ ์‚ฌ์šฉ)์ด libsolv์— ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ „์ฒด repodata๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ libsolv๋Š” ์ •๋ง ๋น ๋ฆ…๋‹ˆ๋‹ค. libsolv์˜ ์†๋„๋Š” ์งœ์ฆ๋‚˜์ง€ ์•Š์„ ์ •๋„๋กœ ๋น ๋ฆ…๋‹ˆ๋‹ค. :)

libsolv์— ๋Œ€ํ•œ ๋‚˜์˜ ํฐ ๊ณตํ—Œ์€ ํ”Œ๋žซํผ ๊ฐ„ ํ˜ธํ™˜์ด ๊ฐ€๋Šฅํ•˜์—ฌ ์ด์ œ Windows, OS X ๋ฐ Linux์—์„œ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ์˜ ๋ฉ์–ด๋ฆฌ(์ ์–ด๋„ ๋น ๋ฆ„)์ด๊ณ  @mlschroe ๊ฐ€ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ƒˆ ํ•ด์„๊ธฐ์— ๋Œ€ํ•ด libsolv ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ „์ ์œผ๋กœ ์˜นํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ฝ˜๋‹ค ๋งค์น˜์ŠคํŽ™.

๋ฐ˜๋ฉด์— ๋ฆฌ์กธ๋ฒ„ ๊ฐœ๋ฐœ์ด ์–ด๋Š ๋‹จ๊ณ„์— ์žˆ๋Š”์ง€, ์ง€๊ธˆ์€ ์ด๋ฏธ ๋„ˆ๋ฌด ๋Šฆ์—ˆ๋Š”์ง€, ์ปดํŒŒ์ผ๋œ ์ฝ”๋“œ๊ฐ€ ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ์ง€ ์—ฌ๋ถ€๊ฐ€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

https://www.anaconda.com/understanding-and-improving-condas-performance/ ์˜ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์—์„œ ํ˜„์žฌ 11๋‹จ๊ณ„๋ฅผ ๋ณด์…จ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ๋‚˜๋Š” ๊ทธ๋žฌ๋‹ค. ์ข‹์€ ๋ธ”๋กœ๊ทธ ๊ธ€์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ ์ตœ์ ํ™” ๊ธฐ์ค€์„ ์ œ์•ˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค๋งˆ. ๋‚˜๋Š” ๋‹น์‹ ์˜ _"์ด์ง„ ํ˜ธํ™˜์„ฑ ์ œ์•ฝ ๋Œ€ ํ‰๋ฒ”ํ•˜๊ณ  ๋‹จ์ˆœํ•œ ๋ฒ„์ „ ์ œ์•ฝ"_์ด ์•„๋งˆ๋„ ๋‚ด๊ฐ€ ๋†“์น˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๊ฐ€๋ฆฌํ‚ฌ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์˜ˆ์ƒํ•˜๋Š” ๋ฐ”๋Š” ์–ด๋–ค ํŒจํ‚ค์ง€๋„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— python >= 3.7.4 ๋˜๋Š” == 3.7.4 ๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•ญ์ƒ == 3.7 ์ž…๋‹ˆ๋‹ค(scipy์— ๋Œ€ํ•ด ํ™•์ธํ–ˆ์ง€๋งŒ meta.yaml ๋Š” python ๋ฐ conda_forge.yml ๋Š” max_py_ver: '37' ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 3.7.4 ๋ฅผ ๋„์ž…ํ•˜๋ฉด ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค 3.7.3 ๋ฅผ ์„ ํƒํ•˜๊ณ  ๋‹ค๋ฅธ ๊ฒƒ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ๋ฆฌ์กธ๋ฒ„๋Š” 3.7.4 ๋ฅผ ๊ฐ•์ œ ์‹คํ–‰ํ•˜๊ณ  ์—…/๋‹ค์šด ๋“ฑ๊ธ‰์˜ ์ฒด์ธ.

pip ์ถœ์‹œ ๊ณ„ํš์—์„œ ์ด ๋ถ€๋ถ„์ด ์ฃผ์ œ์—์„œ ๋ฒ—์–ด๋‚ฌ์„ ๊ฒƒ ๊ฐ™์œผ๋‹ˆ ์ด ๋ถ€๋ถ„์„ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ๊ฐ€์ ธ๊ฐ€๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

๋‚ด ์กฐ์–ธ์€ ์†”๋ฒ„๋ฅผ ๋งค์šฐ ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

+1

๋˜ํ•œ: ๊ฐ€๋Šฅํ•œ ํ•œ ์ˆ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์‹ญ์‹œ์˜ค. ์ง€๊ธˆ์€ pip ์˜ ์ข‹์€ ์ ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด cd site-packages && rm -rf troublesome_package (์•„๋งˆ๋„ --no-deps ๋ฅผ ์‚ฌ์šฉํ•œ ์žฌ์„ค์น˜๊ฐ€ ๋’ค๋”ฐ๋ฅผ ์ˆ˜ ์žˆ์Œ)๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ๋‹ค์‹œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. conda , apt ๋ฐ ์นœ๊ตฌ์™€ ๊ฐ™์€ ์‚ฌ๋žŒ๋“ค์€ ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ์ˆ˜๋ฆฌํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ ์ตœ์ ํ™” ๊ธฐ์ค€์„ ์ œ์•ˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ์ƒ๊ฐ์— ์ฑ„๋„์˜ ๊ฐœ๋…์„ ์ถฉ๋ถ„ํžˆ ๊ณ ๋ คํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•๊ณผ ์–ผ๋งˆ๋‚˜ ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํžˆ conda๋ณด๋‹ค ํ›จ์”ฌ ์ ์ง€๋งŒ ์™„์ „ํžˆ ๊ด€๋ จ์ด ์—†๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹ํ•œ ๋ฒˆ์— ๋‘˜ ์ด์ƒ์˜ ์ธ๋ฑ์Šค์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ฃ ?

ํŒจํ‚ค์ง€์—๋Š” python >=3.7.4 ๋˜๋Š” ==3.7.4๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ฝ˜๋‹ค ํŒจํ‚ค์ง•์˜ ํ‘œ์ค€์€ ์ƒํ•œ๊ณผ ํ•˜ํ•œ์„ ๊ฐ–๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„๋ฅผ ๊ณ ๋ คํ•  ๋ฒ„์ „์˜ ์œ„์น˜์— ๋Œ€ํ•ด ๋ ˆ์‹œํ”ผ ์ž‘์„ฑ์ž๊ฐ€ ์ œ๊ณตํ•œ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ conda-build์— ์˜ํ•ด ์ž๋™์œผ๋กœ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€์—๋Š” >=3.7.2,<3.8.0a0๊ณผ ๊ฐ™์€ ์ œ์•ฝ ์กฐ๊ฑด์ด ์žˆ์œผ๋ฉฐ ์‹œํ—˜ํŒ โ€‹โ€‹๋ฒ„์ „์ด .0 ๋ฆด๋ฆฌ์Šค ๋ฏธ๋งŒ์ด๊ณ  ๋”ฐ๋ผ์„œ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ <3.8.0 ์‚ฌ์–‘๊ณผ ์ผ์น˜ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด 0a0 ์–ด์ƒ‰ํ•จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€์—๋Š” ์—ฐ๊ด€๋œ ์ฑ„๋„๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฑ„๋„์€ ํšจ๊ณผ์ ์œผ๋กœ ๋ฒ„์ „ ์ตœ์ ํ™”์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. https://github.com/conda/conda/blob/4.6.7/conda/resolve.py#L1074 - ์ฑ„๋„์€ ์Šˆํผ ๋ฒ„์ „๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€์˜ ์ฃผ์š” ๋ฒ„์ „. ํ•ด๊ฒฐ์ด python์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ python ์‚ฌ์–‘์€ python ==3.7์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ฒ”์œ„์ด๋ฉฐ ์ฑ„๋„์ด ํ•ด๋‹น ๋ฒ”์œ„์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ํŠนํžˆ, python ==3.7 ์‚ฌ์–‘์„ ๊ฐ–๊ณ  defaults ์ฑ„๋„์—์„œ ์„ค์น˜๋ฅผ ์‹œ์ž‘ํ•œ ๋‹ค์Œ conda-forge ์ฑ„๋„์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋งŽ์€ ์ดํƒˆ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. "๋ฒ„์ „"(์ฑ„๋„ ํฌํ•จ)์ด ๋” ๋†’๊ณ  Python ์‚ฌ์–‘์€ ํ•ด๋‹น ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

Conda 4.7์€ ํ›จ์”ฌ ๋” ๊ณต๊ฒฉ์ ์ธ ์‚ฌ์–‘์˜ "๊ณ ์ •"์„ ๋„์ž…ํ–ˆ์œผ๋ฉฐ ํ–‰๋™์ด ๋‹น์‹ ์ด ์ถ”๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฝค ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ๋ช…์‹œ์  ์‚ฌ์–‘๊ณผ ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š” ํ•ญ๋ชฉ๋งŒ ๊ณ ์ •ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์š”์•ฝ๋ฉ๋‹ˆ๋‹ค. "์ถฉ๋Œ"์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์–ด๋ ค์šด ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์†”๋ฒ„๊ฐ€ ํ•ด๋‹น ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„์˜ ์ผ๋ถ€์ธ ์ตœ์‹  ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉํ•ดํ•˜๋Š” ๊ฒƒ๋“ค์„ ๋™๊ฒฐํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋™๊ฒฐ์€ conda๊ฐ€ ํ•  ์ˆ˜ ์—†๋Š” ๋ฐฉ์‹์œผ๋กœ pip์— ๋Œ€ํ•ด ์‚ฌ์–‘๋ณ„๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ธ๊ธ‰ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ญ์ถ”์  ์†”๋ฒ„์— ๋Œ€ํ•œ ํ›Œ๋ฅญํ•œ ์ตœ์ ํ™”๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ: ๊ฐ€๋Šฅํ•œ ํ•œ ์ˆ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๊ฒƒ์€ ์ง€๊ธˆ pip์˜ ์ข‹์€ ์ ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์—‰๋ง์ธ ๊ฒฝ์šฐ cd site-packages && rm -rf Troublesome_package(--no-deps๋กœ ์žฌ์„ค์น˜๊ฐ€ ๋’ค๋”ฐ๋ฅผ ์ˆ˜ ์žˆ์Œ)๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ๋‹ค์‹œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. conda, apt ๋ฐ ์นœ๊ตฌ์™€ ๊ฐ™์€ ๊ฒƒ์€ ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ์ˆ˜๋ฆฌํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

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

(libsolv tangent: RH์—์„œ ์ผํ•  ๋•Œ https://pypi.org/project/solv/๋ฅผ ์žก๊ณ  Fedora์˜ "pip install solv" ๋ณด์•ˆ ํ—ˆ์ ์„ ๋‹ซ์•˜์Šต๋‹ˆ๋‹ค. libsolv ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋Š” ํ˜„์žฌ sdist ๋˜๋Š” wheel ์•„์นด์ด๋ธŒ, PyPI์— ๊ฒŒ์‹œ๋Š” ๊ณ ์‚ฌํ•˜๊ณ  ์ง€๊ธˆ๊ณผ ๊ฐ™์€ ๋ฌดํ•ดํ•œ ์ž๋ฆฌ ํ‘œ์‹œ์ž๋ณด๋‹ค๋Š” libsolv์˜ ๋ฒˆ๋“ค ์‚ฌ๋ณธ์œผ๋กœ ์‹ค์ œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ”์ธ๋”ฉ์„ ๋งŒ๋“œ๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋Š” ์‚ฌ๋žŒ๊ณผ ์ฑ„ํŒ…ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค)

๋‚ด "์˜ตํŠธ์•„์›ƒ" ์ฝ”๋ฉ˜ํŠธ์™€ ๊ด€๋ จํ•˜์—ฌ "์ด์ „ ์„ค์น˜ ๋…ผ๋ฆฌ๋กœ ๋Œ์•„๊ฐ€๊ธฐ"๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ "์ „์ฒด ์„ค์น˜ ์š”์ฒญ์„ ์‹คํŒจํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ œ์•ฝ ์กฐ๊ฑด ์œ„๋ฐ˜์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํŒจํ‚ค์ง€ ์„ค์น˜๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜ ์ œ๊ณต"์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

Yum/DNF๋Š” --skip-broken ์˜ต์…˜(DNF์—์„œ ํ•ด๋‹น ํ”Œ๋ž˜๊ทธ๋Š” --setopt=strict=0 ์˜ ๋ณ„์นญ์ž„)์„ ํ†ตํ•ด ์ด๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ pip ์˜ ๋ฆฌ์กธ๋ฒ„๋„ ๋น„์Šทํ•œ ์˜ต์…˜์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@ncoghlan ์•„ ๋งž๋‹ค. ๊ทธ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

"์ด ํŒจํ‚ค์ง€์˜ ๋ฒ„์ „ ์ถฉ๋Œ ๋ฌด์‹œ" ์Šคํƒ€์ผ ์˜ต์…˜

์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ด๋ฏธ ์–ธ๊ธ‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ท€ํ•˜์˜ ์˜๊ฒฌ์ด ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ์กŒ์Šต๋‹ˆ๋‹ค.

๊ทธ๋•Œ ์šฐ๋ฆฌ๋Š” ๊ฐ™์€ ํŽ˜์ด์ง€์— ์žˆ์Šต๋‹ˆ๋‹ค. :)

@ncoghlan ์€ distutils-sig ์—์„œ ๋‚ด๊ฐ€ ์ œ์•ˆํ•œ ํƒ€์ž„๋ผ์ธ ์— ๋‹ต์žฅํ–ˆ์œผ๋ฉฐ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋“ค๋ฆฐ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

@pradyunsg - ๋‹ค์Œ ์›”๊ฐ„ ์—…๋ฐ์ดํŠธ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค!

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์‚ดํŽด๋ณด๊ณ  #7317์„ ์ œ์ถœํ–ˆ๋‹ค.

pip์˜ ์ธ๋ฑ์Šค ์ƒํ˜ธ ์ž‘์šฉ, ์ข…์†์„ฑ ํ•ด๊ฒฐ + ๋นŒ๋“œ ๋…ผ๋ฆฌ ๋ถ„๋ฆฌ ๋ฐ ์ผ๋ฐ˜์ ์ธ ์ •๋ฆฌ์— ๋Œ€ํ•œ ๋งŽ์€ ์ž‘์—… ๋•๋ถ„์— ์ถ”์ƒํ™”์— ๊ฑฐ์˜ ๋„๋‹ฌํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ #7317์„ ๋‹ซ์•˜์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ, ์ข…์†์„ฑ ํ•ด๊ฒฐ์€ ์ด์ œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋นŒ๋“œ ๋กœ์ง์—์„œ (์ถฉ๋ถ„ํžˆ) ๋ถ„๋ฆฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ๋กœ์ง ๋ฆฌํŒฉํ„ฐ๋ง์ด ์ž˜ ์ง„ํ–‰๋˜์—ˆ์œผ๋ฉฐ ๋” ์ด์ƒ ์ง„ํ–‰์„ ๋ฐฉํ•ดํ•˜๋Š” ์š”์†Œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

์ด์ œ ์ ์ ˆํ•œ ๊ฒฝ์šฐ [passa] ๋ฐ ์‹œ์˜ ๋ฆฌ์กธ๋ฒ„ ์—์„œ ์ฐธ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ pip์—์„œ [resolvelib] ์ถ”์ƒํ™”๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ž‘์—…์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. :)

@pradyunsg ์ €๋Š” Poetry ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ base resolver(PubGrub ๊ธฐ๋ฐ˜)๋ฅผ ์ถ”์ถœํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค(https://github.com/sdispater/poetry/tree/master/poetry/mixology ์ฐธ์กฐ). ๋Œ€๋ถ€๋ถ„ ๋‚˜๋จธ์ง€ ์ฝ”๋“œ์™€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์ง€๋งŒ ์ถ”์ƒํ™”ํ•ด์•ผ ํ•˜๋Š” ๋‚ด๋ถ€ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ์—ฌ์ „ํžˆ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„์›€์ด ํ•„์š”ํ•˜์‹œ๋ฉด ์ €์—๊ฒŒ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ์•„์ด๋””์–ด๋Š” ํƒ€์‚ฌ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” PubGrub ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ๊ตฌํ˜„์„ ๊ฐ–๋Š” ๊ฒƒ์ด๋ฉฐ ํ˜„์žฌ ์ด์ „ ๋ฆฌ์กธ๋ฒ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋Š” https://pypi.org/project/mixology/ ์— ํฌํ•จ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@sdispater ํ™•์‹คํžˆ! ๋‚ด๊ฐ€ ์ง์ ‘ ๋„์šธ ์ˆ˜ ์žˆ์„์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ(์‹œ๊ฐ„ ์ œ์•ฝ) ๋‚˜๋จธ์ง€ ์‹œ์—์„œ PubGrub ํฌํŠธ๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

์ •๋ง ์ข‹์€ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋Š” pip,์‹œ ๋ฐ pipenv๊ฐ€ ๋™์ผํ•œ ์ถ”์ƒํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ผ๊ด€๋œ ์ถ”์ƒํ™” ๊ณ„์ธต์„ ๊ฐ–๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ ์šฐ๋ฆฌ๋Š” zazo(๊ด‘์‚ฐ), mixology(์‹œ) ๋ฐ resolvelib(pipenv's)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘ ์ผ์ข…์˜ ์ถ”์ƒํ™” ๊ณ„์ธต์„ ์ •์˜ํ•˜๊ณ  ์•ฝ๊ฐ„ ๋‹ค๋ฅด์ง€๋งŒ (์›ƒ๊ธฐ๊ฒŒ๋„!) ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ์ด ์‚ฌ์‹ค์„ ์•Œ๊ณ  ๊ณ„์‹œ๋‹ค๋ฉด ์ €ํฌ์—๊ฒŒ ์•Œ๋ ค์ฃผ์„ธ์š”!

์ฐธ๊ณ ๋กœ, ์šฐ๋ฆฌ( @wolfv ๋ฐ @QuantStack ํŒ€ ์ผ๋ฐ˜์ ์œผ๋กœ)๋Š” pip ์ข…์†์„ฑ ํ•ด์„๊ธฐ์— ๋Œ€ํ•œ RfP์— ์‘๋‹ตํ–ˆ์Šต๋‹ˆ๋‹ค.

์ œ์•ˆ๋œ ์ ‘๊ทผ ๋ฐฉ์‹์€ libsolv C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฑ„ํƒํ•˜๊ณ  pip์˜ ๋ฒ„์ „ ์ œํ•œ ํ˜•์‹์— ๋Œ€ํ•œ ์ง€์›์„ libsolv์— ๊ธฐ์—ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ƒˆ๋กœ์šด ํŒŒ์ด์ฌ ๋ฐ”์ธ๋”ฉ์„ ํ†ตํ•ด C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋…ธ์ถœํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Libsolv๋Š” RPM ์ƒํƒœ๊ณ„์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ๊ฐ•๋ ฅํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฏ€๋กœ ์ด๋ฏธ ์‚ฐ์—… ๊ทœ๋ชจ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • Libsolv's๋Š” BSD-3-Clause ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.
  • Libsolv๋Š” rpm , deb ์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€ ๋ฐ ์ €์žฅ์†Œ ํ˜•์‹์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
    haiku , conda , arch . ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋‹ค์–‘ํ•œ ํ˜•์‹๊ณผ ํ‘œํ˜„ ๋ฐฉ์‹
    ์ข…์†์„ฑ ์ œ์•ฝ ์กฐ๊ฑด์€ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋Š” ํ”Œ๋Ÿฌ๊ทธํ˜• ์‹œ์Šคํ…œ์ž„์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
    ์ข…์†์„ฑ ๋ฒ„์ „์— ๋Œ€ํ•œ ์ œ์•ฝ ์กฐ๊ฑด์— ๋Œ€ํ•œ pip์˜ ๊ตฌ๋ฌธ์„ ์ˆ˜์šฉํ•˜๊ธฐ ์œ„ํ•ด ..
  • ์–‡์€ mamba ๋ž˜ํผ์—์„œ conda์˜ ์†”๋ฒ„ ๋Œ€์‹  libsolv๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ
    conda์˜ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (ํฐ ์ฑ„๋„์—์„œ conda์˜ ๋Š๋ฆฐ ํŒจํ‚ค์ง€ ํ•ด์ƒ๋„๋Š” mamba ์ž‘์—…์— ๋Œ€ํ•œ ์šฐ๋ฆฌ์˜ ์ฃผ์š” ๋™๊ธฐ์˜€์Šต๋‹ˆ๋‹ค).
  • Windows, OS X ๋ฐ Linux์—์„œ ํ”Œ๋žซํผ ๊ฐ„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ( @wolfv ๋Š” libsolv์˜ Windows ํฌํŠธ๋ฅผ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค)
  • ์ตœ์ ์˜ ์ข…์†์„ฑ ์กฐํ•ฉ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ „์ฒด SAT ํ•ด๊ฒฐ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ•˜๋ฉด ์ถฉ๋Œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํžŒํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ œ์•ˆ๋œ ์ ‘๊ทผ ๋ฐฉ์‹์€ libsolv C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฑ„ํƒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

libsolv๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ๋Œ€์ฒด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: pip์˜ AIX ์ง€์›์ด ํ™œ๋ฐœํ•˜๊ฒŒ ์ž‘์—… ์ค‘์ด๊ณ  BSD์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค). ๋”ฐ๋ผ์„œ libsolv๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์„ฑ๋Šฅ ์˜ต์…˜์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ทธ๋Ÿด๋“ฏํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜์— ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (์ˆœ์ˆ˜ํ•œ Python ๋ฒ„์ „์˜ libsolve๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ, ์ฆ‰ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ์†๋„๊ฐ€ ๋” ๋Š๋ฆด๊นŒ์š”?)

๋˜ํ•œ get-pip.py๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํ”Œ๋žซํผ์— ๋Œ€ํ•ด libsolv์šฉ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” ์ˆœ์ˆ˜ ํŒŒ์ด์ฌ ํด๋ฐฑ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

์™ธ๋ถ€ C ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์€ ์ด์ œ ์˜ค๋žซ๋™์•ˆ pip์—๊ฒŒ ๊ณจ์นซ๊ฑฐ๋ฆฌ์˜€์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์ข‹์€ ์†”๋ฃจ์…˜์„ ๋ณด๊ณ  ์‹ถ์ง€๋งŒ (a) (์šฐ๋ฆฌ๊ฐ€ ์™„์ „ํžˆ ๋ฒค๋”๋ฅผ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” "๋ฏธ๋‹ˆ ํ•" ๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํผ ์†”๋ฃจ์…˜์˜ ์•ฝ์–ด) ํ•˜๋‚˜๊ฐ€ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. (b) ์ƒˆ๋กœ์šด ๋ฆฌ์กธ๋ฒ„๊ฐ€ ๊ทธ๊ฒƒ์— ์˜์กดํ•˜๋Š” ๊ฒƒ์„ ์‹ซ์–ดํ•  ๋งŒํผ ์ถฉ๋ถ„ํžˆ ํฐ ์ž‘์—…์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @pfmoore

libsolv๊ฐ€ ์ƒ๋‹นํžˆ ์ง๊ด€์ ์ธ C ์ฝ”๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€ ํ”Œ๋žซํผ ์ง€์›์„ ๋‹ฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” libsolv์˜ ์ˆœ์ˆ˜ํ•œ Python ๋ฒ„์ „์ด ์—†๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ(๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ ์ด์ง€๋งŒ Python์˜ ์ˆœ์ˆ˜ํ•œ Python ๋ฒ„์ „์ด๋‚˜ Python ํ‘œ์ค€ lib๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด ์ƒ๊ฐ์—๋Š” ์ฐจ๋‹จ์ œ).

๋ถ€ํŠธ์ŠคํŠธ๋žฉ์˜ ๊ฒฝ์šฐ ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ์ˆœ์ˆ˜ํ•œ Python pip๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ libsolv๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•„์š”ํ•œ ๋ฆฌ์กธ๋ฒ„ lib๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด libsolv + pip ํŠน์ • Python ๋ฐ”์ธ๋”ฉ์˜ ์ •ํ™•ํ•œ ํŒจํ‚ค์ง€๋ฅผ ๊ณ ์ •ํ•˜๊ณ  ์„ค๋ช…ํ•˜๋Š” ๋Œ€๋กœ boosttrap-pip์—์„œ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์™„์ „ํžˆ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ์ง€๋งŒ, ๊ด€๋ จ๋œ ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ๋” ์ž˜ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ...

์ถ”๊ฐ€ ํ”Œ๋žซํผ ์ง€์›์ด ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ ๋งํ•ด์„œ, ์ €๋Š” ๋” ๋งŽ์€ ํ‹ˆ์ƒˆ ํ”Œ๋žซํผ์— ๊ธฐ๋“๊ถŒ์ด ์—†์Šต๋‹ˆ๋‹ค. pip๊ฐ€ ์ง€์›๋˜๋Š” ํ”Œ๋žซํผ(ํ˜„์žฌ ๊ธฐ๋ณธ์ ์œผ๋กœ "Python์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ")์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ๋งค์šฐ ๋ช…ํ™•ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ). C ํ™•์žฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ฐฐํฌ ์งˆ๋ฌธ๋„ ์žˆ์Šต๋‹ˆ๋‹ค(pip๋Š” ํ˜„์žฌ "๋ฒ”์šฉ" ํœ ๋กœ ์ œ๊ณต๋˜๋ฉฐ ์ด๋Š” get-pip.py ์™€ ๊ฐ™์€ ์ผ๋ถ€ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค).

๋ถ€ํŠธ์ŠคํŠธ๋ž˜ํ•‘์„ ์œ„ํ•ด ํ˜„์žฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๋Š” ์ˆœ์ˆ˜ํ•œ Python pip๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์œ„์—์„œ ์ฃผ์žฅํ–ˆ๊ณ  ์—ฌ๊ธฐ์„œ ๋ฐ˜๋ณตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ •๋ง๋กœ ๋‘ ๊ฐœ์˜ ๋ฆฌ์กธ๋ฒ„๋ฅผ pip์—์„œ ๋ฌด๊ธฐํ•œ์œผ๋กœ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ œ์•ˆ์— ๋Œ€ํ•ด ๋„ˆ๋ฌด ๋ถ€์ •์ ์ธ ์ƒ๊ฐ์„ ํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ C ํ™•์žฅ์— ๋Œ€ํ•œ ์ข…์†์„ฑ์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ํ˜„์žฌ C ํ™•์žฅ์— ๋Œ€ํ•œ ์ข…์†์„ฑ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๋ช‡ ๊ฐ€์ง€ ์ด์œ ์— ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜๊ณ  ์‹ถ์—ˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค.

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

๋‚ด ์ดํ•ด์— ๋”ฐ๋ฅด๋ฉด libsolv๋Š” ์ข…์†์„ฑ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ์™„์ „ํ•œ SAT ์†”๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ํ•ด๊ฒฐ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋จผ์ € ์ข…์†์„ฑ ์ •๋ณด๋ฅผ ๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ PyPI๋Š” ํŒจํ‚ค์ง€๋‹น ์ข…์†์„ฑ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. setup.py ์˜ ๋Ÿฐํƒ€์ž„ ์ข…์†์„ฑ์„ ๋ฌด์‹œํ•˜๋”๋ผ๋„ SAT ์†”๋ฒ„์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ณ„ํš์ž…๋‹ˆ๊นŒ? ํŒจํ‚ค์ง€๊ฐ€ ์—…๋กœ๋“œ๋  ๋•Œ .solv ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ธํ”„๋ผ๋ฅผ ๊ตฌํ˜„(๋ฐ ํƒ€์‚ฌ repo ๊ตฌํ˜„์„ ์œ„ํ•œ ์ถ”๊ฐ€ ์‚ฌ์–‘ ์ œ์•ˆ)ํ•  ๊ณ„ํš์ž…๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์†”๋ฒ„๊ฐ€ ์ง„ํ–‰๋˜๋ฉด์„œ ์ ์ ˆํ•œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ƒˆ๋กœ์šด ์ข…์†์„ฑ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ฌ ๋•Œ ์ผ๋ถ€ ์—ญ์ถ”์ ์„ ๊ตฌํ˜„ํ•˜๋Š” ์ „๋žต์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ๊ธฐ์กด ์ž‘์—…์— ๋Œ€ํ•ด ์•Œ์ง€ ๋ชปํ•˜๋ฉฐ ๋‚ด๊ฐ€ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋ฆฌ์†Œ์Šค๋Š” Python ํŒจํ‚ค์ง• ํ™˜๊ฒฝ์— ์ง์ ‘์ ์ธ SAT ์†”๋ฒ„ ์ด์ƒ์˜ ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” ์—ฌ๊ธฐ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ€๋Šฅ์„ฑ์— ๋งค์šฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ .solv ํŒŒ์ผ์€ ์บ์‹ฑ์šฉ์ด๋ฉฐ libsolv๋Š” ํ•ด๊ฒฐ์„ ์œ„ํ•ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ PyPI ์ข…์†์„ฑ์˜ ๋™์  ํŠน์„ฑ์œผ๋กœ ์ธํ•ด SAT ์†”๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

(์ž์„ธํ•œ ๋‚ด์šฉ์€ https://docs.google.com/document/d/1x_VrNtXCup75qA3glDd2fQOB2TakldwjKZ6pXaAjAfg/edit ์ฐธ์กฐ)

(์ฐธ๊ณ ๋กœ SAT ์†”๋ฒ„๋Š” ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ ˆ ํ•™์Šต๋„ ํ•˜๋Š” ์—ญ์ถ”์  ์†”๋ฒ„์ด๋ฏ€๋กœ PyPI์šฉ SAT ์†”๋ฒ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋™์ ์œผ๋กœ ์ ˆ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์†”๋ฒ„์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐํ•˜๋ฉด์„œ.)

Sat ์†”๋ฒ„๋Š” ์š”์ฆ˜ ๋™์  ์ถ”๊ฐ€, ๋‹ค์‹œ ์‹œ์ž‘, ์—ญ์ถ”์ , ์ž„์˜ ๋‹ค์‹œ ์‹œ์ž‘ ๋“ฑ์„ ํฌํ•จํ•˜์—ฌ ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ๋ถ€๋ถ„์ ์œผ๋กœ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†๋Š” ํ”Œ๋žซํผ์„ ์ง€์›ํ•ด์•ผ ํ•  ํ•„์š”์„ฑ๊ณผ ๊ด€๋ จ๋œ ๊ธฐ์ˆ ์ ์ธ ๋ฌธ์ œ๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. C ๊ธฐ๋ฐ˜ ์†”๋ฒ„.

์ €๋Š” ์ง€๊ธˆ ๊ณตํ•ญ์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ ์ œ๊ธฐ๋œ ์š”์ ์— ๋‹ตํ•  ์ˆ˜ ์—†์ง€๋งŒ... ์—ฌ๊ธฐ์„œ ๊ธฐ์ˆ ์ ์ธ ์„ ํƒ/์ƒ์ถฉ ๊ด€๊ณ„์— ๋Œ€ํ•ด ๋…ผ์˜ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋กค์•„์›ƒ๊ณผ ๋กค์•„์›ƒ์˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋ฐ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•. :)

@sdispater , @techalchemy , @uranusjr , @wolfv - ๊ธฐ์ˆ ์  ์ ˆ์ถฉ์ ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๋…ผ์˜๋ฅผ ์œ„ํ•ด #7406์„ ์ œ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์กธ๋ฒ„ ์„ค๊ณ„๋ฅผ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ์„ ํƒ์— ๋Œ€ํ•ด ์ถ”๊ฐ€ ๋…ผ์˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์กฐ๊ธฐ์— ๊ธฐ๋Œ€์น˜๋ฅผ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ์•ž์œผ๋กœ 2์ฃผ ๋™์•ˆ ์—ฌํ–‰ํ•  ์˜ˆ์ •์ด๋ฉฐ ~12์›” 9์ผ์— ์žˆ์„ ๋ชจ๋“  ํ† ๋ก ์„ ๋”ฐ๋ผ์žก์„ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ƒํƒœ ์—…๋ฐ์ดํŠธ: PSF๋Š” Mozilla Open Source Support ๋ฐ Chan Zuckerberg Initiative๋กœ๋ถ€ํ„ฐ ํ• ๋ฆฌ์กธ๋ฒ„ ๋ฐ ๊ด€๋ จ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ž‘์—…ํ•  ๊ณ„์•ฝ์ž๋ฅผ ๊ณ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ์ž๊ธˆ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค . ์šฐ๋ฆฌ์˜ ๋กœ๋“œ๋งต (์ •๋ฆฌํ•ด์•ผ ํ•จ)๊ณผ ๋ธ”๋กœ๊ทธ, ํฌ๋Ÿผ, ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ ๊ฒŒ์‹œ๋ฌผ๊ณผ ์ตœ๊ทผ ํšŒ์˜์˜ ๋ฉ”๋ชจ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ๊ณง distutils-sig ๋ฐ Python์˜ Discourse ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ Packaging ํฌ๋Ÿผ์— ๊ฒŒ์‹œํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” 7์›”์— pip 20.2 ๋ฆด๋ฆฌ์Šค๋ฅผ ์œ„ํ•ด pip์˜ ๋ฆฌ์กธ๋ฒ„ ๊ธฐ๋Šฅ์„ ์ค€๋น„ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. (pip์˜ ๋ถ„๊ธฐ๋ณ„ ๋ฆด๋ฆฌ์Šค ์ผ€์ด๋˜์Šค์— ๋”ฐ๋ผ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์–ด๋ ค์›€์ด ๋‹ค์Œ ๋ถ„๊ธฐ์˜ 20.3๊นŒ์ง€ ์ง€์—ฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

@uranusjr :

๋‚ด ์ดํ•ด์— ๋”ฐ๋ฅด๋ฉด libsolv๋Š” ์ข…์†์„ฑ ํ•ด๊ฒฐ์„ ์œ„ํ•ด ์™„์ „ํ•œ SAT ์†”๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ํ•ด๊ฒฐ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋จผ์ € ์ข…์†์„ฑ ์ •๋ณด๋ฅผ ๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ PyPI๋Š” ํŒจํ‚ค์ง€๋‹น ์ข…์†์„ฑ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. setup.py์˜ ๋Ÿฐํƒ€์ž„ ์ข…์†์„ฑ์„ ๋ฌด์‹œํ•˜๋”๋ผ๋„ SAT ์†”๋ฒ„์— ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

#7819์˜ ํ”„๋กœํ† ํƒ€์ž… pip resolve ๋ช…๋ น์€ ๋‘ ๊ฐ€์ง€ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ •๋ณด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ•ด๋‹น ๋ฌธ์ œ ์ฐธ์กฐ).

  1. > ํœ ์„ ์‹ค์ œ๋กœ ๋‹ค์šด๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  ํœ ์˜ URL์—์„œ METADATA ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
  2. > ๊ฐ self._resolve_one() ํ˜ธ์ถœ์˜ ๊ฒฐ๊ณผ๋ฅผ ์˜๊ตฌ json ํŒŒ์ผ์— ์บ์‹ฑํ•ฉ๋‹ˆ๋‹ค.

(1)์— ์‚ฌ์šฉ๋œ ๊ธฐ์ˆ ์€ ํœ  ์ฝ˜ํ…์ธ  ์ž์ฒด์˜ ๋ช‡ KB๋งŒ ๋‹ค์šด๋กœ๋“œํ•˜๋ฉด์„œ ํœ  URL์„ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์˜์กดํ•˜๋Š” ์š”๊ตฌ ์‚ฌํ•ญ ๋ฌธ์ž์—ด ๋ชฉ๋ก์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ #7819์˜ ํ”„๋กœํ† ํƒ€์ž…์€ self._resolve_one() ์—์„œ ๋ฐ˜ํ™˜๋œ ๊ฐ ์ข…์† ์š”๊ตฌ ์‚ฌํ•ญ์— ๋Œ€ํ•ด req.populate_link() ์ด ํ˜ธ์ถœ๋˜๊ณ  ์˜๊ตฌ json ์บ์‹œ ํŒŒ์ผ์— (==Requirement, url) -> [list of (==Requirement, url) non-transitive dependencies] ๋งคํ•‘์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. (1) ์ƒˆ๋กœ์šด ์ •๋ณด๋ฅผ ๋น ๋ฅด๊ฒŒ ์–ป๊ณ , (2) ์˜ค๋ž˜๋œ ์ •๋ณด๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฟผ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์•„์ง libsolv์— ์ต์ˆ™ํ•˜์ง€ ์•Š์ง€๋งŒ ์š”๊ตฌ ์‚ฌํ•ญ URL์—์„œ ์ข…์†์„ฑ ๋ฐ ํ•ด๋‹น URL๋กœ์˜ ๋งคํ•‘ ํ•ญ๋ชฉ์ด SAT ์†”๋ฒ„์— ํ•„์š”ํ•œ ์›์ž์  ์ž…๋ ฅ๊ณผ ์ •ํ™•ํžˆ ์ผ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. #7189์— ์„ค๋ช…๋œ ๋Œ€๋กœ ์˜๊ตฌ json ์ข…์†์„ฑ ์บ์‹œ ํŒŒ์ผ๋กœ ์ธํ•ด ์ฒซ ๋ฒˆ์งธ ์‹คํ–‰ ํ›„ pip resolve ํ˜ธ์ถœ์ด ๋ช…๋ น์ค„์—์„œ 800-900ms๊ฐ€ ๊ฑธ๋ฆฌ๋ฉฐ ์™„์ „ํ•œ ๋ฌด์ž‘๋™์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (1)๊ณผ (2)์˜ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋ฉด ์—„์ฒญ๋‚˜๊ฒŒ ์˜ค๋žœ ์‹œ๊ฐ„์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  pip๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค SAT ์†”๋ฒ„๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ์ˆซ์ž๋ฅผ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด #7189์˜ ํ”„๋กœํ† ํƒ€์ž… ์œ„์— libsolv๋ฅผ ํ•ดํ‚นํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋ฆฌ ์–ด๋ ต์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@techalchemy :

Sat ์†”๋ฒ„๋Š” ์š”์ฆ˜ ๋™์  ์ถ”๊ฐ€, ๋‹ค์‹œ ์‹œ์ž‘, ์—ญ์ถ”์ , ์ž„์˜ ๋‹ค์‹œ ์‹œ์ž‘ ๋“ฑ์„ ํฌํ•จํ•˜์—ฌ ๋ช‡ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ๋ถ€๋ถ„์ ์œผ๋กœ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†๋Š” ํ”Œ๋žซํผ์„ ์ง€์›ํ•ด์•ผ ํ•  ํ•„์š”์„ฑ๊ณผ ๊ด€๋ จ๋œ ๊ธฐ์ˆ ์ ์ธ ๋ฌธ์ œ๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. C ๊ธฐ๋ฐ˜ ์†”๋ฒ„.

๋ฐ”์ง€ ์—๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์™€ ๋ง์ปค๋ฅผ setup.py ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ์— ๋” ์‰ฝ๊ฒŒ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ(#6273) ๋‚˜์ค‘์— ๋นŒ๋“œ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ์„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค(#7016 ์ฐธ์กฐ). setup.py ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐ”์ง€์— C/C++ . ์ด๋Š” TensorFlow ์‚ฌ์šฉ์ž ์ •์˜ ์—ฐ์‚ฐ์ž ๋ฅผ ์œ„ํ•œ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋Š” Twitter ๋‚ด๋ถ€์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์ ํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” OSX ๋ฐ Linux์šฉ s3(https://github.com/pantsbuild/binaries/ ์ฐธ์กฐ)์—์„œ ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ GCC ๋ฐ binutils ์•„์นด์ด๋ธŒ์šฉ์œผ๋กœ ์‚ฌ์ „ ๋นŒ๋“œ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•˜๋ฏ€๋กœ ๋ฐ”์ง€ ์‚ฌ์šฉ์ž๋Š” Python ๋ฐ JDK ์™ธ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ”์ง€๋ฅผ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์ง€์›๋˜๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ pip๊ฐ€ libsolv์— ์•ˆ์ •์ ์œผ๋กœ ์˜์กดํ•  ์ˆ˜ ์žˆ๋„๋ก C ๋ฐ C++๋ฅผ ์ด์‹ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ์œ ํ˜•์˜ ๋„๊ตฌ๋ฅผ ๋ธŒ๋ ˆ์ธ์Šคํ† ๋ฐ ๋ฐ/๋˜๋Š” ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@cosmicexplorer

๋ฐ”์ง€์—๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์™€ ๋ง์ปค๋ฅผ setup.py ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ(#6273)์— ๋” ์‰ฝ๊ฒŒ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ๋‚˜์ค‘์— C/C++ ๋นŒ๋“œ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์ด๊ฒƒ์„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค(#7016 ์ฐธ์กฐ). TensorFlow ์‚ฌ์šฉ์ž ์ •์˜ ์—ฐ์‚ฐ์ž๋ฅผ ์œ„ํ•œ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋Š” Twitter ๋‚ด๋ถ€์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์ ํ•ฉํ•œ setup.py๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ฐ”์ง€์—. ์šฐ๋ฆฌ๋Š” ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ GCC ๋ฐ binutils ์•„์นด์ด๋ธŒ์šฉ์œผ๋กœ ๋ฏธ๋ฆฌ ๋นŒ๋“œ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ OSX ๋ฐ Linux์šฉ s3์— ํ˜ธ์ŠคํŒ…ํ•˜๋ฏ€๋กœ(pantbuild/binaries ์ฐธ์กฐ) ๋ฐ”์ง€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ”์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Python๊ณผ JDK ์™ธ์— ์•„๋ฌด๊ฒƒ๋„ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ๋Ÿฌ/๋ง์ปค ์ž‘์—…์€ ๋งค์šฐ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค! ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ setup.py(๋˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ PEP 517 ๋นŒ๋“œ ๋ฐฑ์—”๋“œ)์—์„œ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋…ผ์˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์กธ๋ฒ„์™€ ์‹ค์ œ๋กœ ๊ด€๋ จ์ด ์—†์ง€๋งŒ(์ ์–ด๋„ ์ง์ ‘์ ์œผ๋กœ๋Š” ์•„๋‹˜) ๊ด€์‹ฌ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://discuss.python.org/t/how-do-we-get-out-of-the-business-of- driving-c-์ปดํŒŒ์ผ๋Ÿฌ/2591

@cosmicexplorer

์ง€์›๋˜๋Š” ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ pip๊ฐ€ libsolv์— ์•ˆ์ •์ ์œผ๋กœ ์˜์กดํ•  ์ˆ˜ ์žˆ๋„๋ก C ๋ฐ C++๋ฅผ ์ด์‹ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ์œ ํ˜•์˜ ๋„๊ตฌ๋ฅผ ๋ธŒ๋ ˆ์ธ์Šคํ† ๋ฐ ๋ฐ/๋˜๋Š” ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ €์™€ @wolfv ๋Š” ๋ง˜๋ฐ” ๋ฅผ ์œ„ํ•œ ๋ชจ๋“  ์ฃผ์š” ์ง€์› ํ”Œ๋žซํผ์—์„œ DNF ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ์Šคํƒ์˜ ์ผ๋ถ€๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  DNF์— ๋Œ€ํ•œ ์ œ ๊ฐœ์ธ์ ์ธ ์ž‘์—…์„ ์œ„ํ•ด ์ด๊ฒƒ์„ ์‚ดํŽด๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ libsolv๋Š” ์ด์ œ Windows, Linux, macOS, BSD, Haiku OS์šฉ์œผ๋กœ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ UNIX์—์„œ DNF ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ผ๋ถ€๋กœ ๋‹ค์–‘ํ•œ UNIX ์‹œ์Šคํ…œ์— ๋ฐฐ์น˜๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ง‰์—ฐํ•˜๊ฒŒ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. @dralley ๊ฐ€ solv ๋ฐ”์ด๋„ˆ๋ฆฌ ํœ ์„ PyPI์—์„œ manylinux2014 ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PyPI๊ฐ€ ์ง€์›ํ•˜๋Š” ~์ฃผ์š” ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค๋Š” ๊ฒƒ๋„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์ƒˆ๋กœ์šด ๋ฆฌ์กธ๋ฒ„์˜ ์ดˆ๊ธฐ(์•ŒํŒŒ) ๋ฒ„์ „์ด ํฌํ•จ๋œ ๋ฒ ํƒ€ ๋ฆด๋ฆฌ์Šค์ธ pip 20.1b1์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(๊ด€๋ จ ๋‚ด์šฉ์€ #8099 ๋ฐ ์‚ฌ๋žŒ๋“ค์ด ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์„ค๋ฌธ์กฐ์‚ฌ ์ฐธ์กฐ). ์—ฌ๊ธฐ ๋ฐœํ‘œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  https://github.com/pypa/pip/issues/7951#issuecomment -617851381 ์—๋Š” ์ง€๊ธˆ๊นŒ์ง€ ๋ฒ ํƒ€๋ฅผ ๊ณต๊ฐœํ•œ ์žฅ์†Œ๊ฐ€ ๋‚˜์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

pip 20.1์ด ์ถœ์‹œ๋˜์—ˆ์œผ๋ฉฐ ๋ฆฌ์กธ๋ฒ„์˜ ์•ŒํŒŒ ๋ฒ„์ „์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” 5์›”์— ๋˜ ๋‹ค๋ฅธ pip ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ํ•ด๊ฒฐ ํ”„๋กœ๊ทธ๋žจ์˜ ์ถ”๊ฐ€ ์•ŒํŒŒ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์–ธ์ œ ์ƒˆ๋กœ์šด ๋ฆฌ์กธ๋ฒ„์˜ ๋ฒ ํƒ€๋ฅผ ์ถœ์‹œํ•  ๊ฒƒ์ธ์ง€ ํŒŒ์•…ํ•˜๊ณ  "์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•ด ์ฃผ์„ธ์š”" ํ‘ธ์‹œ๋ฅผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” #8371, ํŠน์ • ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋” ์ž˜ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•, ๊ธฐํƒ€ ๋งŽ์€ ๊ฒƒ๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์•ˆ ์ง€์—ฐ์— ๋ถ€๋”ช์ณค์Šต๋‹ˆ๋‹ค. ์ง„ํ–‰ ์ƒํ™ฉ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ https://github.com/pypa/pip/projects/6 ๋ฐ https://github.com/pypa/pip/projects/5 ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. #8206์€ ๊ณง ์ถœ์‹œ๋  ๋ฒ ํƒ€์ธ pip 20.2b2์— ๋Œ€ํ•œ ํ† ๋ก ์œผ๋กœ, 6์›” ๋ง๊นŒ์ง€ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

PSF ๋ธ”๋กœ๊ทธ ์— ์ค‘๊ฐ„ ๋ณด๊ณ ์„œ ๋ฅผ ๊ฒŒ์‹œ ํ–ˆ์Šต๋‹ˆ๋‹ค . ์•Œ์•„์•ผ ํ•  ํ•œ ๊ฐ€์ง€ ํ•ต์‹ฌ ์‚ฌํ•ญ: ์ด๋ฒˆ ๋‹ฌ ๋ง ์— ์„ ํƒ์  ํ”Œ๋ž˜๊ทธ " --use-feature=2020-resolver "๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ ์ข…์†์„ฑ ํ•ด๊ฒฐ๊ธฐ์˜ ๋ฒ ํƒ€ ๋ฒ„์ „(pip 20.1์—๋Š” ์•ŒํŒŒ ๋ฒ„์ „์ด ์žˆ์Œ)์ด ์žˆ๋Š” pip 20.2๋ฅผ ์ถœ์‹œํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” pip 20.2๋ฅผ ๋งŽ์ด ๊ณต๊ฐœํ•˜๊ณ  ๋งŽ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ƒˆ๋กœ์šด ๋ฆฌ์กธ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์š”์ฒญํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

#8511์— ๋”ฐ๋ผ ์šฐ๋ฆฌ๋Š” ์ด์ œ pip 20.2 ๋ฅผ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฆด๋ฆฌ์Šค์—๋Š” ์ฐจ์„ธ๋Œ€ ์ข…์†์„ฑ ํ•ด์„๊ธฐ์˜ ๋ฒ ํƒ€๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์ง€์นจ์„ ๋ฐ›์„ ๋•Œ ํ›จ์”ฌ ๋” ์—„๊ฒฉํ•˜๊ณ  ์ผ๊ด€์„ฑ์ด ์žˆ์œผ๋ฉฐ ํŠน์ • ์ข…๋ฅ˜์˜ ์ œ์•ฝ ์กฐ๊ฑด ํŒŒ์ผ์— ๋Œ€ํ•œ ์ง€์›์ด ๊ฐ์†Œํ•˜๋ฏ€๋กœ ์ผ๋ถ€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ๋ฐ ์›Œํฌํ”Œ๋กœ๊ฐ€ ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. --use-feature=2020-resolver ํ”Œ๋ž˜๊ทธ๋กœ ํ…Œ์ŠคํŠธํ•˜์‹ญ์‹œ์˜ค . ํ…Œ์ŠคํŠธ ๋ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐฉ๋ฒ•๊ณผ ๋ฌธ์ œ ๋ณด๊ณ  ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์ƒˆ ์ข…์†์„ฑ ๋ถ„์„๊ธฐ๋Š” ์•„์ง ์ผ์ƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ค€๋น„ ๊ฐ€ ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ๊บผ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” 2020๋…„ 10์›”์— pip์˜ ๋‹ค์Œ ๋ถ„๊ธฐ๋ณ„ ๋ฆด๋ฆฌ์Šค์ธ 20.3์„ ๋งŒ๋“ค ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ธฐ๋ณธ ์ข…์†์„ฑ ํ•ด๊ฒฐ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๊ณ  pip 20.3์—์„œ ์ƒˆ ํ™•์ธ์ž๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋งŒ๋“ค ์ค€๋น„๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Hacker News, Reddit, Twitter, Facebook, Dev.to, Telegram, ๊ด€๋ จ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ ๋‹ต๋ณ€, ์ข‹์•„ํ•˜๋Š” Slacks ๋ฐ Discords ์— ์ด ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ ์„ ๊ฐ€๋ฆฌ์ผœ ๋„๋ฆฌ ์•Œ๋ฆฌ์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์ด ์˜ํ–ฅ์„ ๋ฏธ์น  ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ Python ๊ด€๋ จ ๊ฐœ๋ฐœ์ž ๋‰ด์Šค๋ฅผ ๋”ฐ๋ผ๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 10์›” ์ด์ „์— ๋ฏธ๋ฆฌ ์•Œ๋ฆผ์„ ๋ฐ›๊ณ  ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ์„ธ์š”.

(#988์—์„œ ๋‚ด ๋ฉ”๋ชจ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.)

@zooba ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์งˆ๋ฌธํ–ˆ์Šต๋‹ˆ๋‹ค .

์ด ๋‹จ๊ณ„(์ฒซ ๋ฒˆ์งธ RC์˜ ๊ฒฝ์šฐ)์—์„œ Python 3.9์™€ ํ•จ๊ป˜ ๋ฒˆ๋“ค๋กœ ์ œ๊ณต๋˜๋Š” pip ๋ฒ„์ „์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค๋ฅผ ์œ„ํ•ด Python 3.8์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋‚ด ๊ฐ€์ •์€ ๋„ค, ๋‹ค์Œ ์ฃผ ์ดˆ์— ๋ฒ„๊ทธ ์ˆ˜์ •์ด ๋ฆด๋ฆฌ์Šค๋œ ํ›„ ๋„ค, ํ•˜์ง€๋งŒ @pfmoore @xavfernandez @cjerdonek @uranusjr @pradyunsg @dstufft ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์„ธ์š”?

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋นจ๋ฆฌ ๊ฒŒ์‹œ๋ฅผ ๋ˆ„๋ฅด์‹ญ์‹œ์˜ค. ๋‚ด ์ถ”๋ก ์€ pip 20.2๋ฅผ ๋ฒˆ๋“ค๋กœ ์ œ๊ณตํ•˜๋ฉด ๋…ธ๋ จํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ตœ์‹  ๋ฒ„์ „์˜ Python์„ ํ…Œ์ŠคํŠธํ•˜๋ฉด์„œ ์ƒˆ๋กœ์šด ์ข…์†์„ฑ ํ•ด๊ฒฐ ํ”„๋กœ๊ทธ๋žจ์„ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฒˆ๋“ค ๋ฒ„์ „์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ž‘์—…์ด ํ•„์š”ํ•œ์ง€ ๋˜๋Š” ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์‹ถ์€์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ƒˆ ํ•ด์„๊ธฐ์— ๋” ์‰ฝ๊ฒŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก 3.9์— 20.2.x๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•ด?

๋‹น์‹ ์ด ๋งž์Šต๋‹ˆ๋‹ค, ๊ทธ๊ฒƒ์ด ๊ณ„ํš์ž…๋‹ˆ๋‹ค. :)

OK, python-dev์— ๋Œ€ํ•œ ๋‹ต๋ณ€ -- ์˜ˆ, Python 3.8 ๋ฐ 3.9์— ๋ฒˆ๋“ค๋กœ ์ œ๊ณต๋˜๋Š” pip ๋ฒ„์ „์€ 20.2.x๋กœ ์—…๋ฐ์ดํŠธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด์™€ ๋ณ„๋„๋กœ ํ™๋ณด๋ฅผ ์œ„ํ•ด ์ง„ํ–‰ ์ค‘์ธ ๋ช‡ ๊ฐ€์ง€ ์ž‘์—…์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์•ž์œผ๋กœ 6-8์ฃผ ๋™์•ˆ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒˆ๋กœ์šด pip์„ ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๋„๋ฆฌ ํ™๋ณดํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฌธ์ œ๊ฐ€ "์ด ๊ฐœ๋ณ„ ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š์„ ๊ฒƒ"์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ๋ฐ ํŠน์ • ์ œ์•ฝ ์กฐ๊ฑด ํŒŒ์ผ์— ๋”ฐ๋ผ ํŠน์ • ํŒจํ‚ค์ง€ ๊ฐ„์— ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์„ค๋ฌธ์กฐ์‚ฌ ๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ณ  ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ๋” ๋งŽ์€ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ ๋“ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ์ด๋Ÿฌํ•œ ์—…์ŠคํŠธ๋ฆผ ํŒจํ‚ค์ง€๊ฐ€ pip 20.3(์˜ˆ์ œ : https://github.com/pypa/pip/issues/8076#issuecomment-666493069์˜ TensorFlow/numpy/scipy ๋ฌธ์ œ).

์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์— ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ๋…ธ๋ ฅ์„ ๋“ค์ด๋“  ๊ฐ„์— 20.3์— ๊ฑธ๋ ค ๋„˜์–ด์ง€๋Š” ๋ถˆ์ผ์น˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋ฉฐ ์ขŒ์ ˆํ•˜๊ณ  ํ˜ผ๋ž€์Šค๋Ÿฝ๊ณ  ์ƒ์ฒ˜๋ฅผ ์ž…์„ ๊ฒƒ์ด๋ฉฐ ์ด๋Š” ์šฐ๋ฆฌ์™€ ๋ชจ๋“  ์—…์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•œ ์ง€์› ๋ถ€๋‹ด์„ ์•ผ๊ธฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์—…์ŠคํŠธ๋ฆผ์˜ ๊ด€์‹ฌ์„ ๋Œ๋„๋ก ํ•˜์—ฌ ์ด๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ €๋Š” ๋ฐ์ดํ„ฐ ๊ณผํ•™์ž, ๊ต์‚ฌ, ์•„ํ‹ฐ์ŠคํŠธ, DevOps ์ „๋ฌธ๊ฐ€ ๋“ฑ ์ž์‹ ์˜ ํŠน์ • ์˜์—ญ๋ณ„ ์ฝ”๋„ˆ์— ๊ด€์‹ฌ์„ ๊ธฐ์šธ์ด๋Š” ๊ทธ๋ฃน์— ์—ฐ๋ฝํ•˜๊ณ  ํ™œ์šฉํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๋“ค์˜ ๊ด€์‹ฌ์„ ๋Œ ์ˆ˜ ์žˆ๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ๊ทธ๋“ค์ด ์˜์กดํ•˜๋Š” ํŠน์ • ํŒจํ‚ค์ง€๋ฅผ ํ†ตํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

์–ด์ œ ์ €๋Š” ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํŒจํ‚ค์ง€ ๋ชฉ๋ก์„ ์‚ดํŽด๋ณด๊ณ  ๋ช‡ ์‚ฌ๋žŒ์—๊ฒŒ ์ˆ˜๋™์œผ๋กœ ์ด๋ฉ”์ผ์„ ๋ณด๋ƒˆ๊ณ  ๋ช‡ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ƒˆ ํ•ด๊ฒฐ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฒ ํƒ€๋กœ ํ…Œ์ŠคํŠธํ•˜๊ณ  ๊ณต์„ ๊ตด๋ฆฌ๊ธฐ ์‹œ์ž‘ํ•˜๊ณ  ์ผ๋ถ€๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด๋ผ๊ณ  ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ํ™๋ณด ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๋ฌธ๊ตฌ/์ ‘๊ทผ๋ฒ•. ์ด๋กœ ์ธํ•ด ์ ์–ด๋„ ํ•œ ๊ฐ€์ง€ ๊ฒฝ์šฐ์— ํ˜ผ๋ž€์ด ์•ผ๊ธฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/sqlalchemy/mako/issues/322#issuecomment-667546739๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋ฆฌ๊ณ  20.2์˜ ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฆด๋ฆฌ์Šค๊ฐ€ ๋‚˜์˜ค๋ฉด ์กฐ๊ธˆ ๋” ์— ๋Œ€ํ•ด ์ฒด๊ณ„์ ์ด๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ

  • ์šฐ๋ฆฌ๊ฐ€ ์—ฐ๋ฝํ•˜๋Š” ์ด์œ 
  • ์—ฐ๋ฝํ•˜๊ธฐ๋กœ ์„ ํƒํ•œ ์‚ฌ๋žŒ/์‹œ๊ธฐ(๊ณต๊ฐœ ๋ฏธ๋””์–ด ์ „๋žต์— ์—ฐ๊ฒฐํ•˜๋ฉด ๋„์›€์ด ๋จ)
  • ์ž๋™ ํ…Œ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์Šค์Šค๋กœ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ์ด์œ 

์šฐ๋ฆฌ๋Š” Twitter( 1 , 2 ) ๋ฐ Reddit ( PyPA ์ž๊ธˆ ์กฐ๋‹ฌ์— ๋Œ€ํ•œ ์ด ์งˆ๋ฌธ์— ๋‹ตํ•˜๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?)์—์„œ ์•ฝ๊ฐ„์˜ ๊ด€์‹ฌ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

@zooba ๋Š” (๋ฒˆ๋“ค๋ง๊ณผ ๊ด€๋ จํ•˜์—ฌ) ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”. ์ด๋ฒˆ ์ฃผ ํ›„๋ฐ˜์— ํ•  ์ˆ˜ ์žˆ๊ณ  ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์„๋ฐฉ๋˜๊ณ  ์‹ถ์ง€ ์•Š์€ ์ผ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

--use-feature=2020-resolver ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์›์ธ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์„ ํ†ตํ•ด ์ดˆ๊ธฐ ์ถœ์‹œ๋ฅผ ์ œ์•ˆํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋Šฆ์—ˆ์Šต๋‹ˆ๊นŒ?

์ œ์•ˆ๋œ 20.3 ์˜์‚ฌ ์ฝ”๋“œ

try:
    _2020_resolver()
except:
    legacy_resolver()

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

๊ทธ ํ›„ ๋ ˆ๊ฑฐ์‹œ ๋ฆฌ์กธ๋ฒ„๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋˜๋ฉด ์ž ์‹œ ๋™์•ˆ 2020-resolver์—์„œ ์ž‘๋™ํ•˜๋Š” ์ผ๋ถ€ ํ”„๋กœ์ ํŠธ์™€ legacy-resolver์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•˜์—ฌ ํด๋ฐฑ์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ œ์•ˆ๋œ 20.4 ์˜์‚ฌ ์ฝ”๋“œ

try:
    _2020_resolver()
except:
    if not use_legacy_resolver:
        raise
    legacy_resolver()

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

@di ๋Š” ์ฒซ ๋ฒˆ์งธ ์‘๋‹ต์„ ๋•๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ์ž์› ๋ด‰์‚ฌ์ž๋ฅผ ๋ชจ์œผ๋Š” ๋ฐ ์ž์›ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ž์› ๋ด‰์‚ฌ์ž๋Š” Twitter, StackOverflow ๋ฐ GitHub์—์„œ ์ƒˆ pip๊ฐ€ ๋‚˜์˜ค๋ฉด ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•˜๊ณ  ์‚ฌ์šฉ์ž ์ง€์› ๋ถ€ํ•˜๋ฅผ ๋„์šฐ๋ฉฐ ์‹ค์ œ ๋ฒ„๊ทธ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌ์ž/๊ธฐ์—ฌ์ž ํŒ€์˜ ์ฃผ์˜๋กœ ์—์Šค์ปฌ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค.

Dustin, ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ• ์ง€์— ๋Œ€ํ•œ ๋Œ€๋žต์ ์ธ ๊ณ„ํš์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๊ฒŒ์‹œํ•˜๋ฉด ๋‹ค๋ฅธ pip ์œ ์ง€ ๊ด€๋ฆฌ์ž๋กœ๋ถ€ํ„ฐ ํ•ฉ์˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๋Œ€๋žต์ ์ธ ๊ณ„ํš์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ง€์›์„ ์š”์ฒญํ•˜๋Š” ํ† ๋ก ์„ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.
  • ๋ชจ๋“  ์‚ฌ๋žŒ ๊ฐ„์˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์ฑ„๋„ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๋Š” Slack ์ฑ„๋„๋กœ ์‚ฌ๋žŒ๋“ค์„ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.
  • ๋ช‡ ๊ฐ€์ง€ FAQ ๋ฐ ๋‹ต๋ณ€์„ ์š”์•ฝํ•œ ๋ฌธ์„œ ์‹œ์ž‘
  • ์ƒˆ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์˜์‚ฌ ๊ฒฐ์ • ํŠธ๋ฆฌ ํฌํ•จ -> ๋ถ„๋ฅ˜๋œ ๋ฌธ์ œ
  • ์ถœ์‹œ์ผ์ด ์•Œ๋ ค์ง€๋ฉด ์ด๋ฅผ ์ฑ„๋„๊ณผ ๊ณต์œ ํ•˜์„ธ์š”.
  • ์ž์› ๋ด‰์‚ฌ์ž๊ฐ€ ์˜จ๋ผ์ธ ์ƒํƒœ๊ฐ€ ๋˜๋„๋ก ๋Œ€๋žต์ ์ธ ์ผ์ •์„ ๊ณ„ํšํ•˜๊ณ  ๋ฆด๋ฆฌ์Šค ๋‹ค์Œ ๋‚ ์— ๋ถ„๋ฅ˜ํ•ฉ๋‹ˆ๋‹ค.

@di๋‹˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹ค๋ฅธ ๊ด€๋ฆฌ์ž๋“ค๋กœ๋ถ€ํ„ฐ ์Šน์ธ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด ๋‚ด์ผ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” 10์›” 28์ผ์ด๋‚˜ 29์ผ ์ˆ˜์š”์ผ์ด๋‚˜ ๋ชฉ์š”์ผ์— pip 20.3์„ ์ถœ์‹œํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@di ๊ท€ํ•˜์˜ ๊ณ„ํš์ด ์Šน์ธ๋˜์—ˆ์Œ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ง„ํ–‰ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค!

@di ๋Š” ๋ฆด๋ฆฌ์Šค ์ง€์—ฐ ๊ฐ€๋Šฅ์„ฑ ์— ๋Œ€ํ•ด ๊ฒฝ๊ณ ํ•ฉ๋‹ˆ๋‹ค.

20.3(๋‹ค์Œ ์ฃผ์— ์ถœ์‹œ๋  ์˜ˆ์ •)์„ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ์ œ๊ฐ€ ์ฐธ์„ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ ํ•˜์—ฌ ํ™๋ณด ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๊ณณ์˜ ์˜๊ฒฌ์—์„œ ๋…ผ์˜ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ผ๋ถ€ CI ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์ผ๋ถ€ ์™ธ๋ถ€ ์š”์ธ์œผ๋กœ ์ธํ•ด ๋ฆด๋ฆฌ์Šค๋ฅผ ์•ฝ๊ฐ„ ์—ฐ๊ธฐํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜ ํŒ€ ํšŒ์˜์—์„œ ์šฐ๋ฆฌ๋Š” 20.3 ๋ฆด๋ฆฌ์Šค๊ฐ€ ๋‚ด์ผ์ด๋‚˜ ๊ธˆ์š”์ผ์— ์žˆ์„ ๊ฒƒ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ #8936์„ ํŒ”๋กœ์šฐํ•˜์„ธ์š”.


์ด์ „ ์˜๊ฒฌ์—์„œ ์ œ์•ˆํ•œ ๊ฒƒ๋งŒํผ ํŒจํ‚ค์ง€๋ณ„ ํ™๋ณด ํ™œ๋™์„ ๋งŽ์ด ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด์„œ ์šฐ๋ฆฌ๊ฐ€ ํ™๋ณด๋ฅผ ํ•˜์ง€ ์•Š์€ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ˆ˜ํ–‰ํ•œ ๋ด‰์‚ฌ ํ™œ๋™ ์ค‘ ์ผ๋ถ€(์ผ๋ถ€๋Š” #8511 ๋˜๋Š” ์ด ์œ„ํ‚ค ํŽ˜์ด์ง€ ์— ์นดํƒˆ๋กœ๊ทธ๋˜์–ด ์žˆ์Œ):

์ง€๋‚œ ๋ช‡ ๋‹ฌ ๋™์•ˆ ์šฐ๋ฆฌ๋Š” 20.2 ๋ฐ 20.3 ๋ฒ ํƒ€, pip 20.3b1 ์—์„œ ์ƒˆ๋กœ์šด ๋ฆฌ์กธ๋ฒ„๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ์‚ฌ๋žŒ๋“ค๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ๊พธ์ค€ํžˆ ๋ฐ›์•„์™”์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณด๊ณ ์„œ๋Š” ๋ฆฌ์กธ๋ฒ„๋ฅผ ๊ฐœ์„ ํ•˜๊ณ  ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉฐ ์ถœ๋ ฅ์˜ UX๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ฒ ํƒ€ ํ”ผ๋“œ๋ฐฑ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ "๋ณ€๊ฒฝ ์‚ฌํ•ญ" ์‚ฌ์šฉ์ž ๊ฐ€์ด๋“œ๋ฅผ ํฌ๊ฒŒ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค .

๋‚ด ๋Œ€๋žต์ ์ธ ๊ณ„ํš์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

* Start a discussion on discuss.python.org asking for support

* Direct folks to a Slack channel that could serve as a communication channel between everyone

* Start a document outlining some FAQ and our responses

* Include a decision tree for new issue -> triaged issue

* Share this with the channel once we have a known release date

* Try and roughly schedule volunteers to be online & triaging in the days following the release

@di ์ง€์†์ ์ธ ๋ถˆํ™•์‹ค์„ฑ๊ณผ ์ง€์—ฐ์œผ๋กœ ์ธํ•ด ์ผ์ •์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ฆด๋ฆฌ์Šค ๋‚ ์งœ๋Š” ๋‚ด์ผ, 11์›” 30์ผ ์›”์š”์ผ์ž…๋‹ˆ๋‹ค. ์ด์ œ ๊ณต์œ ํ•  ํ† ๋ก  ์Šค๋ ˆ๋“œ์™€ ์˜์‚ฌ ๊ฒฐ์ • ํŠธ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ณ„์†ํ•ด์„œ ๊ณต์œ ํ•˜์‹ญ์‹œ์˜ค!

pip 20.3์ด ์ถœ์‹œ๋˜์—ˆ์œผ๋ฉฐ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒˆ ํ•ด์„๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค! ๋‹ค์Œ์€ PSF ๋ธ”๋กœ๊ทธ์˜ ๋ฆด๋ฆฌ์Šค ๋ฐœํ‘œ์ž…๋‹ˆ๋‹ค. https://blog.python.org/2020/11/pip-20-3-release-new-resolver.html

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