Pip: ํ•ด๊ฒฐ ๊ฒฐ๊ณผ๋ฅผ ์–ป์œผ๋ ค๋ฉด `pip install --dry-run` ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

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

์ด ๊ธฐ๋Šฅ์œผ๋กœ ํ•ด๊ฒฐ๋˜๋Š” ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

ํ˜„์žฌ pip์—๋Š” ์‚ฌ์šฉ์ž๊ฐ€ pip์˜ ์ข…์†์„ฑ ํ•ด๊ฒฐ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • "lockfile"๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์ƒ์„ฑํ•˜์‹ญ์‹œ์˜ค.
  • ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๊ธฐ์กด ํ™˜๊ฒฝ์ด ์†์ƒ๋˜๋Š”์ง€ ํ™•์ธ
  • ํŒจํ‚ค์ง€ ์„ธํŠธ ๊ฐ„์˜ ์ข…์†์„ฑ ์ถฉ๋Œ ํ™•์ธ
  • (๋”?)

์ด ๋ชจ๋“  ๊ฒƒ์€ ์˜ค๋Š˜๋‚  ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ถ€ ํ™˜๊ฒฝ์— ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์ •๋ณด๋ฅผ ์œ„ํ•ด ํ™˜๊ฒฝ์„ ์กฐ์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ด€๋ จ ์ •๋ณด๋Š” ๋Ÿฐํƒ€์ž„์— pip install ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์›ํ•˜๋Š” ์†”๋ฃจ์…˜ ์„ค๋ช…

8032๋Š” pip install --dry-run ์˜ต์…˜์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

7819๋Š” pip resolve ๋ช…๋ น์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

1345์—๋Š” ๋” ๋งŽ์€ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค. :)

๋‚ด๊ฐ€ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ ์ถ”์ ๊ธฐ์— ๋” ๋งŽ์€ ์ œ์•ˆ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์ฒด ์†”๋ฃจ์…˜

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

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


์ฐธ๊ณ : ์ด ์„ค๋ช…์€ 2020๋…„ 4์›” @pradyunsg ์— ์˜ํ•ด ํŽธ์ง‘๋˜์—ˆ์œผ๋ฉฐ(์ž์„ธํ•œ ๋‚ด์šฉ์€ ํŽธ์ง‘ ๊ธฐ๋ก ์ฐธ์กฐ) ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ •๋ง ์˜ค๋ž˜๋˜๊ณ  ์˜ค๋ž˜๋œ ๋Œ“๊ธ€ ์ด ์ˆจ๊ฒจ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

dependency resolution UX feature request

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

๋ˆ„๊ตฐ๊ฐ€๋Š” ๋จผ์ € ํ•ด๊ฒฐ ๊ฒฐ๊ณผ๋ฅผ ์ œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ผ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์กธ๋ฒ„ ์ž‘์—…์— ๊ด€๋ จ๋œ AFAIK pip ์œ ์ง€ ๊ด€๋ฆฌ์ž๋Š” ํ˜„์žฌ ํ˜„์žฌ ๋ฆฌ์กธ๋ฒ„ ์ž์ฒด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๋ ค๋ฉด ์™ธ๋ถ€์˜ ๋„์›€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

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

ํ , PyPI์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํŒจํ‚ค์ง€ ๋ฒ„์ „์„ ๋‚˜์—ดํ•˜๋Š” ๋ช…๋ น์ด ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์„ธ์š”?

์ฒ˜๋Ÿผ:

$ pip list Django

1.2.4

1.2.3

1.2.2

1.2.1

1.2

1.1.3

1.1.2

1.0.4

$

Original Comment By: Hugo Lopes Tavares

๋‚˜๋Š” ๊ทธ ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•œ๋‹ค.


Original Comment By: CarlFK

๋ฐฉ๊ธˆ ๋‚ด ํฌํฌ์— ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” carljm, jezdez ๋ฐ ianb์˜ ์˜๊ฒฌ์„ ์›ํ•ฉ๋‹ˆ๋‹ค
๋ณ‘ํ•ฉํ•˜๊ธฐ ์ „์—.

์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค: https://bitbucket.org/hltbra/pip-list-
๋ช…๋ น/๋ณ€๊ฒฝ ์ง‘ํ•ฉ/e5c135a46204


Original Comment By: Hugo Lopes Tavares

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


Original Comment By: Carl Meyer

๋‹ค๋ฅธ ER์ด ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ํ•œ ๊ฒ€์ƒ‰์— ์ด๊ฒƒ์„ ์ถ”๊ฐ€ํ•ด๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
django์˜ ๋ฒ„์ „์„ ์ฐพ์„ ๋•Œ 3000์ค„(์‹ค์ œ๋กœ)์ด ๋‚˜์˜ค์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
(๋ชจ๋“  django-foo ๋•Œ๋ฌธ์— "pip search django"์— 1000๊ฐœ ์ด์ƒ์˜ ์กฐํšŒ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŒจํ‚ค์ง€. )


Original Comment By: CarlFK

๋‚˜๋Š” ์–ด๋–ค ๋ฒ„์ „์ด ์„ค์น˜๋  ๊ฒƒ์ธ์ง€ ๋ณด์—ฌ์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฒ„์ „ ๋ชฉ๋ก์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ์ตœ์‹ ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์ƒˆ๋กœ์šด ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ 0์— ๊ฐ€๊นŒ์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ชฉ๋ก์˜ ์ถœ๋ ฅ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์˜
์ž‘์€ ๋ณ€ํ™”:
https://bitbucket.org/jumpa/pip/changeset/62076643cf33


Original Comment By: jumpa

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

๊ทธ๋ฆฌ๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ๊ฒ€์ƒ‰์— ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋”๋ผ๋„
search --versions ๋˜๋Š” search -v ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๋งŽ์€ ๋ฌธ์ œ.


Original Comment By: Hugo Lopes Tavares

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

๊ทธ๋ฆฌ๊ณ  ๊ฒ€์ƒ‰์„ ์œ„ํ•ด ๊ฐœ์„ ์ด ํ•„์š”ํ•˜๋‹ค๋Š” CarlFK์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.
์ขํžˆ๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” PyPI์˜ API๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์— ์˜์กดํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ทธ๋‹ค์ง€ ๋งŽ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” PyPI๋ฅผ ๋ชจ๋‘ ๋‹ค์šด๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  ์ •๊ทœ์‹์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ํ˜„์ง€์—์„œ ๊ฒ€์ƒ‰! ๊ฒ€์ƒ‰ํ•  --exact ํ”Œ๋ž˜๊ทธ์™€ ๊ฐ™์€ ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ์ผ๋ถ€์ด๋ฏ€๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด "--exact django"๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ 
๊ฒฐ๊ณผ์— django ์ž์ฒด๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.


Original Comment By: Carl Meyer

์•ˆ๋…•ํ•˜์„ธ์š” jumpa, xmlrpc์—์„œ ๊ฐ€์ ธ์˜จ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒ„์ „์„ ํ‘œ์‹œํ•˜๋Š” ์ข‹์€ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค.
์—ฐ๊ฒฐ!

pip๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋‹ค์Œ ์Šค๋‹ˆํŽซ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

pip                       - pip installs packages.  Python packages.  An

easy_install ๊ต์ฒด(๋ฒ„์ „: 0.2, 0.2.1, 0.3, 0.3.1, 0.4, 0.5, 0.5.1,
0.6, 0.6.1, 0.6.2, 0.6.3, 0.7, 0.7.1, 0.7.2, 0.8, 0.8.1, 0.8.2)

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


Original Comment By: Hugo Lopes Tavares

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

pip list Django


1.2.4

1.2.3 installed

1.2.2

1.2.1

1.2

1.1.3

1.1.2

1.0.4

์ฐธ๊ณ : YUM(RedHat), pkglist(BSD),
dpkg(Debain)๋Š” ๋ณ„๋„์˜ ๋ชฉ๋ก ํ”Œ๋ž˜๊ทธ ๋˜๋Š” ๋ช…๋ น์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.


Original Comment By: Kelsey Hightower

Carl, ๋‚˜๋Š” ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๋‚  ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ,
Kelsey: ๋‹ค๋ฅธ ๋ช…๋ น์€ ๋‚˜์˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์กฐ๊ธˆ ์ด์ƒํ•˜๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

$ pip search -v --exact Django

~ ๋Œ€

$ pip list Django

์„ค์น˜๋œ ๋ฒ„์ „์„ ๋ณด์—ฌ์ฃผ๋Š” Kelsey์˜ ์•„์ด๋””์–ด๋Š” ๋ชฉ๋ก์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
๋ช…๋ น.


Original Comment By: Hugo Lopes Tavares

๊ฒ€์ƒ‰ ๋ช…๋ น์„ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

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

๋‚ด ๋ณ€๊ฒฝ ์„ธํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. https://github.com/phuihock/pip/commit/46bad23b5bf31850a02803ea1ca18be5deca9db3

์ด ์ƒํƒœ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PyPI์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ตœ์‹  ๋ฒ„์ „์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ์•ฝ 2๋…„ ๋™์•ˆ ์ €๋ฅผ ๊ดด๋กญํžˆ๊ณ  ์žˆ์œผ๋ฉฐ, ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.
๋ฒ„์ „ ํ”Œ๋ž˜๊ทธ์™€ ๊ฒฐํ•ฉ๋œ ์ œํ•œ๋œ ๊ฒ€์ƒ‰์€ ๋งค์šฐ ์œ ์šฉํ•œ ์†”๋ฃจ์…˜์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

๋ฒ„์ „์„ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋™์•ˆ ์ด ์Šค๋ ˆ๋“œ๋ฅผ ๊ฑด๋„ˆ๋›ฐ์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์—ฌ๊ธฐ์— ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. pip search -v package๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„์ „ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์—ฌ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค...

๋‚˜๋Š” _๊ทธ๋ƒฅ_ ์ด ๊ธฐ๋Šฅ์ด ๋‚ด ๋™๋ฃŒ๊ฐ€ ๋‚˜์—๊ฒŒ ๋ฌผ์–ด๋ณธ ํ›„์— ์ด ๊ธฐ๋Šฅ์ด ์•„์ง ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ฒ„์ „์˜ pip ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด PR ์ด ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ๊ฐ€์š”?

๋˜ํ•œ Linuxconf 2014 ๊ฐ•์—ฐ "Python Packaging 2.0: Playing Well With Others" ์—์„œ ํŒŒ์ด์ฌ ํŒจํ‚ค์ง•์˜ ํ˜„์žฌ ์ƒํ™ฉ๊ณผ ๋ฏธ๋ž˜์— ๋Œ€ํ•ด ๊ด€์‹ฌ์„ ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐœํ‘œ์ž๋Š” (๋‚ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ–ˆ๋‹ค๋ฉด) pip์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ผ๋ถ€ ์ œํ•œ ์‚ฌํ•ญ์€ ์›๋ž˜ CPAN์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” PyPI ์„ค๊ณ„์˜ ๊ฒฐ๊ณผ์ด๋ฉฐ PyPI์˜ ๋ฐฑ์—”๋“œ๋ฅผ ์žฌ์ž‘์—…ํ•œ๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค(ํ…Œ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ˜„์žฌ ๋ฐฑ์—”๋“œ์™€ ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•จ) ์ƒํ™ฉ์„ ๊ฐœ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Š” ์ฃผ๋กœ "์‹œ์Šคํ…œ ํ†ตํ•ฉ์ž", ์ฆ‰ ๋‹ค์šด์ŠคํŠธ๋ฆผ ํŒจํ‚ค์ง•์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ, ๊ทธ๊ฒƒ์ด ์ด ๋ฌธ์ œ์™€ ๊ฐ™์€ ๋ฌธ์ œ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ ๋ฌธ์ œ๋ฅผ ๋” ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

+1,000,000

์ง€๊ธˆ์€ ์–ด๋•Œ?

์ด์ œ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  ์ตœ์‹  ๋ฒ„์ „์„ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?
์ด ๋ฌธ์ œ๋Š” 2011๋…„๋ถ€ํ„ฐ ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ๋ณธ ํŒจ์น˜๋Š” ํ•œ ์ค„์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. :(

์ด๊ฒƒ์€ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์†Œํ•œ ๊ธฐ๋Šฅ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ด ์‹œ์ ์—์„œ apt-cache madison ์— ํ•ด๋‹นํ•˜๋Š” ์˜ต์…˜์ด ์—†์„๊นŒ์š”?

๊ฒ€์ƒ‰ํ•  ๋•Œ๋„ ์ตœ์‹  ๋ฒ„์ „์˜ PyPi ํŒจํ‚ค์ง€๋ฅผ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€๋งŒ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ awk๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

wget -qO- https://pypi.python.org/pypi/uWSGI | egrep -o "uwsgi-[0-9].[0-9].[0-9][0-9].tar.gz" | ์ •๋ ฌ -u

wget -qO- https://pypi.python.org/pypi/uWSGI/json | grep '"version"'

@andreif ์ด๊ฒƒ์€ ํ•ญ์ƒ ์˜ฌ๋ฐ”๋ฅธ ๋ฒ„์ „์„ ์ฐพ์ง€ ์•Š์Šต๋‹ˆ๋‹ค(--pre๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š๋Š” ํ•œ pip๋Š” ์•ŒํŒŒ, ๋ฒ ํƒ€, ๋ฆด๋ฆฌ์Šค ํ›„๋ณด ๋“ฑ์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค). ์ด๊ฒƒ์€ ๋” ๊ฐ€๊น์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ ๋ณด์žฅ๋„ ์—†์Œ):
wget -qO- https://pypi.python.org/pypi/uWSGI/json | grep -E ' {8}"[0-9."]*": \[' | sort -V | tail -n 1 | tr -d ' ":['

์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด JSON ์‘๋‹ต์— "pre-version": "1.2.3a4" ์™€ ๊ฐ™์€ ํ•ญ๋ชฉ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ๊ฐ„๋‹จํ•œ ํ‘œํ˜„์‹์œผ๋กœ ๋‘˜ ๋‹ค grepํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ์ •๋ง ์ดํ•ด๊ฐ€ ์•ˆ ๊ฐ€์š”... ์ด๊ฒŒ ๋ฌด์Šจ ์ผ์ด์ฃ ?

  • pip install ์— ์ƒˆ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ํŒจํ‚ค์ง€๊ฐ€ ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€๋งŒ pip๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์„ ํƒํ•œ ํŒจํ‚ค์ง€๊ฐ€ ์ธ์‡„๋˜๊ณ  ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค(์„ค์น˜ ๊ฑด๋„ˆ๋›ฐ๊ธฐ)?
  • pip search ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํŒจํ‚ค์ง€ ์ด๋ฆ„ ์˜†์— ์ตœ์‹  ๋ฒ„์ „์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๊นŒ?

    • PyPI์—์„œ ์ตœ์‹  ๋ฒ„์ „์˜ ํŒจํ‚ค์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ›„์ž๋Š” ๋‚˜์—๊ฒŒ ํ•ด๊ฒฐ๋œ ๊ฒƒ ๊ฐ™๊ณ  ์ „์ž๋Š” ์•„๋งˆ๋„ ์ƒˆ๋กœ์šด ์ „์šฉ ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@pradyunsg ๊ธ€์Ž„์š”, ์ œ ๊ธฐ์–ต์ด ๋งž๋‹ค๋ฉด ํ˜„์žฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฒ„์ „(์ถœ์‹œ ๋ฐ ์‹œํ—˜ํŒ ๋ชจ๋‘)์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฒ„์ „์€ pip install -U [--pre] ์— ์˜ํ•ด ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.

virtualenv๋ฅผ ์„ค์ •ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ์— ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ตœ์‹  ๋ฒ„์ „์˜ ํŒจํ‚ค์ง€๊ฐ€ ์žˆ์„ ๋•Œ ํ˜„์žฌ ๋ฒ„์ „์„ ์—…๋ฐ์ดํŠธํ• ์ง€ ์•„๋‹ˆ๋ฉด ์œ ์ง€ํ• ์ง€ ๋ฌป์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์ƒˆ๋กœ์šด pip ๊ฒ€์ƒ‰์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

pkg="foo"; pip install --download /dev/null --no-cache-dir --no-binary :all: "$pkg" 2>&1 | egrep -i "$pkg"'-' | head -1 | egrep -io "$pkg"'-[^ ]+' | sed 's/^'"$pkg"'-\(.*\)\.tar\.gz$/\1/g'

--download ๊ฒŒ์‹œ - ์ง€์› ์ค‘๋‹จ ๋ฒ„์ „...

pkg="foo"; tmp="$(mktemp -d)"; pip download -d "$tmp" --no-cache-dir --no-binary :all: "$pkg" 2>&1 | egrep -i "$pkg"'-' | head -1 | egrep -io "$pkg"'-[^ ]+' | tr A-Z a-z | sed 's/^'"$pkg"'-\(.*\)\.tar\.gz$/\1/g'

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

pip install foo==

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฒ„์ „ ๋ชฉ๋ก์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(์œ ํšจํ•œ pypi ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํŒจํ‚ค์ง€์˜ ๊ฒฝ์šฐ ์ด ๊ฒฝ์šฐ ๋ถ„์ž).

Could not find a version that satisfies the requirement molecule== (from versions: 1.20.1, 1.20.3, 1.21.1, 1.22.0, 1.23.0, 1.25.0, 1.25.1, 2.10.0, 2.10.1, 2.11.0, 2.12.0, 2.12.1, 2.13.0, 2.13.1, 2.14.0, 2.15.0, 2.16.0, 2.17.0, 2.18.0, 2.18.1, 2.19.0) No matching distribution found for molecule==

๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ ๋‹ค์šด๋กœ๋“œ ๋ฐ/๋˜๋Š” dev/null์— ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ํ•  ๋ฒ„์ „์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค :-)

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

pip-tools๋Š” pip๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋„๊ตฌ๋กœ ์ด ์Šค๋ ˆ๋“œ์˜ ์‚ฌ๋žŒ๋“ค์ด ์งˆ๋ฌธํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/jazzband/pip-tools

์ถ”์ƒ ์ข…์†์„ฑ ๋ชฉ๋ก์„ ์ œ๊ณตํ•˜๋ฉด(์ฆ‰, ๋ฒ„์ „์ด ์ง€์ •๋˜์ง€ ์•Š์Œ) ์„ค์น˜ํ•  ๊ฐ ์š”๊ตฌ ์‚ฌํ•ญ ๋ฐ ์ข…์†์„ฑ์˜ ํŠน์ • ๋ฒ„์ „์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

pkg="django"; echo "$pkg" | pip-compile - --output-file - | egrep -i '^'"$pkg"'=' | cut -d '=' -f 3- ๋Š” ๊ฑฐ์˜ ์–ด๋ฆฌ์„์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค(์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๊ณ„์‚ฐํ•˜๋ฉด ๋” ์–ด๋ฆฌ์„์Œ[python2 ์ง€์›์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋” ์–ด๋ฆฌ์„์Œ])

๊ฒŒ๋‹ค๊ฐ€ pip-tools(& pipenv)์˜ ์š”์ ์€ ์ผ๋ฐ˜ pip์™€ ์ œ์•ฝ ํŒŒ์ผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ( pip install -r reqs -c constraints; pip freeze > constraints ).

pip install ์— ์ƒˆ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ํŒจํ‚ค์ง€๊ฐ€ ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€๋งŒ pip๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์„ ํƒํ•œ ํŒจํ‚ค์ง€๊ฐ€ ์ธ์‡„๋˜๊ณ  ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค(์„ค์น˜ ๊ฑด๋„ˆ๋›ฐ๊ธฐ)?

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


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

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

์ด ํ‹ฐ์ผ“์€ ์ข…์†์„ฑ ํ•ด๊ฒฐ ํ”„๋กœ๊ทธ๋žจ(#988)์˜ ๊ฐœ๋ฐœ๋กœ ์ธํ•ด ์ฐจ๋‹จ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํŒ€์ด ํ•ด๋‹น ์ฃผ์ œ์— ๋Œ€ํ•ด ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๊ธฐ ์œ„ํ•ด ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๋„์›€์„ ์ฐพ๊ณ  ์žˆ๋‹ค๊ณ  ์—ฌ๊ธฐ์—์„œ ์–ธ๊ธ‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

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

  1. ์ƒˆ๋กœ์šด ๋ฆฌ์กธ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์‹ญ์‹œ์˜ค(๋ฒ„์ „ 20.1 ์‚ฌ์šฉ, --unstable-feature=resolver ์‹คํ–‰)
  2. ๊นจ์„ธ์š” :P
  3. ๋ฌธ์ œ ์ œ๊ธฐ

์—ฌ๊ธฐ์—์„œ ๋” ๋งŽ์€ ์ •๋ณด์™€ ์ž์„ธํ•œ ์ง€์นจ ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ์—์„œ ์•„์ง ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์€ #7819์˜ ์‹คํ—˜์—์„œ ๋ฐœ์ƒํ–ˆ์Œ์„ ๊ฐ•์กฐํ•˜๊ณ  ์‹ถ์€ ํ•œ ๊ฐ€์ง€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์œ„์—์„œ ๋…ผ์˜ํ•œ ์ž ๊ธˆ ํŒŒ์ผ๊ณผ ์•ฝ๊ฐ„ ์ง๊ตํ•˜๋Š” ๊ธฐ๋Šฅ์ธ ๋‚˜์ค‘์— ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•œ URL์„ ๊ธฐ๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํฐ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•  ํ•„์š” ์—†์ด pip resolve์˜ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” Twitter์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ธฐ๊ณ„ ํ•™์Šต ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ฒ˜์Œ ์‹คํ–‰๋  ๋•Œ๊นŒ์ง€ ํƒ€์‚ฌ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๊ณ  ๋ฐฐ์†ก๋  ์ˆ˜ ์žˆ๋Š” "ipex"๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ธฐ๊ณ„ ํ•™์Šต ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ํŒจํ‚ค์ง• ๋ฐฉ๋ฒ•์„ ๊ฐœ๋ฐœํ•ด ์™”์Šต๋‹ˆ๋‹ค(ํฌ๊ธฐ๋ฅผ ํฌ๊ฒŒ ์ค„์ž„). pantbuild/pants#8793์˜ ๊ฒฝ์šฐ ์š”๊ตฌ ์‚ฌํ•ญ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด pex ๋Ÿฐํƒ€์ž„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ pex ์•„์นด์ด๋ธŒ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค(pex๋Š” ๋ฎ๊ฐœ ์•„๋ž˜์—์„œ pip๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค). ์ €๋Š” ํ˜„์žฌ ๋Ÿฐํƒ€์ž„ ์‹œ ์ „์ฒด pex/pip ํ™•์ธ ๋‹จ๊ณ„๋ฅผ dist๋ฅผ ๋‹ค์šด๋กœ๋“œํ•  URL๋งŒ ๊ธฐ๋กํ•˜๋Š” ๊ต์ฒด๋กœ ๋Œ€์ฒดํ•˜๋Š” ํ”„๋กœํ† ํƒ€์ž…์„ ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค( req.link ). ์ด๊ฒƒ์€ "์ˆ˜ํ™”๋œ" pex ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์šด๋กœ๋“œ ๋ฐ ํŒŒ์ผ ๋ณต์‚ฌ๊ฐ€ ์™„์ „ํžˆ ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค(๋งค์šฐ ์„ธ๋ถ€์ ์œผ๋กœ ์บ์‹œ๋  ์ˆ˜ ์žˆ์Œ).

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

v1 ๋ฆฌ์กธ๋ฒ„์˜ ๋‚ด์žฅ์—์„œ ์ถœ๋ ฅ์œผ๋กœ URL์„ ์ „ํŒŒํ•˜๋ ค๋ฉด #7819์—์„œ ๋งŽ์€ ๋…ธ๋ ฅ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. v2 ๋ฆฌ์กธ๋ฒ„์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ๋งˆ์ง€๋ง‰์œผ๋กœ ์‹œ๋„ํ–ˆ์„ ๋•Œ ํ›จ์”ฌ ์ ์€ ๋…ธ๋ ฅ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ ๋‹น์žฅ์€ ๋‹ค์šด๋กœ๋“œ URL์„ ๋‚ด๋ณด๋‚ด๋Š” --dry-run ๋˜๋Š” resolve ๋ช…๋ น์˜ ์ผ๋ถ€ ์‹คํ—˜ ๋ฒ„์ „์„ ๋‚ด๋ถ€์ ์œผ๋กœ ์ถœ์‹œํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ชจ๋“  ๊ทธ ๋™์•ˆ --unstable-feature=resolver ์— ๋Œ€ํ•œ ๋‚˜๋จธ์ง€ ๋ฌธ์ œ! :D :D

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

๋งํฌ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!!

2020๋…„ 5์›” 24์ผ ์ผ์š”์ผ 19:34 Tzu-ping Chung ์•Œ๋ฆผ @github.com
์ผ๋‹ค:

์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ž ๊ธˆ ํŒŒ์ผ ํ˜•์‹ ๋””์ž์ธ์€
๋ฆฌ์กธ๋ฒ„ ๊ตฌํ˜„. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋˜ํ•œ ๊ทธ๊ฒƒ์ด ์ ์šฉ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
ํ˜„์žฌ ํ• ํ”„๋กœ์ ํŠธ. ์ฃผ์ œ์— ๋Œ€ํ•œ ํ† ๋ก ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค
https://discuss.python.org/t/structured-exchangeable-lock-file-format-requirements-txt-2-0/876/1
(๊ฒฝ๊ณ : ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋งค์šฐ ๊ธธ๋‹ค), ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•˜๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•˜๋ฉด
์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์ง„์ง€ํ•œ ํ† ๋ก ์ด ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด
๋ฆฌ์กธ๋ฒ„๊ฐ€ ์ ์–ด๋„ ์•ˆ์ •ํ™”๋˜๊ธฐ ์ „์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/pypa/pip/issues/53#issuecomment-633346918 ๋˜๋Š”
๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/AAJ6UT3IK65CUQGUIOGBNVDRTHKMVANCNFSM4AIQRXLA
.

@cosmicexplorer --dry-run ๋˜๋Š” resolve ๋ช…๋ น์˜ ์‹คํ—˜ ๋ฒ„์ „์„ ์•„์ง ๋‚ด๋ถ€์ ์œผ๋กœ ์ถœํ•˜ํ–ˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์ œ๊ฐ€ ์ด ๊ธฐ๋Šฅ์— ๋งค์šฐ ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ˆˆ์น˜์ฑ„์…จ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค ๐Ÿ˜„

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

pip install foo==

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฒ„์ „ ๋ชฉ๋ก์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค(์œ ํšจํ•œ pypi ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํŒจํ‚ค์ง€์˜ ๊ฒฝ์šฐ ์ด ๊ฒฝ์šฐ ๋ถ„์ž).

Could not find a version that satisfies the requirement molecule== (from versions: 1.20.1, 1.20.3, 1.21.1, 1.22.0, 1.23.0, 1.25.0, 1.25.1, 2.10.0, 2.10.1, 2.11.0, 2.12.0, 2.12.1, 2.13.0, 2.13.1, 2.14.0, 2.15.0, 2.16.0, 2.17.0, 2.18.0, 2.18.1, 2.19.0) No matching distribution found for molecule==

๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ ๋‹ค์šด๋กœ๋“œ ๋ฐ/๋˜๋Š” dev/null์— ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  pip๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ํ•  ๋ฒ„์ „์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค :-)

์ข‹์€ ํŠธ๋ฆญ !! ์œ ์šฉํ•˜๊ณ  ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค!! ์ •๋ง ์ธ์ƒ์ ์ž…๋‹ˆ๋‹ค!!

์ž ์žฌ์ ์ธ ํ•ดํ‚น/์Šคํฌ๋ฆฝํŒ… ๋ฉ์–ด๋ฆฌ ... ์—ฌ๊ธฐ์— ํ›„์ž๋ฅผ ๋” ๊ฒŒ์‹œํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋„๊ตฌ ์ž์ฒด์—์„œ ์ˆ˜์ • ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋…ผ์˜ํ•˜๋Š” ํฌ๋Ÿผ์ด ์•„๋‹ˆ๋ผ ์ด๋Ÿฌํ•œ ์ œ์•ˆ์ด ๋” ์ ์ ˆํ•œ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ์ง€์› ํฌ๋Ÿผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. :)

์•„๋ฌด ๊ฒƒ๋„ ์•„๋‹Œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์ด๊ฒƒ์€ ๋ฒ„๊ทธ๊ฐ€ ๋งค์šฐ ์˜ค๋žซ๋™์•ˆ ๋‚จ์•„์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ข…๋ฅ˜์˜ ์ผ์ž…๋‹ˆ๋‹ค(๊ฐ€์žฅ ์ตœ๊ทผ์— ๊ธฐ์—ฌํ•œ "nugget"์˜ ๊ฒฝ์šฐ 7.56๋…„, ์ด ์•„์ง ์—ด๋ ค ์žˆ๋Š” ๋ฒ„๊ทธ๋Š” ํ˜„์žฌ 9.25๋…„์ž…๋‹ˆ๋‹ค. ๋‚ก์€). ์‚ฌ๋žŒ๋“ค์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

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

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

๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. pip๊ฐ€ ๋‚ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์‹œ ์ค‘๋‹จํ•˜๊ณ  ์ด ๋ฒ„๊ทธ๊ฐ€ ์—ฌ์ „ํžˆ ์—ด๋ ค ์žˆ์ง€ ์•Š๋Š” ํ•œ ๋” ์ด์ƒ ๋„๋ฐœ๋˜์ง€ ์•Š์€ ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

@brainwane @ei8fdb ์ด ๋ฌธ์ œ๋ฅผ UX ๊ด€์ ์—์„œ ์ค‘์š”ํ•œ ๊ฒƒ์œผ๋กœ ํ”Œ๋ž˜๊ทธ ์ง€์ •ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค - #8377 ๊ด€๋ จ

๋‚ด ์ดํ•ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋†’์€ ์ˆ˜์ค€ ์š”์•ฝ:

  • ์ƒˆ๋กœ์šด ๋ฆฌ์กธ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด pip๊ฐ€ ๋œ ๊ด€๋Œ€ํ•ด์ง€๊ณ  ์ถฉ๋Œํ•˜๋Š” ์ข…์†์„ฑ ์„ค์น˜๋ฅผ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค( ResolutionImpossible ).
  • ์ข…์†์„ฑ ์ถฉ๋Œ์€ ์ข…์†์„ฑ ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ์œ„์น˜์— ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ์กด ๋„๊ตฌ(pipdeptree pip-conflict-checker)๋Š” ์š”์ฒญ๋˜์—ˆ์ง€๋งŒ ์‹คํŒจํ•œ ํŒจํ‚ค์ง€๊ฐ€ ์•„๋‹Œ ์ด๋ฏธ ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋งŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ํ˜„์žฌ ์‚ฌ์šฉ์ž๋Š” ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜๊ธฐ _์ „_ ์–ด๋””์—์„œ ์ข…์†์„ฑ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ๋˜๋Š” ResolutionImpossible ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค(๊ฐ ํ”„๋กœ์ ํŠธ์˜ ์ข…์†์„ฑ์„ ์ˆ˜๋™์œผ๋กœ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ ์™ธ์—๋Š”).

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ตœ์ƒ์œ„ ์š”๊ตฌ ์‚ฌํ•ญ(์˜ˆ: requirements.txt ์— ์ง€์ •๋˜๊ฑฐ๋‚˜ ๋ช…๋ น์ค„์— ์ง์ ‘ ์ž…๋ ฅ๋˜๋Š” ํŒจํ‚ค์ง€)์— ๋”ฐ๋ผ ๊ฐ€๋Šฅํ•œ ์ข…์†์„ฑ ์ถฉ๋Œ์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๋ฉด ์ œ์•ˆ๋œ ํ”Œ๋ž˜๊ทธ ์ด๋ฆ„( --dry-run )์„ ์กฐ์‚ฌ/ํ† ๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@uranusjr @pfmoore - ๋‚ด๊ฐ€ ์ž˜๋ชป ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์žˆ๊ฑฐ๋‚˜ ํ† ๋ก ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋†“์นœ ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ์ˆ˜์ •ํ•ด ์ฃผ์„ธ์š”. ๊ณ ๋งˆ์›Œ

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

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

์ด๊ฒƒ์€ pip resolve ๋ช…๋ น์˜ ํ˜•ํƒœ๋ฅผ ์ทจํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

pip resolve ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜„ ๊ฒฐ๊ตญ ์ž์ฒด ํ”Œ๋ž˜๊ทธ๋„ ํ—ˆ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@pfmoore์— ๋Œ€ํ•œ ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๊ด€์ ์—์„œ resolve --dry-run ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

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

๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๊ฐ€ --dry-run ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๊ณ  ์ƒ์ƒํ•ด๋ณด์‹ญ์‹œ์˜ค. ์‘๋‹ต์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ข…์†์„ฑ ์ถฉ๋Œ์ด ๊ฐ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. pip๋Š” d 1.0 ๋ฐ c 1.0์„ ์„ค์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ถฉ๋Œ์€ ๋‹ค์Œ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
d 1.0์€ E==2.0์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
c 1.0์€ E==1.0์— ์˜์กด
pip resolve ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ข…์†์„ฑ ํŠธ๋ฆฌ๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ResolutionImpossible ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์—์„œ pip resolve ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(#8377 ์ฐธ์กฐ). ์ด๋Š” ํฐ ์Šน๋ฆฌ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@pradyunsg pip resolve ํ‹ฐ์ผ“์ด ๋”ฐ๋กœ ์žˆ๋‚˜์š”?

๋˜ํ•œ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด pip resolve ์˜ ์˜๋„๋œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(์„ฑ๊ณต์„ ๊ฐ€์ •).

  1. ์ถœ๋ ฅ์„ ํŒŒ์ผ(์ผ๋ฐ˜์ ์œผ๋กœ ์ปค๋ฐ‹๋จ)๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๊ฑฐ๋‚˜
  2. ๋‹ค๋ฅธ ๋„๊ตฌ๋Š” ์ถœ๋ ฅ์„ ์‚ฌ์šฉ/๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.

ํŠธ์œ„ํ„ฐ์˜ ๊ฒฝ์šฐ #7819์— ์„ค๋ช…๋œ "ipex" ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ pip resolve ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ pex ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์€ ์•„๋ฌด ๊ฒƒ๋„ ๋‹ค์šด๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  ํ™•์ธ๋œ ๋ชจ๋“  ๋ฐฐํฌ์— ๋Œ€ํ•œ ๋‹ค์šด๋กœ๋“œ URL์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค(์•„์ง ํ”„๋กœ๋•์…˜์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ ). ์ด๊ฒƒ์€ #8448๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์ตœ์ ํ™”์™€ ํ•จ๊ป˜ ๋ช‡ ์ดˆ ์•ˆ์— ์ด๋Ÿฌํ•œ ipex ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด๋Ÿฌํ•œ ipex ํŒŒ์ผ์€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ๋‚ด์—์„œ ์ฒ˜์Œ ์‹คํ–‰๋  ๋•Œ pip resolve ๋ช…๋ น์˜ ๋ชจ๋“  ๋ฐฐํฌ ์ถœ๋ ฅ์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ipex ํŒŒ์ผ ์ž์ฒด๊ฐ€ ๊ธฐ๊ฐ€๋ฐ”์ดํŠธ๊ฐ€ ์•„๋‹Œ ๋ฉ”๊ฐ€๋ฐ”์ดํŠธ๊ฐ€ ๋˜์–ด ์—…๋กœ๋“œ ์‹œ๊ฐ„์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์ง€์—ญ์—์„œ.

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ pip resolve ์ถœ๋ ฅ์˜ json ๋ฒ„์ „์„ pex ์•„์นด์ด๋ธŒ์— ํŒŒ์ผ๋กœ ํฌํ•จํ•˜๊ณ  ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฝ์–ด์„œ ๋ฐฐํฌํŒ์„ ๋ณ‘๋ ฌ๋กœ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ˆ„๊ตฐ๊ฐ€๋Š” ๋จผ์ € ํ•ด๊ฒฐ ๊ฒฐ๊ณผ๋ฅผ ์ œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ผ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์กธ๋ฒ„ ์ž‘์—…์— ๊ด€๋ จ๋œ AFAIK pip ์œ ์ง€ ๊ด€๋ฆฌ์ž๋Š” ํ˜„์žฌ ํ˜„์žฌ ๋ฆฌ์กธ๋ฒ„ ์ž์ฒด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๋ ค๋ฉด ์™ธ๋ถ€์˜ ๋„์›€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ‹€๋ ธ๋‹ค๋ฉด ์ •์ •ํ•ด ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ์€ ์‚ฌ์‹ค์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Python ํŒจํ‚ค์ง€ ์„ค์น˜์—๋Š” setup.py ์‹คํ–‰์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • --dry-run ์˜ต์…˜์ด ์—†์œผ๋ฉด pip์˜ ๋ฆฌ์กธ๋ฒ„๊ฐ€ ์„ค์น˜ํ•  ํŒจํ‚ค์ง€๋ฅผ ์‰ฝ๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

์„ค์น˜ํ•  ํ”„๋กœ์ ํŠธ์™€ ๋ฒ„์ „์ด ์†Œ์Šค ๋ฐฐํฌํŒ(sdist, setup.py ํฌํ•จ) ๋˜๋Š” ํœ (๋นŒ๋“œ ๋ฐฐํฌํŒ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ…์ŠคํŠธ ํŒŒ์ผ ํฌํ•จ, ์ž„์˜์˜ ์ฝ”๋“œ ์‹คํ–‰ ์—†์ด ํŒŒ์ผ ๋ณต์‚ฌ๋ณธ์œผ๋กœ ์„ค์น˜๋จ)๋งŒ ํฌํ•จํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

--dry-run์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ pip๋Š” ๋ฐ”ํ€ด๊ฐ€ ์—†๋Š” ํŒจํ‚ค์ง€(setuptools์˜ ๊ฒฝ์šฐ setup.py ์‹คํ–‰ ํฌํ•จ)์— ๋Œ€ํ•œ ๋นŒ๋“œ ๋ฐฑ์—”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

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