Pip: pip 9.0.2์˜ `import pip` ์˜ค๋ฅ˜

์— ๋งŒ๋“  2018๋…„ 03์›” 17์ผ  ยท  71์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pypa/pip

์ผ๋ถ€ ์‚ฌ์šฉ์ž๋Š” ์ด์ œ pip 9.0.2๊ฐ€ ์žˆ๋Š” ํ•จ์ˆ˜์—์„œ import pip ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๊ฐ€์ ธ์˜ค๊ธฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. 9.0.1๋กœ ๋‹ค์šด๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์ถ”์ : https://user-images.githubusercontent.com/2273226/37558391-5e41fc94-2a24-11e8-9fdc-5884445e829a.png

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ:
https://github.com/Miserlou/Zappa/issues/1446

backwards incompatible auto-locked maintenance

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

์–ด์„œ.. ๋‹จ์ผ x.x.PATCH ๋ฒ„์ „ ๋ฒ”ํ”„์—์„œ ์—„์ฒญ๋‚œ ๋ณ€ํ™”๋ฅผ ์ผ์œผํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? "main"์ด๋ผ๊ณ  ํ•˜๋Š” ์ตœ์ƒ์œ„ ๋ฉ”์„œ๋“œ์˜ ๊ฒฝ์šฐ? ์ข€ ๋ณ„๋กœ์ธ ํผ์ธ๊ฑฐ ๊ฐ™์€๋ฐ..

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

์ด๊ฒƒ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ #5079์˜ ์†์ž„์ˆ˜์ž…๋‹ˆ๋‹ค -- pip ๊ฐ€์ ธ์˜ค๊ธฐ๋Š” ์ง€์›๋˜๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

์–ด์„œ.. ๋‹จ์ผ x.x.PATCH ๋ฒ„์ „ ๋ฒ”ํ”„์—์„œ ์—„์ฒญ๋‚œ ๋ณ€ํ™”๋ฅผ ์ผ์œผํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? "main"์ด๋ผ๊ณ  ํ•˜๋Š” ์ตœ์ƒ์œ„ ๋ฉ”์„œ๋“œ์˜ ๊ฒฝ์šฐ? ์ข€ ๋ณ„๋กœ์ธ ํผ์ธ๊ฑฐ ๊ฐ™์€๋ฐ..

์ด๊ฒƒ์€ ๋˜ํ•œ Anaconda๋ฅผ ๊นจ๋œจ๋ ธ๊ณ  @Miserlou ์™€ ๋™์ผํ•œ ์†”๋ฃจ์…˜์„ ์ƒ๊ฐํ•ด ๋ƒˆ์Šต๋‹ˆ๋‹ค.

https://github.com/ContinuumIO/anaconda-issues/issues/8911

๋งŽ์€ ํ”„๋กœ์ ํŠธ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ณด๊ณ ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ anaconda-navigator๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ ค๊ณ  ํ•  ๋•Œ๋„ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” 9.0.3์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด์ƒ์ ์œผ๋กœ๋Š” ์กฐ๋งŒ๊ฐ„?

์ด๊ฒƒ์€ ์ด๋ฏธ ๋งŽ์€ ์ฃผ์š” ํ”„๋กœ์ ํŠธ(Anaconda, SpaCy, Zappa)์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ณ  ์žˆ์œผ๋ฉฐ GitHub์—์„œ๋งŒ ์ด "ํŒจ์น˜" ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ์ค‘๋‹จ๋œ 850,000๊ฐœ ์ด์ƒ์˜ ์‚ฌ์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์†Œํ•œ 9.0.3์—์„œ ์ด ๋Œ€๊ทœ๋ชจ ๋ณ€๊ฒฝ์„ ๋˜๋Œ๋ฆฐ ๋‹ค์Œ ํ–ฅํ›„ 10.xx ๋˜๋Š” ์ตœ์†Œ 9.xx ๋ฆด๋ฆฌ์Šค์—์„œ ์ด ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๋ ค๋Š” ์˜๋„๋ฅผ ๋‹ค์šด์ŠคํŠธ๋ฆผ์œผ๋กœ _announce_ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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

์ผ๋ถ€ OpenStack ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์ด ํžˆํŠธ์ž‘์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Pip 10์€ ์•ฝ ํ•œ ๋‹ฌ ํ›„์— ์ถœ์‹œ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ํ•œ ๋ฌธ์ œ๋Š” import pip ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ pip์˜ ๋‚ด๋ถ€ ๊ธฐ๋Šฅ์— ์•ก์„ธ์Šคํ•˜๋Š” ์ฝ”๋“œ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ณต์‹์ ์œผ๋กœ ๊ทธ๋Ÿฌํ•œ ์‚ฌ์šฉ์„ ์ง€์›ํ•œ ์ ์ด ์—†์œผ๋ฉฐ ํ˜„์žฌ ํ•œ๋™์•ˆ ์ง€์› ๋ถ€์กฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋ฌธ์„œํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค(๋‹จ, https://pip.pypa.io/en/latest/user_guide์—์„œ ๋ฌธ์„œ์˜ "์ตœ์‹ " ๋ฒ„์ „์—๋งŒ ์žˆ์Œ) /#using-pip-from-your-program, ์™œ๋ƒํ•˜๋ฉด ํ•ด๋‹น ๋ฌธ์„œ ์„น์…˜์ด ์ถ”๊ฐ€๋œ ์ดํ›„๋กœ ์•ˆ์ •์ ์ธ ์ƒˆ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค). ๋˜ํ•œ ์ง€๋‚œ 10์›” ๋‚ด๋ถ€ API ์‚ฌ์šฉ์ด ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€ ๊ตฌ์กฐ ๊ฐœํŽธ์„ ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค(https://mail.python.org/pipermail/distutils-sig/2017-October/031642.html ์ฐธ์กฐ). pip 10์— ์žˆ๋Š” ํ•ด๋‹น ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๊ฐ€๋Šฅํ•œ pip 9.0.3 ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” pip์— ๊ด€๊ณ„์—†์ด ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฅผ ๊ฐ‘์ž‘์Šค๋Ÿฝ๊ณ  ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ํŒŒ์†์œผ๋กœ ๋ณด๊ธฐ ์–ด๋ ต๋‹ค.

@dstufft ๊ฐ€ ๊ธด๊ธ‰ 9.0.3 ๋ฆด๋ฆฌ์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ์ €๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋งค์šฐ ๋‹จ๊ธฐ์ ์ธ ํ˜œํƒ์ผ ๋ฟ์ด๋ฉฐ ์‚ฌ๋žŒ๋“ค์ด ์ด๋ฏธ import pip ์—์„œ ๋ฒ—์–ด๋‚˜์ง€ ์•Š์•˜๋‹ค๋Š” ์ ์— ์•ฝ๊ฐ„ ์‹ค๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋กœ ํ”ผํ•ด๋ฅผ ์ž…์€ ์‚ฌ๋žŒ๋“ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹pip 10์„ ์ค€๋น„ํ•ด์•ผ ํ•˜๋ฉฐ ๋‹จ์ˆœํžˆ import pip._internal ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์ง€์›ํ•˜๊ฑฐ๋‚˜ ๊ถŒ์žฅํ•  ์ผ์ด ์•„๋‹˜ ์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ผ์ • ์ˆ˜์ค€์˜ API ์ง€์›์„ ๋‹ค์‹œ ๋„์ž…ํ•˜๊ธฐ ์œ„ํ•œ ์ œ์•ˆ์€ ํ™•์‹คํžˆ ์˜ต์…˜์ด์ง€๋งŒ(์˜ˆ: #5080 ์ฐธ์กฐ) ํ˜„์žฌ ๋‹จ๊ณ„์—์„œ๋Š” ๊ทธ๋Ÿฌํ•œ ๋ณ€๊ฒฝ์ด pip 10์œผ๋กœ ๋งŒ๋“ค๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋Šฆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์ „ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ์ฝ”๋“œ์— ์˜ํ•ด ๊ฒฝ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  _๋กœ ์‹œ์ž‘ํ•˜๋Š” "๋‚ด๋ถ€"๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š๊ณ  ์ด๊ฒƒ์€ ๋‹จ์ง€ ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฒ”ํ”„์ด๋ฏ€๋กœ ์‹ค์ œ๋กœ ์ด๊ฒƒ์„ ๊ฐ‘์ž‘์Šค๋Ÿฝ๊ณ  ์˜ˆ๊ธฐ์น˜ ์•Š์€ ํŒŒ์†์œผ๋กœ ๋ณด๋Š” ๊ฒƒ์ด ๋งค์šฐ ์‰ฝ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. .

์˜ˆ, ์ด๊ฒƒ์€ ์‚ฌ๋žŒ๋“ค์ด MAJOR ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ์—์„œ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€๊ฒฝ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์„๊ฑฐ์•ผ.

๋ถˆํ–‰ํžˆ๋„, ์ด ์—„์ฒญ๋‚œ ๋ณ€ํ™”๋Š” PATCH ์—…๋ฐ์ดํŠธ๋กœ ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ด ์—…๋ฐ์ดํŠธ๋Š” _๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด์ง€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค_. ์ด๊ฒƒ์€ ์˜๋ฏธ๋ก ์  ๋ฒ„์ „ ๊ด€๋ฆฌ์˜ ์ •๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ Python ์ƒํƒœ๊ณ„ ์ „๋ฐ˜์— ๊ฑธ์ณ ๋ง‰๋Œ€ํ•œ ํ”ผํ•ด๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ PATCH ์—…๋ฐ์ดํŠธ์—์„œ ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ๋˜๋Œ๋ฆฐ ๋‹ค์Œ MAJOR ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ์™€ ํ•จ๊ป˜ ์ฃผ์š” ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์œ„ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์„ฃ๋ถ€๋ฅด๊ฒŒ ๊นจ๋œจ๋ ธ๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์˜ค๊ณ  ์žˆ์Œ์„ ๋” ์ž˜ ์ธ์‹ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ์ด๊ฒƒ์ด ์•ˆ์ •์ ์ธ ๋ฌธ์„œ์— ๋ฌธ์„œํ™”๋˜์ง€ _์•Š์€_ ๊ฒƒ์„ ๊ณ ๋ คํ•˜๋ฉด ์ด๊ฒƒ์ด ์ด๋ฏธ ๋ฌธ์„œํ™”๋˜๊ณ  ๋ฐœํ‘œ๋˜์—ˆ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์€ ๊ฒฝ์ฐฐ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์˜.

๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์—„์ฒญ๋‚œ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ฅผ ๋œ์–ด์ฃผ๊ณ  ์ด ๋ฌธ์ œ๋ฅผ ๋˜๋Œ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ ์˜๋ฏธ๋ก ์  ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

@Miserlou ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. pip 10์ด ์ฃผ์š” ๋ฒ„์ „์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๋ถ€ ์ด๋ฆ„ ๋ณ€๊ฒฝ ๋ณ€๊ฒฝ์„ ๋ชฉํ‘œ๋กœ ์‚ผ์•˜์Šต๋‹ˆ๋‹ค. ์ €๋Š” ํŒจ์น˜ ๋ฆด๋ฆฌ์Šค์šฉ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ž˜ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. @dstufft ์—์„œ ์ด์— ๋Œ€ํ•ด ํ•‘์„ ๋ณด๋ƒˆ๊ณ , ์ด๋Š” pip 10 ๋ฆด๋ฆฌ์Šค ์ด์ „์ธ TLS ์ง€์› ๋งˆ๊ฐ์ผ์ด ์ž„๋ฐ•ํ–ˆ์„ ๋•Œ Mac OS ์‚ฌ์šฉ์ž์—๊ฒŒ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ๋‹จ๊ธฐ ํŒจ์น˜ ๋ฆด๋ฆฌ์Šค๋ฅผ ๋ณด์ฆํ•  ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์ค‘์š”ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ๊ธฐ์กด ์‚ฌ์šฉ๋ฒ•์„ ๊นจ๋ ค๋Š” ์˜๋„๋Š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

ํ›„์† ์กฐ์น˜ 9.0.3์— ๋Œ€ํ•œ ๊ฒฐ์ •์€ @dstufft ์—๊ฒŒ ๋งก๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค. 9.0.2์— ๋“ค์–ด๊ฐ„ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์ •๋ณด๊ฐ€ ์—†๊ฑฐ๋‚˜ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ์ง€ ์—ฌ๋ถ€๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด Mac OS ๋ฌธ์ œ์˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š”์ง€ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— 9.0.2๋ฅผ ์™„์ „ํžˆ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ์ „๋ฐ˜์ ์ธ ์ด์ ์ด ๋ ์ง€ ํŒ๋‹จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” (์ ์–ด๋„ ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š”) 9.0.1๋กœ ๊ณ ์ •ํ•˜๋Š” ๊ฒƒ์ด ํ•ด๊ฒฐ์ฑ…์ด๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๊ฒƒ์ด ๊ฐ€์žฅ ๋‚˜์œ ์„ ํƒ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

macOS TLS ๋ฌธ์ œ๋Š” macOS<10.13์—์„œ ์‹œ์Šคํ…œ Python์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

@dstufft์—๊ฒŒ ํ›„์† ์กฐ์น˜ 9.0.3์˜ ๊ฒฐ์ •์„ ๋‚จ๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@pfmoore์™€ ๊ฐ™์€ ์ž…์žฅ์ž…๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ€์ ธ์˜ค๊ธฐ ์ˆœ์„œ๋ฅผ ํ™•์ธํ•˜๊ณ  ๊ฐ€์ ธ์˜ค๊ธฐ pip๋ฅผ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„์— ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(ํŠนํžˆ, pip ๊ฐ€์ ธ์˜ค๊ธฐ _before_ ๊ฐ€์ ธ์˜ค๊ธฐ ์š”์ฒญ์ด ์ผ๋ถ€ ๊ฒฝ์šฐ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค). (์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๊ณต์‹์ ์œผ๋กœ ์ง€์›๋˜์ง€ ์•Š๋Š” pip์˜ ๋‚ด๋ถ€ ์‚ฌ์šฉ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.)

docker python 3.4๊ฐ€ ์žˆ๋Š” gitlab-ci์˜ pip 9.0.2์™€ ๋™์ผํ•œ ๋ฌธ์ œ: KeyError

  File "/usr/local/lib/python3.4/site-packages/pip/__init__.py", line 45, in <module>
    from pip.vcs import git, mercurial, subversion, bazaar  # noqa
  File "/usr/local/lib/python3.4/site-packages/pip/vcs/mercurial.py", line 9, in <module>
    from pip.download import path_to_url
  File "/usr/local/lib/python3.4/site-packages/pip/download.py", line 40, in <module>
    from pip._vendor import requests, six
  File "/usr/local/lib/python3.4/site-packages/pip/_vendor/requests/__init__.py", line 98, in <module>
    from . import packages
  File "/usr/local/lib/python3.4/site-packages/pip/_vendor/requests/packages.py", line 12, in <module>
    sys.modules['pip._vendor.requests.packages.' + mod] = sys.modules["pip._vendor." + mod]
KeyError: 'pip._vendor.urllib3.contrib'

์ฐธ๊ณ ๋กœ 9.0.2๋Š” ์†์ƒ๋œ ๋นŒ๋“œ์™€ ํ•จ๊ป˜ ๋ฆด๋ฆฌ์Šค๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
screenshot_2018-03-20_08-43-35

Travis-CI ์ฐธ์กฐ: https://travis-ci.org/pypa/pip/builds/354616774?utm_source=github_status&utm_medium=notification

์˜ค๋ฅ˜๋Š” ๊ด€๋ จ์ด ์—†์„ ์ˆ˜ ์žˆ์ง€๋งŒ "์„œ๋‘๋ฅธ ๋ฆด๋ฆฌ์Šค" ๋ƒ„์ƒˆ๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค...

@pf๋ฌด์–ด

@dstufft ๊ฐ€ ๊ธด๊ธ‰ 9.0.3 ๋ฆด๋ฆฌ์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ์ €๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋งค์šฐ ๋‹จ๊ธฐ์ ์ธ ํ˜œํƒ์ผ ๋ฟ์ด๋ฉฐ ์‚ฌ๋žŒ๋“ค์ด ์ด๋ฏธ ์ˆ˜์ž… ํ•์—์„œ ๋ฒ—์–ด๋‚˜์ง€ ์•Š์•˜๋‹ค๋Š” ์ ์— ์•ฝ๊ฐ„ ์‹ค๋งํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋กœ ํ”ผํ•ด๋ฅผ ์ž…์€ ์‚ฌ๋žŒ๋“ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹pip 10์„ ์ค€๋น„ํ•ด์•ผ ํ•˜๋ฉฐ ๋‹จ์ˆœํžˆ pip._internal ๊ฐ€์ ธ์˜ค๊ธฐ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์ง€์›ํ•˜๊ฑฐ๋‚˜ ๊ถŒ์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋Š” ์ ์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์ด ์ €์žฅ์†Œ ์†Œ์œ ์ž ์˜ ์ง„์ˆ ์ด๋ผ๋Š” ๊ฒƒ์ด ๋ฏฟ๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค... ๋‹น์‹ ์€ ๋ง ๊ทธ๋Œ€๋กœ "f*ck ์˜๋ฏธ๋ก ์  ๋ฒ„์ „ ๊ด€๋ฆฌ"์™€ "์–ด์จŒ๋“  ์‚ฌ์šฉ ์ค‘๋‹จ ์ •์ฑ…์ด ํ•„์š”ํ•œ ์‚ฌ๋žŒ"์ด๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

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

@RonnyPfannschmidt ์ด๊ฒƒ์€ "์†๋„ ์ œํ•œ์„ ์ดˆ๊ณผํ•˜์—ฌ ์šด์ „ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  100๋ฒˆ์ด๋‚˜ ๋งํ–ˆ์Šต๋‹ˆ๋‹ค."๋ผ๊ณ  ๋งํ•œ ๋‹ค์Œ ๋ชจ๋“  ์—”์ง„ ์ฐจ๋Ÿ‰์„ ๋ถ€์‹ฏ๋Œ ์ฐจ๋Ÿ‰์œผ๋กœ ๊ต์ฒดํ•˜์—ฌ ์‚ฌ๋žŒ๋“ค์ด ์ œํ•œ ์†๋„๋ฅผ ๋„˜์ง€ ๋ชปํ•˜๋„๋ก ์†๋„ ์ œํ•œ์„ ์‹œํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ์†๋„ ์ œํ•œ.

๋‹น์‹ ์€ ๋ง์„ ๋Œ๋ฆฌ๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด ๋‚˜์˜๋‹ค๋Š” ๊ฒƒ์„ ์™„๋ฒฝํ•˜๊ฒŒ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. "๊ทธ๊ฒƒ์ด ๊นจ์งˆ ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ์ง€ ๋งˆ์‹ญ์‹œ์˜ค"๋ผ๋Š” ๋ง์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋‹น์‹ ์ด ์ž˜๋ชปํ•˜๊ธฐ๋ฅผ ์‹ซ์–ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋‚œ์„ ํผ๋œจ๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@RonnyPfannschmidt

๊ทธ๊ฒƒ์€ ๋‹น์‹ ์ด ์ž˜๋ชปํ•˜๊ธฐ๋ฅผ ์‹ซ์–ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋‚œ์„ ํผ๋œจ๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

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

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

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

@anx-ckreuzberger

์ด๊ฒƒ์ด ์ด ์ €์žฅ์†Œ ์†Œ์œ ์ž์˜ ์ง„์ˆ ์ด๋ผ๋Š” ๊ฒƒ์ด ๋ฏฟ๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค... ๋‹น์‹ ์€ ๋ง ๊ทธ๋Œ€๋กœ "f*ck ์˜๋ฏธ๋ก ์  ๋ฒ„์ „ ๊ด€๋ฆฌ"์™€ "์–ด์จŒ๋“  ์‚ฌ์šฉ ์ค‘๋‹จ ์ •์ฑ…์ด ํ•„์š”ํ•œ ์‚ฌ๋žŒ"์ด๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ๊ธฐ์„œ ์ขŒ์ ˆ๊ฐ์„ ์ดํ•ดํ•˜์ง€๋งŒ, ์šฐ๋ฆฌ๊ฐ€ ์•ฝ์†ํ•˜์ง€ ์•Š์€ ์ผ์— ๋Œ€ํ•ด pip ์œ ์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ๋น„๋‚œํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์˜์ง€์— ์ ์  ์งœ์ฆ์ด ๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋น„๋‚œ์„ ํ•˜๊ณ  ์‹ถ์œผ์‹œ๋‹ค๋ฉด

  1. ์‚ฌ์šฉ์ž ์ฝ”๋“œ์—์„œ pip ๋‚ด๋ถ€ API ์‚ฌ์šฉ์„ ์ง€์›ํ•˜๋Š” pip ์œ ์ง€ ๊ด€๋ฆฌ์ž์˜ ๋ช…๋ น๋ฌธ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค.
  2. pip๊ฐ€ ์˜๋ฏธ ์ฒด๊ณ„ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” pip ์œ ์ง€ ๊ด€๋ฆฌ์ž์˜ ๋ช…๋ น๋ฌธ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค.

๊ทธ ์ฆ๊ฑฐ๋ฅผ ์ฐพ์ง€ ๋ชปํ•  ๊ฒƒ ๊ฐ™์€๋ฐ...

๊ทธ๋ž˜์„œ ๋‹น์‹ ์€ ๋‚ด๊ฐ€ pip์˜ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ์— ์˜์กดํ•˜๋Š” ํƒ€์‚ฌ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ž˜๋ชป์ด ์žˆ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

์šฐ๋ฆฌ๋Š” ๊ฒฝ๊ณ ๋ฅผ ์ œ๊ณตํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ช‡ ๋‹ฌ ์ „์— ๊ณต์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ์ƒํ™ฉ์„ ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์„œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์œผ๋ฉฐ ๋‚ด๋ถ€ API ์‚ฌ์šฉ์ด ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ํŠธ๋ž˜์ปค์˜ ๋ฌธ์ œ์— ์ง€์†์ ์œผ๋กœ ๋‹ต๋ณ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋น„์ถ”์ฒœ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๋‹น์‹ ์ด ์ œ์•ˆํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. pip ์ž์ฒด๊ฐ€ ์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ ๋ฅผ ๋ฟœ์–ด๋‚ผ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(๋˜๋Š” pip๊ฐ€ ๊ฒฝ๊ณ ๋ฅผ ๋„๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ๋ณต์‚ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ pip._internal import pip._internal ๋ณ€๊ฒฝํ•ด ๋„ ๋ฉˆ์ถ”์ง€ ์•Š์Šต๋‹ˆ๋‹ค. :disappointed:).

์ด "์ˆ˜์ •"์— ๊ด€ํ•ด์„œ๋Š” ๊ธด๊ธ‰ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด 9.0.2๊ฐ€ ์‹ ์†ํ•˜๊ฒŒ ๋ฆด๋ฆฌ์Šค๋˜์—ˆ์œผ๋ฉฐ ์šฐ๋ฆฌ๋Š” ์ด ๋ฌธ์ œ๋ฅผ ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๋Š” ์ ์„ ๊ธฐ๊บผ์ด ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋ช…์ด 2-3์ฃผ์ธ 9.0.3์„ ์ถœ์‹œํ•˜๋Š” ๊ฒƒ์€ ํ•ฉ๋ฆฌ์ ์ธ ์ผ์ž…๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ €๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ๊ณ ๋ คํ•  ๊ฒƒ์ด๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” 9.0.x ๋ฆด๋ฆฌ์Šค์— ๊ด€๋ จ๋œ ์‚ฌ๋žŒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ์ธ์ ์œผ๋กœ ๋™์˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ €๋Š” pip 10์— ๋Œ€ํ•ด ์ž‘์—… ์ค‘์ด๋ฉฐ, ์ด๋Š” ์ด ๋ชจ๋“  ๋…ผ์Ÿ์„ ๋ฌด์˜๋ฏธํ•˜๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์ด ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ €์˜ ๋งˆ์ง€๋ง‰ ๋ง์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฆด๋ฆฌ์Šค์™€ ๊ด€๋ จ๋œ ์‚ฌํ•ญ์— ์ง‘์ค‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๊ฐœ์ธ์ ์ธ ์กฐ์–ธ:

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

๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ pip 9.0.2 ๋ฐ Python 2.7.14์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋„์ปค ์ปจํ…Œ์ด๋„ˆ ์™ธ๋ถ€์˜ ๊ฐœ๋ฐœ ์‹œ์Šคํ…œ์—์„œ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
pip ๊ฐ€์ ธ์˜ค๊ธฐ( import.pip , from.pip , \'pip , \"pip ์— ๋Œ€ํ•œ grep'd )๋ฅผ ๊ฒ€์ƒ‰ํ–ˆ์ง€๋งŒ ์•„๋ฌด ๊ฒƒ๋„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ Plone์€ setuptools setup.py ํŒŒ์ผ์— ํฌํ•จ๋œ ํŒจํ‚ค์ง€์˜ ๊ตฌ์„ฑ์„ ์ž๋™์œผ๋กœ ํฌํ•จํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์˜์‹ฌ์Šค๋Ÿฝ๊ฒŒ ๋“ค๋ฆฌ์ง€๋งŒ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ด๊ฒƒ์€ __import__ ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  pip AFAIcansee์—์„œ ์•„๋ฌด ๊ฒƒ๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์—ญ์ถ”์ ์˜ ๊ด€๋ จ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

  File "/home/plone/.buildout/shared-eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 359, in endElementNS
    self.context.end()
  File "/home/plone/.buildout/shared-eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py", line 558, in end
    self.stack.pop().finish()
  File "/home/plone/.buildout/shared-eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py", line 706, in finish
    actions = self.handler(context, **args)
  File "/home/plone/.buildout/shared-eggs/z3c.autoinclude-0.3.7-py2.7.egg/z3c/autoinclude/zcml.py", line 51, in includeDependenciesDirective
    info = DependencyFinder(dist).includableInfo(['configure.zcml', 'meta.zcml'])
  File "/home/plone/.buildout/shared-eggs/z3c.autoinclude-0.3.7-py2.7.egg/z3c/autoinclude/dependency.py", line 26, in includableInfo
    module = resolve(dotted_name)
  File "/home/plone/.buildout/shared-eggs/zope.dottedname-4.2-py2.7.egg/zope/dottedname/resolve.py", line 39, in resolve
    found = __import__(used)
  File "/plone/buildout/lib/python2.7/site-packages/pip/__init__.py", line 45, in <module>
    from pip.vcs import git, mercurial, subversion, bazaar  # noqa
  File "/plone/buildout/lib/python2.7/site-packages/pip/vcs/mercurial.py", line 9, in <module>
    from pip.download import path_to_url
  File "/plone/buildout/lib/python2.7/site-packages/pip/download.py", line 40, in <module>
    from pip._vendor import requests, six
  File "/plone/buildout/lib/python2.7/site-packages/pip/_vendor/requests/__init__.py", line 98, in <module>
    from . import packages
  File "/plone/buildout/lib/python2.7/site-packages/pip/_vendor/requests/packages.py", line 12, in <module>
    sys.modules['pip._vendor.requests.packages.' + mod] = sys.modules["pip._vendor." + mod]
zope.configuration.xmlconfig.ZopeXMLConfigurationError: File "/plone/buildout/parts/instance/etc/site.zcml", line 15.2-15.55
    ZopeXMLConfigurationError: File "/plone/buildout/parts/instance/etc/package-includes/002-bda.aaf.site-configure.zcml", line 1.0-1.56
    ZopeXMLConfigurationError: File "/plone/buildout/src-aaf/bda.aaf.site/src/bda/aaf/site/configure.zcml", line 11.2-11.48
    ZopeXMLConfigurationError: File "/plone/buildout/src-aaf/bda.aaf.site/src/bda/aaf/site/configure-dependencies.zcml", line 10.2-10.39
    ZopeXMLConfigurationError: File "/plone/buildout/src-addons/plone.app.mosaic/src/plone/app/mosaic/configure.zcml", line 9.2-9.39
    ZopeXMLConfigurationError: File "/home/plone/.buildout/shared-eggs/plone.app.tiles-3.0.3-py2.7.egg/plone/app/tiles/configure.zcml", line 18.2-18.41
    ZopeXMLConfigurationError: File "/plone/buildout/src/plone.app.z3cform/plone/app/z3cform/configure.zcml", line 10.2-10.41
    ZopeXMLConfigurationError: File "/plone/buildout/src/plone.app.widgets/plone/app/widgets/configure.zcml", line 12.2-12.41
    ZopeXMLConfigurationError: File "/home/plone/.buildout/shared-eggs/Products.CMFPlone-5.1.0.1-py2.7.egg/Products/CMFPlone/configure.zcml", line 15.2-15.46
    ZopeXMLConfigurationError: File "/home/plone/.buildout/shared-eggs/plone.app.contenttypes-1.4.9-py2.7.egg/plone/app/contenttypes/configure.zcml", line 10.2-10.37
    KeyError: 'pip._vendor.urllib3.contrib'

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

์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค. pip๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ช…๋ น์ค„ ์œ ํ‹ธ๋ฆฌํ‹ฐ์ž…๋‹ˆ๋‹ค. Python์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ฌธ์ œ์˜ ํ˜„์‹ค์ž…๋‹ˆ๋‹ค.

@pf๋ฌด์–ด

๋‚˜๋Š” ์—ฌ๊ธฐ์„œ ์ขŒ์ ˆ๊ฐ์„ ์ดํ•ดํ•˜์ง€๋งŒ, ์šฐ๋ฆฌ๊ฐ€ ์•ฝ์†ํ•˜์ง€ ์•Š์€ ์ผ์— ๋Œ€ํ•ด pip ์œ ์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ๋น„๋‚œํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์˜์ง€์— ์ ์  ์งœ์ฆ์ด ๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค. pip๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ช…๋ น์ค„ ์œ ํ‹ธ๋ฆฌํ‹ฐ์ž…๋‹ˆ๋‹ค. Python์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ฌธ์ œ์˜ ํ˜„์‹ค์ž…๋‹ˆ๋‹ค.

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

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

๋‹ค์Œ์— ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ?

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

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

@pfmoore ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์—ญ์ถ”์ ์—์„œ ์˜์‹ฌ์Šค๋Ÿฌ์šด ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? pip ๋‚ด๋ถ€ AFAIK๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค.

@ ๋ชจ๋‘, ๊นจ์ง„ ์ฝ”๋“œ์— ๋Œ€ํ•ด ์œ ์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ๋น„๋‚œํ•˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ ํ•ด๊ฒฐ์— ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค. pip๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ช…๋ น์ค„ ์œ ํ‹ธ๋ฆฌํ‹ฐ์ž…๋‹ˆ๋‹ค. Python์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ฌธ์ œ์˜ ํ˜„์‹ค์ž…๋‹ˆ๋‹ค.

Fact: ์–ด๋–ค ์ด์œ ์—์„œ๋“  ์ฝ”๋“œ๋ฅผ ์ž๋™ ๊ฒ€์‚ฌํ•˜์—ฌ ๊ฐ€์ ธ์˜ค๋ฉด ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ค‘๋‹จ. ๋‚˜๋Š” ์ด๊ฒƒ์ด @t ์˜ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
๊ฒฐ๋ก : pip๋Š” ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋Š” ์ „์—ญ ๋˜๋Š” ํ˜„์žฌ virtualenv/venv Python ๋„ค์ž„์ŠคํŽ˜์ด์Šค์—์„œ ์ž์ฒด๋ฅผ ๊ฒฉ๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์˜ค์—ผ๋˜์ง€ ์•Š๊ณ  ์šฐ์—ฐํžˆ ์ˆ˜์ž…๋˜๋Š” ์ผ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋จผ์ € ์ž˜๋ชป๋œ ์ฝ”๋“œ๋กœ repo ๊ด€๋ฆฌ์ž๋ฅผ ๋น„๋‚œํ–ˆ๋‹ค๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋น„๋‚œ์€ ์ขŒ์ ˆ๊ฐ์—์„œ ๋น„๋กฏ๋˜์—ˆ์œผ๋ฉฐ, IMHO 9.0.2 ๋ฆด๋ฆฌ์Šค ๊ฐ€ semver์˜ ์ •์˜์— ๋”ฐ๋ผ ํŒจ์น˜ ๋ฆด๋ฆฌ์Šค๋ผ๋Š” ์‚ฌ์‹ค์„ ์ง€์ ํ•ฉ๋‹ˆ๋‹ค( @pfmoore ๋Š” pip๊ฐ€ ๋ฐ˜๋“œ์‹œ semver๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹˜์„ ๋ถ„๋ช…ํžˆ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋‚ ์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค).

@MikeHart85

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

๊ฝค ๋งŽ์ด. ๋‚ด ๋ง์€ JavaScript ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค: npm, bower, yarn, ๋‹ค์Œ ~๋…„~์ฃผ์— ์ถœ์‹œ๋˜๋Š” ๋ชจ๋“  ๊ฒƒ

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

๋‚˜๋Š” ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‚˜์˜ (์šฐ๋ฆฌ์˜?) ๋ถˆ๋งŒ ์‚ฌํ•ญ์ด ์ž˜๋ชป ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ์Œ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ œ 3์ž ์œ ์ง€ ๋ณด์ˆ˜์˜ ์ž˜๋ชป์ด๋ผ๋Š” ๊ฒƒ์„ ๋ˆ„๊ตฌ์—๊ฒŒ๋„ ๋‚ฉ๋“์‹œํ‚ค๋Š” ๊ฒƒ์ด ์ •๋ง๋กœ ์–ด๋ ต๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ •ํ•ด์•ผ ํ•˜์ง€๋งŒ.

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

์ด๊ฒƒ์€ pip 9.0.2์šฉ์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด pip 10์šฉ์ž…๋‹ˆ๊นŒ? pip 9.0.2์šฉ์ด๋ผ๋ฉด Changelog ์— ๋ฉ”๋ชจ๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด์จŒ๋“ , pip 10 ๊ฐœ๋ฐœ์— ๋งค์šฐ โ€‹โ€‹์ ๊ทน์ ์ด๊ณ  import pip ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ณต์ง€๋ฅผ ๋ณด๋‚ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ข‹์Šต๋‹ˆ๋‹ค! ๊ณ„์† ํ•ด!

๋น„์ถ”์ฒœ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๋‹น์‹ ์ด ์ œ์•ˆํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. pip ์ž์ฒด๊ฐ€ ์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ ๋ฅผ ๋ฟœ์–ด๋‚ผ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(๋˜๋Š” pip๊ฐ€ ๊ฒฝ๊ณ ๋ฅผ ๋„๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ๋ณต์‚ฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ import pip._internal, ๊ทธ๋ž˜์„œ ๊ทธ ๋ณ€๊ฒฝ์กฐ์ฐจ๋„ ์‹ค๋ง์„ ๋ฉˆ์ถ”์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค).

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋„ˆ๋ฌด ์–ด๋ ค์šธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค... ๋‹น์‹ ์€ ์ด๋ฏธ __init__.py ์— ์ด๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:

if __name__ == '__main__':
    sys.exit(main())

๊ทธ๋ƒฅ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•˜๋ฉด ์–ด๋–จ๊นŒ์š”?

if __name__ == '__main__':
    sys.exit(main())
else:
    logger.warning("You are importing PIP as a Python library. This behaviour is deprecated and should no longer be used. We will break the API with version 10.0!!!111eleven Please see https://pip.readthedocs.org/some_link_where_you_explain_this.html")

edit : "์—„๊ฒฉ"ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์—ฌ๊ธฐ์—์„œ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์œ ์‚ฌํ•œ ๋ช…๋ น๋ฌธ์„ ํ•˜์œ„ ๋ชจ๋“ˆ์— ์ถ”๊ฐ€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์ด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•  ๊ฒƒ์ด๋ผ๋Š” ์‚ฌ์‹ค์€ ๋‹ค๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ•ดํ‚นํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ธ์ œ๋“ ์ง€ ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ญ์ƒ ์ฃผ๋ณ€์—์„œ ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋””์ž์ธ ๊ฒฐ์ •์—์„œ ์ฃผ๋ณ€์˜ ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

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

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

์ด๋Ÿฌํ•œ ๊ฒƒ๋“ค์— ๋Œ€ํ•œ ๊ด€์ ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์žˆ์Šต๋‹ˆ๋‹ค .. 15 ๋ฏธ๋งŒ? 20? ์‚ฌ๋žŒ๋“ค์ด ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋ฌธ์ œ๋ฅผ ์ผ์œผ์ผฐ๋Š”์ง€์— ๋Œ€ํ•ด ๋…ผํ‰ํ•˜๋Š” ๋™์•ˆ(์ด๋Ÿฌํ•œ ์ธก์ •ํ•ญ๋ชฉ์—๋Š” ํ•ญ์ƒ "๋น™์‚ฐ์˜ ์ผ๊ฐ" ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ) pip 9.0.2๋Š” ์ด๋ฏธ ์ง€๋‚œ ์ฃผ์— ๋‘ ๋ฒˆ์งธ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋œ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค(์กด์žฌํ•˜์ง€๋„ ์•Š์€ ๋‚ ์งœ๊นŒ์ง€ ๊ณ„์‚ฐํ•˜๋ฉด) for) ์ถœ์‹œ ์ดํ›„ PyPI์—์„œ 1,700๋งŒ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ๋‚ ๋งŒ ๋ณด๋ฉด PyPI ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ pip 9.0.1์„ ์ถ”์›”ํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ 80%์ž…๋‹ˆ๋‹ค.

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

์‹œ๊ฐ„์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด 9.0.3์„ ์ž๋ฅด๋ ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ @thet ๊ฐ€ ๋ฌผ๊ฑด์„ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•˜๋Š” ์ž๋™ ๊ฐ€์ ธ์˜ค๊ธฐ ๋„๊ตฌ์ผ ๋ฟ์ด๊ณ  ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ์‹์œผ๋กœ๋“  pip์˜ ๋‚ด๋ถ€ API. ๊ทธ๊ฒƒ์ด ๋˜ํ•œ pip์˜ ๋‚ด๋ถ€ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ ๋™์ž‘์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋๋‚˜๋ฉด ๊ตฌ์ฒด์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์„ ์„ ๋‹คํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด์ง€๋งŒ, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค ์ค‘ ํŠนํžˆ.

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

๋จผ์ € ์ž˜๋ชป๋œ ์ฝ”๋“œ๋กœ repo ๊ด€๋ฆฌ์ž๋ฅผ ๋น„๋‚œํ–ˆ๋‹ค๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋น„๋‚œ์€ ์ขŒ์ ˆ์—์„œ ๋งŒ๋“ค์–ด์กŒ๋‹ค

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ขŒ์ ˆ๊ฐ์ด ํฌ๋ฉฐ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ƒฅ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•˜๋ฉด ์–ด๋–จ๊นŒ์š”?

์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์„ ์ข€ ๋” ์ผ์ฐ ์ƒ๊ฐํ•ด ๋ณด์•˜๋”๋ผ๋ฉด ์ข‹์•˜์„ ํ…๋ฐ. ๋ฌผ๋ก , ๋‚ด๋ถ€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ pip 10์—์„œ ์žฌ๊ตฌ์„ฑ๋˜๋ฏ€๋กœ ์ง€๊ธˆ์€ ์ง„์งœ ์˜๋ฏธ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋„ˆ๋ฌด ๋Šฆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ™•์‹คํžˆ ๋ฏธ๋ž˜๋ฅผ ์œ„ํ•ด ์ด ํŠธ๋ฆญ์„ ๊ธฐ์–ตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ pip 9.0.2์šฉ์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด pip 10์šฉ์ž…๋‹ˆ๊นŒ?

10.0์˜ ๊ฒฝ์šฐ. 9.0.2๋ฅผ ๋ฆด๋ฆฌ์Šคํ•˜๋ ค๋Š” ์›๋ž˜ ์˜๋„๋Š” ์—†์—ˆ๊ณ , TLS ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ ์šฉ๋  ๋•Œ Mac OS ์‚ฌ์šฉ์ž๊ฐ€ PyPI์— ๋Œ€ํ•œ ๋ชจ๋“  ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์žƒ์ง€ ์•Š๋„๋ก ๊ธด๊ธ‰ ๋ฆด๋ฆฌ์Šค๋กœ๋งŒ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

@dstufft ๊ฐ€ ์—ฌ๊ธฐ์—์„œ ํ›จ์”ฌ ๋” ์™„๋ฒฝํ•˜๊ฒŒ ์‘๋‹ตํ–ˆ์œผ๋ฏ€๋กœ ์ด๊ฒƒ์ด ํ˜„์žฌ๋กœ์„œ๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ํ•ญ์ƒ ์ด "์œ„ํ˜‘"์ด ์žฌ๋ฏธ์žˆ์Šต๋‹ˆ๋‹ค.

์ „ํ˜€ ์œ„ํ˜‘์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ๋“ค๋ ธ๋‹ค๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

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

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

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

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

@dstufft๋‹˜ , ์ฐธ์—ฌํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ๋Š” ์ ์  ๋” ๋œจ๊ฑฐ์›Œ์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!

๋จผ์ € ๋…ธ๊ณ ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๋์ด ์—†๊ณ  ๊ฐ์‚ฌํ•  ์ˆ˜ ์—†๋Š” ์ž‘์—…์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ pip ๋งŒํผ ํฌ๊ณ  ์ธ๊ธฐ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ๋งŒ ๋” ์•…ํ™”๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ์ƒํ•ฉ๋‹ˆ๋‹ค!

์ด์ œ ๋‹น๋ฉดํ•œ ๋ฌธ์ œ๋กœ: ์ง€๊ธˆ๊นŒ์ง€ 20๋ช…์˜ _maintainers_๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ํ–ˆ์ง€๋งŒ ์ด๋ฏธ ์ˆ˜์ฒœ ๋ช…์˜ _๋ช…์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ํ–ฅ์„ ๋ฐ›๋Š” ์ผ๋ถ€ ํ”„๋กœ์ ํŠธ๋Š” ๊ทธ ์ž์ฒด๋กœ ๋ง‰๋Œ€ํ•œ ๊ทœ๋ชจ์ž…๋‹ˆ๋‹ค. Anaconda, OpenStack, SpaCy, Zappa ๋ฐ ์ˆ˜๋งŒ ๋ช…์˜ ์‚ฌ์šฉ์ž. Slack ์ฑ„๋„์ด ์ด์— ๋Œ€ํ•œ ํ† ๋ก ์œผ๋กœ ๋„˜์ณ๋‚œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (๋ง ๊ทธ๋Œ€๋กœ ์ด ๊ธ€์„ ์“ฐ๋ฉด์„œ ์ƒˆ๋กœ์šด ์ด์Šˆ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.)

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

์ง€๊ธˆ๊นŒ์ง€์˜ ์ƒํ™ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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

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

๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
๋ถ€์ž

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

@dstufft

์ด๋Ÿฌํ•œ ๊ฒƒ๋“ค์— ๋Œ€ํ•œ ๊ด€์ ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์žˆ์Šต๋‹ˆ๋‹ค .. 15 ๋ฏธ๋งŒ? 20? ์‚ฌ๋žŒ๋“ค์ด ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋ฌธ์ œ๋ฅผ ์ผ์œผ์ผฐ๋Š”์ง€์— ๋Œ€ํ•ด ๋…ผํ‰ํ•˜๋Š” ๋™์•ˆ(์ด๋Ÿฌํ•œ ์ธก์ •ํ•ญ๋ชฉ์—๋Š” ํ•ญ์ƒ "๋น™์‚ฐ์˜ ์ผ๊ฐ" ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ) pip 9.0.2๋Š” ์ด๋ฏธ ์ง€๋‚œ ์ฃผ์— ๋‘ ๋ฒˆ์งธ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋œ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค(์กด์žฌํ•˜์ง€๋„ ์•Š์€ ๋‚ ์งœ๊นŒ์ง€ ๊ณ„์‚ฐํ•˜๋ฉด) for) ์ถœ์‹œ ์ดํ›„ PyPI์—์„œ 1,700๋งŒ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ๋‚ ๋งŒ ๋ณด๋ฉด PyPI์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ pip 9.0.1์„ ์ถ”์›”ํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ 80%์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ฉ”ํŠธ๋ฆญ์ด ์ง€์†์  ํ†ตํ•ฉ/์ „๋‹ฌ ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ์ž๋™ํ™”๋œ pip install pip --upgrade ๋ช…๋ น์— ์˜ํ•ด ํฌ๊ฒŒ ํŽธํ–ฅ๋˜์–ด ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค(์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ ํ•ญ์ƒ pypi์—์„œ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— import pip ๋„ ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด IT ์„ธ๊ณ„๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

15๋ช… ๋ฏธ๋งŒ์˜ ์‚ฌ๋žŒ๋“ค์ด ์ด์— ๋Œ€ํ•ด ๋ถˆ๋งŒ์„ ์ œ๊ธฐํ–ˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ๋‹ค์Œ ๋‘ ๊ฐ€์ง€๋ฅผ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

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

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

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

์™œ ์ด๊ฒƒ์„ ๊ฒฝ๊ณ ํ•ด์•ผ ํ•˜๋Š”์ง€ ๋‚˜์—๊ฒŒ๋Š” ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. pip ๋ฅผ ๋ช…๋ น์ค„ ๋„๊ตฌ ์ด์™ธ์˜ ๋‹ค๋ฅธ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์™„์ „ํžˆ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด pip ๊ฐ€์ ธ์˜ค๊ธฐ์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ์ „ํ˜€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Chrome์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ผ๋ถ€ .so ์— ๋Œ€ํ•ด ๋งํฌํ•˜๊ณ  ABI ํ˜ธํ™˜์„ฑ์„ ๊นจ๋œจ๋ ธ๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

SemVer์˜ ์ผ๋ฐ˜์ ์ธ ํ•ด์„์€ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ ๋‚ด๋ถ€๊ฐ€ ์•„๋‹ˆ๋ผ ์ง€์›๋˜๋Š” ๊ณต์šฉ ์ธํ„ฐํŽ˜์ด์Šค(์ด ๊ฒฝ์šฐ CLI)์— ์ ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด๋ถ€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์€ ์–ด์จŒ๋“  pip ๋ฒ„์ „์„ ๊ณ ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ๊ฒƒ๋“ค์€ ์ž„์˜์ ์œผ๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

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

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

์žฅ๊ธฐ์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ๊ฐ€ semver์ธ์ง€ ์•„๋‹Œ์ง€์— ๋Œ€ํ•œ ํ˜ผ๋ž€์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚ ์งœ ๊ธฐ๋ฐ˜ ๋ฆด๋ฆฌ์Šค ๊ณ„ํš์œผ๋กœ ์ด๋™ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด iPhone์—์„œ ๋ณด๋‚ธ

2018๋…„ 3์›” 20์ผ ์˜ค์ „ 11:02์— Rich Jones [email protected] ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@dstufft๋‹˜ , ์ฐธ์—ฌํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ๋Š” ์ ์  ๋” ๋œจ๊ฑฐ์›Œ์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค!

๋จผ์ € ๋…ธ๊ณ ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ๋์ด ์—†๊ณ  ๊ฐ์‚ฌํ•  ์ˆ˜ ์—†๋Š” ์ž‘์—…์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ pip๋งŒํผ ํฌ๊ณ  ์ธ๊ธฐ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ๋งŒ ๋ฌธ์ œ๊ฐ€ ๋” ์•…ํ™”๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ์ƒํ•ฉ๋‹ˆ๋‹ค!

์ด์ œ ๋‹น๋ฉดํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•ด: ์ง€๊ธˆ๊นŒ์ง€ 20๋ช…์˜ ์œ ์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ํ–ˆ์ง€๋งŒ ์ด๋ฏธ ์ˆ˜์ฒœ ๋ช…์˜ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ํ–ฅ์„ ๋ฐ›๋Š” ์ผ๋ถ€ ํ”„๋กœ์ ํŠธ๋Š” ๊ทธ ์ž์ฒด๋กœ ๋ง‰๋Œ€ํ•œ ๊ทœ๋ชจ์ž…๋‹ˆ๋‹ค. Anaconda, OpenStack, SpaCy, Zappa ๋ฐ ์ˆ˜๋งŒ ๋ช…์˜ ์‚ฌ์šฉ์ž. Slack ์ฑ„๋„์ด ์ด์— ๋Œ€ํ•œ ํ† ๋ก ์œผ๋กœ ๋„˜์ณ๋‚œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (๋ง ๊ทธ๋Œ€๋กœ ์ด ๊ธ€์„ ์“ฐ๋ฉด์„œ ์ƒˆ๋กœ์šด ์ด์Šˆ๊ฐ€ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.)

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

์ง€๊ธˆ๊นŒ์ง€์˜ ์ƒํ™ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„์ „ ๋ฌธ์ž์—ด์˜ ํ˜•์‹์ด ์ฃผ์–ด์ง€๋ฉด ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” pip ์œ ์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ์˜๋ฏธ๋ก ์  ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ๋”ฐ๋ฅด๊ณ  ์žˆ๋‹ค๊ณ  ๋ฏฟ์—ˆ์Šต๋‹ˆ๋‹ค.
pip ์œ ์ง€ ๊ด€๋ฆฌ์ž๋Š” ๋Œ€๋Œ€์ ์ธ ๋ณ€๊ฒฝ์„ ๋„์ž…ํ•œ "ํŒจ์น˜"๋ฅผ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์˜ˆ๊ณ ๋˜์ง€ ์•Š์•˜๊ณ  ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ œ ์ƒ๊ฐ์—๋Š” ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜๋„ํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
์ด์ œ import pip๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๋งค์šฐ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ ๋Œ€์ ์ธ ํ”„๋กœ๊ทธ๋žจ์ด ์ฆ‰์‹œ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ํŒŒ์ด์ฌ ์ƒํƒœ๊ณ„ ์ „๋ฐ˜์— ๊ฑธ์ณ ํฐ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ฅผ ์ผ์œผํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฌธ์„œ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ pip๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ฒฝ๊ณ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
ํŒจ์น˜ ์—…๋ฐ์ดํŠธ์—์„œ pip ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ ์ด ์†์ƒ์„ ์ผ์œผํ‚ฌ ๊ฒƒ์ด๋ผ๋Š” ๋ฐœํ‘œ๋Š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฐœํ‘œ๋Š” ์•„์ง ์ถœ์‹œ๋˜์ง€ ์•Š์€ ๋ฒ„์ „์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋ณ€๊ฒฝ ๋กœ๊ทธ์—๋„ ์–ธ๊ธ‰๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” pip๋‚˜ pip ๊ฐœ๋ฐœ์ž๋ฅผ ๊ต์ฒดํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค! ์šฐ๋ฆฌ๋Š” ๋„ˆ๋ฅผ ์‚ฌ๋ž‘ํ•ด!
..ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์ผ์ด ๋‹ค์‹œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค!
..๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” semver๊ฐ€ ํŒ”๋กœ์šฐ๋˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค!
์šฐ๋ฆฌ๋Š” ์ด ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ทจ์†Œํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ PATCH๋ฅผ ์ •๋ง ์ •๋ง ์›ํ•ฉ๋‹ˆ๋‹ค!
pip>=10.0.0 ์„ธ๊ณ„์—์„œ ํ™˜๊ฒฝ์„ ๊ฒ€์‚ฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์˜ ํ•„์š”์„ฑ์€ ๋‹ค๋ฅธ ํ† ๋ก ์˜ ์ฃผ์ œ์ด์ง€๋งŒ ๋‹น๋ฉดํ•œ ๋ฌธ์ œ๋Š” pip์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ pip๋ฅผ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๋Š” ๋ง์„ ๋“ค์–ด๋ณธ ์ ์ด ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. <=9 ์„ธ๊ณ„, ๊ทธ๋ฆฌ๊ณ  ๋Œ€๊ทœ๋ชจ์˜ ์˜ˆ๊ณ  ์—†๋Š” ๋ณ€ํ™”๊ฐ€ ์žˆ์—ˆ๊ณ  ์ˆ˜์ฒœ ๋ช…์˜ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ถ€์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์ด ์—ญ์ „๋˜๊ธฐ๋ฅผ ์ •๋ง๋กœ ์›ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
๋ถ€์ž

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ๋ณด๊ฑฐ๋‚˜ ์Šค๋ ˆ๋“œ๋ฅผ ์Œ์†Œ๊ฑฐํ•˜์„ธ์š”.

@Miserlou

๋ฒ„์ „ ๋ฌธ์ž์—ด์˜ ํ˜•์‹์ด ์ฃผ์–ด์ง€๋ฉด ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” pip ์œ ์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ์˜๋ฏธ๋ก ์  ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ๋”ฐ๋ฅด๊ณ  ์žˆ๋‹ค๊ณ  ๋ฏฟ์—ˆ์Šต๋‹ˆ๋‹ค.

semver์— ๊ฐ•๋ ฅํ•˜๊ฒŒ ๋ฐ˜๋Œ€ํ•˜๋Š” ์‚ฌ๋žŒ์œผ๋กœ์„œ ์ด ํ˜ผ๋ž€์„ ์—†์• ๊ธฐ ์œ„ํ•ด ๋‚ด ๋ฒ„์ „ ๋ฌธ์ž์—ด์ด ์–ด๋–ค ํ˜•์‹์ด์–ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? "์  3๊ฐœ"๊ฐ€ ๋‚˜์—๊ฒŒ "์—„๊ฒฉํžˆ semver๋ฅผ ๋”ฐ๋ฅธ๋‹ค"๋Š” ์˜๋ฏธ๋Š” ์•„๋‹ˆ๋ฏ€๋กœ ์ด ๊ฐ€์ •์€ ๋†€๋ž์Šต๋‹ˆ๋‹ค.

์ด ์˜๊ฒฌ ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ: pip๊ฐ€ semver๋ฅผ ์ค€์ˆ˜ํ•˜๋Š”์ง€ ์—ฌ๋ถ€ ๋˜๋Š” ์ค€์ˆ˜๋ฅผ ์•ฝ์†ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด major.minor.micro ๋ฒ„์ „ ๊ด€๋ฆฌ ์ฒด๊ณ„์˜ ์‚ฌ์šฉ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋งˆ์ดํฌ๋กœ ๋ฆด๋ฆฌ์Šค์— ๋Œ€ํ•œ ์ผ์ข…์˜ ์ œํ•œ์— ๋Œ€ํ•œ ์•”์‹œ์  ์•ฝ์†์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ~= 9.0.1 ์™€ ๊ฐ™์€ ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•œ ๋ฆด๋ฆฌ์Šค ํ•€์ด ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์ค‘๋‹จ์œผ๋กœ๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋‚จ์€ ์œ ์ผํ•œ ์•ˆ์ „ํ•œ ๋Œ€์•ˆ์€ ์ผ๋ฐ˜ ๋ฒ„์ „ ์ผ์น˜ ์ž…๋‹ˆ๋‹ค. ๋ฒ„์ „ ์ผ์น˜ ์ด์ƒ์„ ์ง€์›ํ•  ์˜๋„๊ฐ€ ์—†๋‹ค๋ฉด pip๋Š” ๋‹จ์กฐ ์ฆ๊ฐ€ํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ๋Š” Chrome ์Šคํƒ€์ผ ๋ฒ„์ „ ์ฒด๊ณ„๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: @dstufft๋Š” ์ด๋ฏธ ๋‚ ์งœ ๊ธฐ๋ฐ˜ ๋ฒ„์ „์„ ์ฑ„ํƒํ•˜์—ฌ ์ด ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•  ๊ฒƒ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ์‚ฌ๊ฑด์œผ๋กœ ์ธํ•œ ์•ˆํƒ€๊นŒ์šด ๋ถ€์ˆ˜์  ํ”ผํ•ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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

์ œ์ณ๋‘๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„์— ๋”ฐ๋ผ virtualenv(2 ๋˜๋Š” 3, ์ค‘์š”ํ•˜์ง€ ์•Š์Œ)์—์„œ ์ด๊ฒƒ์„ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

virtualenv -p python3 /tmp/pip
/tmp/pip/bin/pip install -e path/to/clone/of/pip/9.0.2
/tmp/pip/bin/pip install requests
/tmp/pip/bin/python

๊ทธ๋Ÿฐ ๋‹ค์Œ Python ์…ธ ๋‚ด์—์„œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

>>> import requests
>>> import pip

์š”์ฒญ์„ ์•„์ง ๊ฐ€์ ธ์˜ค์ง€ ์•Š์€ ๊ฒฝ์šฐ import pip ๊ฐ€ ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์—์„œ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์ค‘๋‹จ

import pip ๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ํ•˜๋Š” ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ ์•ฝ์†์— ํ•ด๋‹นํ•˜๋Š” ์•ˆ์ •์ ์ธ API๋กœ ๋ฌธ์„œํ™”๋œ ๊ณณ์„ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ทธ ์‚ฌ์šฉ์„ ๋‹จํ˜ธํ•˜๊ฒŒ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Ÿฌํ•œ ๋ฌธ์„œ๋ฅผ ์ œ๊ฑฐํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

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

pip ๋Š” Python์˜ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ํ™˜๊ฒฝ์„ ๊ฒ€์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 1+1=2.

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

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

์–ด์จŒ๋“  pip ์กฐ์ฐจ๋„ ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ _๊ฐ€์ง€๊ณ _ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ์ด๋ฏธ Python ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ข‹์€ ํ‘œ์‹œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!

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

๋ฌธ์„œ์— ์ด๋ ‡๊ฒŒ ํ•˜์ง€ ๋ง๋ผ๋Š” ๋‚ด์šฉ์€ ์—†์—ˆ๊ณ  ์ง€๊ธˆ๋„ ์—†์Šต๋‹ˆ๋‹ค.

https://pip.pypa.io/en/latest/user_guide/#using -pip-from-your-program

_์ด ๋ฐ”๋กœ ์ €์žฅ์†Œ_์˜ "๋ฌธ์„œ" ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋ฉด ํ•ด๋‹น ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๋„ ์ตœ์‹ ์„ ์ฐธ์กฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ์— ๋Œ€ํ•œ ์ž์ฒด ๋งํฌ๋Š” ์ตœ์‹  ๋งํฌ๋กœ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์„น์…˜์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์•ˆ์ •์ ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

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

pip ์˜ ๊ณต์šฉ ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ํ•ด์„์ด ๋‚˜์™€ ๊ฐœ๋ฐœ์ž ๋ฐ pip ๋ฅผ CLI ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค๊ณผ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์˜ ์‹ค์ œ ํ”ผํ•ด๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? pip != 9.0.2 ๋ฅผ ๊ณ ์ •ํ•˜๊ณ  ๋๋ƒ…๋‹ˆ๋‹ค.

์ง€์›๋˜๋Š” ๊ณต๊ฐœ API์˜ ์ผ๋ถ€๊ฐ€ ๋ฌด์—‡์ด๊ณ  ์ผ๋ถ€๊ฐ€ ์•„๋‹Œ์ง€์— ๋Œ€ํ•ด ์ด ์‹œ์ ์—์„œ ์šฐ๋ฆฌ๋Š” ๋ชจ๋‘ ๊ฐ™์€ ํŽ˜์ด์ง€์— ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•˜๋ฉฐ, ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์†Œ๊ธ‰ํ•˜์—ฌ ํ†ต์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ง€๊ธˆ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์€ ์—†์Šต๋‹ˆ๋‹ค.

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

ํ˜„์žฌ๋กœ์„œ๋Š” ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ์ธ์‹ํ•˜๊ณ  ์ด ๋ฌธ์ œ๋ฅผ ์ง€์ ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ „๋ถ€๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์žฅ๊ธฐ ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์–ด์จŒ๋“  ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋ฉฐ import pip ํ•˜์ง€ ์•Š๊ณ  ๋ช…๋ น์ค„์„ ํ†ตํ•ด pip๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ์œ ์‚ฌํ•œ python ๋ช…๋ น ์‚ฌ์šฉ).

๋‚˜๋Š” ์ด ํ† ๋ก ์ด ์ƒ์‚ฐ์ ์ด์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ ์‹ค์ œ๋กœ ๋” ๋งํ•  ๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค. ์žˆ์Šต๋‹ˆ๋‹ค:

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

์ด ์‹œ์ ์—์„œ ํ† ๋ก ์€ ๊ด€๋ จ๋œ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์„ ๋” ์ขŒ์ ˆ์‹œํ‚ค๋Š” ๊ฒƒ ์™ธ์—๋Š” ์‹ค์งˆ์ ์ธ ๋ชฉ์ ์ด ์—†์œผ๋ฏ€๋กœ ์ง€๊ธˆ์€ ์ด ๋ฌธ์ œ์—์„œ ๋ฌผ๋Ÿฌ๋‚ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” 10.0 ๋˜๋Š” 9.0.3์ด ์ถœ์‹œ๋˜๋ฉด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ Call To Action์— ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์ด๋ฉด ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ์—ด๊ฑฐ๋‚˜ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ diff๋ฅผ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด do-not-import-pip ๋งŒํŠธ๋ผ๋ฅผ ๋” ์ž˜ ๋ณด์ด๊ฒŒ ํ•˜๋ ค๋ฉด ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ์ด๋ฆ„์„ "_pip"๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ์ „์ฒด๊ฐ€ ์ด๋ฆ„ ์ˆ˜์ค€์—์„œ ๊ณต๊ฐœ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
๋˜ํ•œ ์ž๋™ ๊ฒ€์‚ฌ ์ฝ”๋“œ์— ๋ฐ‘์ค„๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ•ญ๋ชฉ์„ ๋ณด์ง€ ์•Š๋„๋ก ์ง€์‹œํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธ€์Ž„์š”, ํ›„์ž๋Š” ๊ด€๋ จ ๊ฒ€์‚ฌ ์ฝ”๋“œ๋„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ ์–ด๋„ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ณ  (๊ด€๋ก€์— ๋”ฐ๋ผ) ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž, ๋งˆ์ง€๋ง‰์œผ๋กœ ๋งน์„ธํ•ฉ๋‹ˆ๋‹ค. pip 10์€ ์ด๋ฏธ ๋ชจ๋“  ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ pip._internal python -m pip _pip ์Šต๋‹ˆ๋‹ค.

https://github.com/pypa/pip/pull/5100 ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”์ง€ ๋ˆ„๊ตฌ๋‚˜ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ธ์œผ์‹ญ์‹œ์˜ค. #5100์ด ์ž˜๋ชป๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  https://github.com/pypa/pip/pull/5101 ์„ ํ™•์ธํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@dstufft #5101์˜ ์ˆ˜์ • ์‚ฌํ•ญ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํ• ์• ํ•ด ์ฃผ์‹  @dstufft ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ €๋Š” Anaconda ํŒ€๊ณผ ํ˜‘๋ ฅํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ์•Œ๋ฆฌ๊ณ  pip ๊ฐ€์ ธ์˜ค๊ธฐ์—์„œ ๋ฒ—์–ด๋‚˜๋„๋ก ๋„์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ์˜ ๊ธฐ๋ก์„ ์œ„ํ•ด #5101๋„ ๋‚ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ #5101์„ ์‚ฌ์šฉํ•˜๋ฉด ๋„๊ตฌ ๋‚ด์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์˜ ์‚ฌํ•ญ: ํŒจ์น˜๋œ ํ•์ด๋‚˜ ์šฐ๋ฆฌ ๋„๊ตฌ๋ฅผ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ 9.0.3์—์„œ ์ˆ˜์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ‰์ƒ import pip ์„ ์“ฐ์ง€ ์•Š์•˜์ง€๋งŒ ํ•œ ํŒจํ‚ค์ง€์˜ ์†Œ๋น„์ž์˜€๋˜ ์‚ฌ๋žŒ์˜ ๋น ๋ฅธ ํ•ด๊ฒฐ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ๋ฅผ ์ฝ์€ ํ›„ ๋งŽ์€ ์•ฑ์ด ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค์— ๋Œ€ํ•ด ์•Œ์ง€ ๋ชปํ•˜๋Š” ์‚ฌ์ด์— pip๋ฅผ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ๋ฉฐ ๋งŽ์€ ๊ฐœ๋ฐœ์ž์™€ ์‚ฌ์šฉ์ž๊ฐ€ ์ž ์žฌ์ ์œผ๋กœ v9.0.2 ๋ฐ v10์˜ ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค.

I ๋‘ ๋ฒˆ์งธ/์„ธ ๋ฒˆ์งธ/N ๋ฒˆ์งธ ์ ์ ˆํ•œ ์‚ฌ์šฉ ์ค‘๋‹จ ๊ฒฝ๊ณ ๊ฐ€ ๋” ์›ํ™œํ•˜๊ฒŒ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด pypi.python.org ๊ฒŒ์‹œ๋ฌผ๋„ ๋ ๊นŒ์š”?

๋งŒ์„ธ! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

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

pip list --format=json ?

๋จผ์ € pip ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ช‡ ๊ฐ€์ง€ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์˜ต์…˜๊ณผ ์ธ์ˆ˜๋ฅผ ํฌํ•จํ•˜์—ฌ ์ œ ๋ชจ๋“  ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์™„์ „ํžˆ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

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

๋น„์Šทํ•œ ์ด์•ผ๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. https://public-inbox.org/git/1267957655.3759.29.camel@mattotaupa/T/

@drunkwcodes ๋‚˜๋Š” ๋‹น์‹ ์ด ์ œ์•ˆํ•œ ๊ฒƒ์ด pip ๋ฌธ์„œ ์—์„œ ์–ธ๊ธ‰ ํ•œ ๊ธฐ์กด ํŒจํ‚ค์ง€ packaging , setuptools ๋ฐ distlib ์— ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ์—์„œ ์•Œ ์ˆ˜ ์žˆ๋Š” ํ•œ ๊ธฐ๋Šฅ์˜ ๊ฒฉ์ฐจ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์€ ๋ชจ๋“  ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๊ณ  ๊ฒ€์‚ฌํ•˜๋ ค๊ณ  ํ•˜๊ณ  ๊ฐ€์ ธ์˜ค๊ธฐ ์‹คํŒจ๋ฅผ ์น˜๋ช…์ ์ธ ์˜ค๋ฅ˜๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋„๊ตฌ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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

@sruggier ์–ธ๊ธ‰ ๋œ ํŒจํ‚ค์ง€๋Š” ๋ชจ๋‘ ํ›Œ๋ฅญํ•˜๊ณ  WheelFile.install() ๋„ ๋” ๋งŽ์€ ํ™๋ณด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ œ๊ณต๋˜๋Š” ์›์Šคํ†ฑ ์„œ๋น„์Šค pip.main() ๋Š” ์œ„์˜ ๋ชจ๋“  ๊ฒƒ๊ณผ ๋Œ€์ฒดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ์‹œ๋„ํ•ด ๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

pip๋ฅผ lib๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์ฃผ์žฅํ•œ๋‹ค๋ฉด ๋งŽ์€ ๊ฐ€์ •์„ ์žฌ๊ณ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@drunkwcodes ๋ช…ํ™•ํžˆ ํ•˜์ž๋ฉด , pip.main() ๋Š” ๊ต์ฒดํ•˜๊ธฐ ๊ฐ€์žฅ ์‰ฌ์šด ์‚ฌ์šฉ๋ฒ•์ž…๋‹ˆ๋‹ค. subprocess.run([sys.executable, '-m', 'pip', <rest of args>]) ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ WheelFile.install() ๊ฐ€ ์Šน๊ฒฉ๋˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” wheel ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” API๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋ช…์‹œํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์›๋ž˜ pip ๋ฌธ์„œ์—์„œ wheel์„ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ์š”์ฒญ์— ๋”ฐ๋ผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํœ  PEP๋Š” ํœ ์„ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋งค์šฐ ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค. ํƒ€์‚ฌ ๋ชจ๋“ˆ์—์„œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„ ๋ชจ๋‘๊ฐ€ pip์—์„œ ํ•˜๋Š” ์ผ์— ๊ฐ์‚ฌํ•˜๋ฉฐ ๊ทธ๊ฒƒ์ด ์‰ฝ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ๋ก์„ ์œ„ํ•ด:

๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ด๋ฏธ import pip์—์„œ ๋ฉ€์–ด์ง€์ง€ ์•Š์•˜๋‹ค๋Š” ์‚ฌ์‹ค์— ์•ฝ๊ฐ„ ์‹ค๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋กœ ํ”ผํ•ด๋ฅผ ์ž…์€ ์‚ฌ๋žŒ๋“ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹ํ• 10์„ ์ค€๋น„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

spaCy ๊ฐ€ import pip ์—์„œ ๋ฉ€์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹pip๋ฅผ ๊ฐ€์ ธ์˜จ spaCy 1์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. --- ๋ช…๋ฐฑํ•œ ์ด์œ ๋กœ pip๋ฅผ ํŒจ์น˜ ๋ฆด๋ฆฌ์Šค๋กœ ๊ณ ์ •ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. v10์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ ์šฉ๋˜์—ˆ๋‹ค๋ฉด ์ด์ „ ๋ฒ„์ „์€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์•˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•ซํ”ฝ์Šค๋ฅผ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

pip10 ์„ธ๊ณ„์—์„œ ํŒŒ์ด์ฌ ํ™˜๊ฒฝ์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ์ง€์นจ

distlib์— ๋Œ€ํ•œ PyPA์˜ ์ž…์žฅ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? Pip์€ ๋ถ„๋ช…ํžˆ ๊ทธ๊ฒƒ์„ ์–ด๋Š ์ •๋„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ distlib๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํŒจํ‚ค์ง•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

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

distlib๊ฐ€ ํŒจํ‚ค์ง•์„ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. "distutils2/packaging"์„ ์–ธ๊ธ‰ํ•˜์ง€๋งŒ distutils2๋Š” ๋ญ”๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

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

์•„๋งˆ๋„ deprecates๋Š” ๋‹จ์–ด๊ฐ€ ๋„ˆ๋ฌด ๊ฐ•ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ดํ•ด์˜ ์ถœ์ฒ˜:

https://distlib.readthedocs.io/en/latest/overview.html#distlib -evolved-out-of-packaging

์•„, ๊ทธ๊ฒƒ์€ ๋‹ค๋ฅธ "ํŒจํ‚ค์ง•"์ž…๋‹ˆ๋‹ค. distutils๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ์ œ์•ˆ๋œ stdlib ๋ชจ๋“ˆ์ด์—ˆ์Šต๋‹ˆ๋‹ค. PyPI packaging ํ”„๋กœ์ ํŠธ์™€ ์™„์ „ํžˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. distlib ํ”„๋กœ์ ํŠธ์— ๊ทธ ์ฐจ์ด๋ฅผ ์ข€ ๋” ๋ช…ํ™•ํžˆ ํ•ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

distlib ํ”„๋กœ์ ํŠธ์— ๊ทธ ์ฐจ์ด๋ฅผ ์ข€ ๋” ๋ช…ํ™•ํžˆ ํ•ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค :) ์ฐธ์กฐ: https://bitbucket.org/pypa/distlib/issues/100/clarify-project-positioning-and-status

์ด ์Šค๋ ˆ๋“œ๋Š” ๋‹ซํžŒ ํ›„ ์ตœ๊ทผ ํ™œ๋™์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์ž ๊ฒผ์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ฌ์‹ญ์‹œ์˜ค.

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