Pipenv: ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋ณธ PyPI ์ธ๋ฑ์Šค URL์„ PyPI ๋ฏธ๋Ÿฌ URL๋กœ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉ(Pipfile ์ˆ˜์ • ์—†์ด)

์— ๋งŒ๋“  2018๋…„ 04์›” 27์ผ  ยท  46์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pypa/pipenv

์—ฌ๋Ÿฌ๋ถ„ ์•ˆ๋…•ํ•˜์„ธ์š”,

๊ทธ ์ƒํ™ฉ

ํ˜„์žฌ ๋ฏธ๋Ÿฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” URL์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ PyPI ์ธ๋ฑ์Šค URL์„ ์žฌ์ •์˜ํ•˜๋Š” ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค. ๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ €์žฅ์†Œ ๋ฏธ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

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

๋ถˆํ–‰ํžˆ๋„ ์ด๊ฒƒ์€ pipenv์—์„œ ์‰ฝ๊ฒŒ ์ˆ˜์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฏธ๋Ÿฌ๋ฅผ ์ด๋Ÿฌํ•œ ํŒจํ‚ค์ง€์˜ ์†Œ์Šค๋กœ Pipfile์— ๋ช…์‹œ์ ์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด์‹์„ฑ์ด ์†์ƒ๋ฉ๋‹ˆ๋‹ค.

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

(true) ๋ฏธ๋Ÿฌ๋ฅผ ์ง€์ •ํ•˜์—ฌ PyPI ์ธ๋ฑ์Šค์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹์žฌ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” PyPI์—๋งŒ ์ ์šฉ๋˜๋ฉฐ ๋‹ค๋ฅธ ํƒ€์‚ฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ด๋Š” ์—ฌ์ „ํžˆ Pipfile์— ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •๋จ).

์ผ๋ฐ˜ ์ œ์•ˆ

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

๊ตฌํ˜„ ๊ณ ๋ ค ์‚ฌํ•ญ

  1. Pip๋Š” ์ด๋ฏธ ์‚ฌ์šฉ์ž๊ฐ€ pip์˜ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ํ†ตํ•ด ๊ธฐ๋ณธ ์ธ๋ฑ์Šค URL์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‚ด๋ถ€ ๋ฏธ๋Ÿฌ URL์˜ ๊ฐ€์žฅ ํ™•์‹คํ•œ ์†Œ์Šค์ผ ์ˆ˜ ์žˆ์ง€๋งŒ(๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด ์„ค์ •๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ) ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์‹ค์ œ ๋ฏธ๋Ÿฌ๊ฐ€ ์•„๋‹Œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋งˆ๋„ ์ด ๋ชฉ์ ์— ์ ํ•ฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  2. PyPI์—์„œ ๋ชจ๋“  ์ข…์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“ˆ์˜ ๊ฒฝ์šฐ Pipfile์—์„œ ๋ช…์‹œ์  ์†Œ์Šค๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ pip์˜ ๊ธฐ๋ณธ๊ฐ’์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ์ด๊ฒƒ์€ PyPI ์™ธ๋ถ€์˜ ๋ชจ๋“ˆ์ด ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Pipfile ์ƒ์„ฑ ํ”„๋กœ์„ธ์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ช…์‹œ์ ์ด๋ฏ€๋กœ ๋งŽ์€ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์—์„œ ๊ธฐ๋ณธ ์ธ๋ฑ์Šค URL์„ ์ œ๊ฑฐํ•˜์—ฌ ์ด ํŒจํ„ด์„ ์ˆ˜์šฉํ•˜๋„๋ก ํ•ด๋‹น Pipfile์„ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  3. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ Pipfile์˜ ์†Œ์Šค๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ๋ฏธ๋Ÿฌ๋ฅผ ์ œ๊ณตํ•˜๋„๋ก ๋ณ€์ˆ˜๋ฅผ ์„ ํƒ์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ๊ธฐ์กด ํ”„๋กœ์ ํŠธ๊ฐ€ ์ด ํŒจํ„ด์„ ์ˆ˜์šฉํ•˜๊ธฐ ์œ„ํ•ด Pipfile์„ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋ฉฐ ์ด๋Š” ์ด์ƒ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  4. ํ™˜๊ฒฝ ๋ณ€์ˆ˜, ๋ช…๋ น์ค„ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋˜๋Š” ๊ตฌ์„ฑ ์„ค์ •์„ ์‚ฌ์šฉํ•˜์—ฌ PyPI ์ธ๋ฑ์Šค URL์„ (true) ๋ฏธ๋Ÿฌ๋กœ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒฝ์šฐ ์žฌ์ •์˜๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? ๋ฏธ๋Ÿฌ์˜ ์ธ๋ฑ์Šค๊ฐ€ PyPI ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” pip์— ๋Œ€ํ•œ ๋ชจ๋“  ํ˜ธ์ถœ์— ์ง€์ •๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๊นŒ? ๊ธฐ์กด Pipfiles๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์žฌ์ •์˜ ๊ฐ€๋Šฅํ•œ PyPI ๊ธฐ๋ณธ๊ฐ’์„ ํฌํ•จํ•˜์—ฌ ์†Œ์Šค ์ง€์ • ๋ฐฉ๋ฒ•์„ ์žฌ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋‹ค๋ฅธ ๊ฒƒ?

๊ด€๋ จ ํ† ๋ก 

1451

1783

์ด๊ฒƒ์€ Freenode์˜ #python ๋ฐ #pypa์—์„œ ๋…ผ์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ๊ฑด์„ค์ ์ธ ๋…ผ์˜ ๋์— ์—ฌ๊ธฐ์—์„œ ํ† ๋ก ์„ ์œ„ํ•ด ๋ฌธ์ œ๋ฅผ ์—ฌ๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ๋…ธ๋ ฅ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

Dependency Resolution Future API Change Behavior Change Discussion

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

๋‹ค๋ฅธ URL์ด ์•„๋‹Œ PyPI๋งŒ ์žฌ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ PyPI URL์ด ์‚ฌ์šฉ ์ค‘์ผ ๊ฒƒ์ด๋ฏ€๋กœ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•˜๋‚˜๋ฅผ ๋†“์น˜๋ฉด ๋ˆ„๊ตฐ๊ฐ€ ๋ฒ„๊ทธ๋ฅผ ์‹ ๊ณ ํ•˜๊ณ  ์ถ”๊ฐ€๋  ๊ฒƒ์ด๋ฉฐ ๊ณง ๋ชจ๋“  URL์„ ๊ฐ–๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

/cc @uranusjr @ncoghlan @altendky @njsmith

๋‚˜๋Š” ์ด๊ฒƒ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์ผ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค(๊ธฐ์—… FW/์บ์‹ฑ ํ”„๋ก์‹œ) -- PIPENV_PYPI_MIRROR ์™€ ๊ฐ™์ด pipfile์—์„œ ์ฐพ์„ ๊ฒฝ์šฐ pypi ๋Œ€์‹  ์‚ฌ์šฉํ•  ๋ฏธ๋Ÿฌ๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ์žฌ์ •์˜ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. PIPENV_PYPI_CACHING_PROXY ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ๋จผ์ € ์‹œ๋„ํ•ด์•ผ ํ•จ์„ ์ง€์ •ํ•˜๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ pypi ์•ž์—์„œ sources ๋กœ ์Šฌ๋ผ์ด์Šคํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ๊ตฌํ˜„ ์ง€๋‹ˆ์— ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ด๊ฒƒ์ด ์ข‹์€์ง€ ๋‚˜์œ์ง€ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(@ncoghlan).

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

๋ถˆํ–‰ํžˆ๋„ ๊ทธ ํŠน์ • ๊ณต๊ฒฉ ๋ฒกํ„ฐ๋Š” ์ด๋ฏธ pip.conf ๋ฅผ ํ†ตํ•ด ์—ด๋ ค ์žˆ์œผ๋ฏ€๋กœ pipenv ์ˆ˜์ค€์—์„œ ๋น„์Šทํ•œ ๊ฒƒ์„ ์ œ๊ณตํ•œ๋‹ค๊ณ  ํ•ด์„œ ์ง€๊ธˆ๋ณด๋‹ค ๋” ๋‚˜๋น ์ง€์ง€๋Š” ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ ์™ธ์—๋„ ๋ฒ”์šฉ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ URL ์žฌ์ž‘์„ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์ ์–ด๋„ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ๊ณ„์ธต์—์„œ PyPI์— ํŠน์ •ํ•œ ๊ฒƒ๋ณด๋‹ค ์‹ค์ œ๋กœ ๋ฌธ์„œํ™”ํ•˜๊ณ  ์„ค๋ช…ํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฌ์šธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ:

pipenv --override-source-url 'default=https://pypi-proxy.example.com/api' --override-source-url 'https://pypi.python.org/simple=https://pypi-proxy.example.com/api'  --override-source-url 'https://pypi.org/simple=https://pypi-proxy.example.com/api' install

(์œ ์ผํ•œ PyPI ํŠน์ • ๋น„ํŠธ๋Š” pip.conf ์— ๋ช…์‹œ๋œ ๋Œ€๋กœ pip์˜ ๊ธฐ๋ณธ ๋‹ค์šด๋กœ๋“œ ์†Œ์Šค๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด "default"๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค).

๋งค๋ฒˆ ์ „์ฒด ์†Œ์Šค URL ์žฌ์ •์˜ ๋งต์„ ์ฒ ์žํ•˜๋Š” ๊ฒƒ์€ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ์—๋Š” ๋‹ค๋ฃจ๊ธฐ ํž˜๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ CLI ์„คํƒ•์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

pipenv --override-source-urls <config file> install

pipenv --pypi-mirror https://pypi-proxy.example.com/api install

--override-source-url ๋ ˆ์ด์–ด๋ฅผ ์ฆ‰์‹œ ๋…ธ์ถœํ• ์ง€ ์—ฌ๋ถ€๋Š” ๋‹ค๋ฅธ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋จผ์ € ๋” ๊ฐ„๋‹จํ•œ --pypi-mirror ์˜ต์…˜์„ ๊ตฌํ˜„ํ•˜๊ณ  --override-source-url ๋ฐ --override-source-urls ๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๋™์•ˆ ์—ผ๋‘์— ๋‘๊ณ  ๊ฐ€๋Šฅํ•œ ๋ฏธ๋ž˜ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ {given URL: override URL} ๋งคํ•‘๋„ ๋‚ด ์ฒซ ๋ฒˆ์งธ ์ƒ๊ฐ์ด์—ˆ์ง€๋งŒ ์ถ”๊ฐ€ ๊ณ ๋ ค ์‚ฌํ•ญ์— ๋”ฐ๋ผ ํŠน์ˆ˜ ์ผ€์ด์Šค PyPI์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ฃผ์žฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • PyPI๋Š” ์ž˜ ์•Œ๋ ค์ง„ ๊ณต๊ฐœ URL ๊ณผ ๋งŽ์€ ๋ฏธ๋Ÿฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ์ ์—์„œ ๋งค์šฐ ๋…ํŠนํ•ฉ๋‹ˆ๋‹ค.

  • https://pypi.python.org/simple/ ์—๋Š” https://pypi.org/simple/ ์—ฌ๋Ÿฌ https://pypi.org/simple URL์ด ์žˆ์Šต๋‹ˆ๋‹ค https://pypi.python.org/simple https://pypi.org/simple/ ํ›„ํ–‰ ์Šฌ๋ž˜์‹œ?), ๊ฐ ์‚ฌ์šฉ์ž๊ฐ€ ์Šค์Šค๋กœ ์•Œ์•„๋‚ด๋„๋ก ํ•˜๋Š” ๋Œ€์‹  ์ด ๋ฌธ์ œ๋ฅผ ํ•œ ๋ฒˆ๋งŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@njsmith ๋‚ด ๊ฒŒ์‹œ๋ฌผ์˜ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์—์„œ --pypi-mirror <URL> ์„คํƒ• ์ œ์•ˆ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์ดˆ๊ธฐ ๊ตฌํ˜„์ด ๊ทธ๊ฒƒ์—๋งŒ ์ดˆ์ ์„ ๋งž์ถ˜ ๊ฒฝ์šฐ ์ผ๋ฐ˜ URL ์žฌ์ž‘์„ฑ ๊ธฐ๋Šฅ์€ ๋‚ด๋ถ€ ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ์œผ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(" PyPI"์—๋Š” ๊ถ๊ทน์ ์œผ๋กœ ๋ชจ๋‘ ๋™์ผํ•œ ์œ„์น˜๋กœ ํ™•์ธ๋˜๋Š” ์—ฌ๋Ÿฌ URL์ด ์žˆ์œผ๋ฉฐ ๋‚˜์ค‘์— ๊ทธ ์ž์ฒด๋กœ ๊ธฐ๋Šฅ์œผ๋กœ ๋…ธ์ถœ๋˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ --pypi-mirror ์‚ฌ์šฉ์— ๋Œ€ํ•ด ์›ํ•˜๋Š” ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ™•์ธ๋œ ํ›„). ์‚ฌ๋ก€).

์•„ ๋งž๋‹ค, ๋†“์ณค์–ด :-)

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

@ncoghlan ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

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

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

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

pip.conf ์—์„œ ๊ธฐ๋ณธ ์ƒ‰์ธ URL์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ ์ƒ‰์ธ URL์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๊ตฌ์„ฑ ํŒŒ์ผ ๋˜๋Š” ์…ธ ํ”„๋กœํ•„ ๊ธฐ๋ฐ˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ์—ฌ๊ธฐ์— ์ œ์•ˆ๋œ ์žฌ์ •์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋‚ด ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ(์˜ˆ: sdist์˜ setup.py ํŒŒ์ผ)์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ์•ก์„ธ์Šค ๊ถŒํ•œ์œผ๋กœ ํŠน์ • ์‹œ์ ์— ์‹คํ–‰๋˜์–ด ์ด ํŒจํ‚ค์ง€ ์†Œ์Šค๋ฅผ ์‹ ๋ขฐํ•˜๋„๋ก ์„ค์ •์„ ๊ตฌ์„ฑํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค." ๊ทธ๋ฆฌ๊ณ  PEP 458๊ณผ ๊ฐ™์€ ์„œ๋ช… ์ฒด๊ณ„๋„ ํ™•์ธ์— ์‚ฌ์šฉ๋˜๋Š” ๊ณต๊ฐœ ํ‚ค ์ž์ฒด๊ฐ€ ์ˆ˜์ •์„ ์œ„ํ•ด ๋†’์€ ๊ถŒํ•œ์ด ํ•„์š”ํ•œ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์•„๋‹Œ ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด๋ถ€ ์–ด๋”˜๊ฐ€์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ์†์ž„์ˆ˜์— ๋Œ€ํ•œ ์™„์ „ํ•œ ๋ฐฉ์–ด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

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

๋˜ํ•œ ์—ฌ๋Ÿฌ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ํŒจํ‚ค์ง€๊ฐ€ ๊ธฐ๋ณธ์ด ์•„๋‹Œ ์ธ๋ฑ์Šค์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒฝ์šฐ ์ž ๊ธˆ ํŒŒ์ผ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

pep 458 ๋ฌธ์ œ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๋‚ด๊ฐ€ ์—ผ๋‘์— ๋‘์—ˆ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. URL์€ ๋‹ค๋ฅด์ง€๋งŒ ์‹ค์ œ๋กœ pypi์˜ ์ง€์ ์€ ๋กœ์ปฌ์—์„œ pypi๋ฅผ ๋ณต์‚ฌํ•˜๊ณ  ๋™์ผํ•˜๋‹ค๊ณ  ์ฃผ์žฅํ•˜๋Š” ๊ฒฝ์šฐ์™€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋‚˜ ๋˜๋Š” ๋‚ด ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ(์˜ˆ: sdist์˜ setup.py ํŒŒ์ผ)์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ์•ก์„ธ์Šค ๊ถŒํ•œ์œผ๋กœ ํŠน์ • ์‹œ์ ์— ์‹คํ–‰ํ•œ ์ž„์˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ด ํŒจํ‚ค์ง€ ์†Œ์Šค๋ฅผ ์‹ ๋ขฐํ•˜๋„๋ก ์„ค์ •์„ ๊ตฌ์„ฑํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์œ„ํ˜‘ ๋ชจ๋ธ์ธ ๊ฒฝ์šฐ pipenv๊ฐ€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ด ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์„ฑ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์€ $PATH ์— ์ƒˆ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ  ์›ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ€์งœ pipenv๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

@ncoghlan @njsmith ์ด ๋ชจ๋“  ์š”์†Œ๊ฐ€ sudo pip install... ์— ๋Œ€ํ•œ ๋ฐ˜๋ฐœ ์›€์ง์ž„๊ณผ ์ผ๋ฐ˜์ ์ธ ์˜๋ฏธ์—์„œ pip๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋Š” ํŒŒ์ด์ฌ์„ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ pipenv ์งˆ๋ฌธ์€ ์•„๋‹ˆ์ง€๋งŒ ์ง€๊ธˆ ํ† ๋ก ์ด ์ง„ํ–‰๋˜๊ณ  ์žˆ๋Š” ๊ณณ์ด๋ฉฐ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์•ˆ๋‚ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค...

@techalchemy ์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์ด ์ „ํ˜€ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์œ„์˜ ๋ชจ๋“  ๊ฒƒ์˜ ๊ฒฐ๋ก ์€ ์‚ฌ์šฉ์ž๊ฐ€ PyPI์— ๋Œ€ํ•ด pipenv๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฏธ๋Ÿฌ๋ฅผ ์žฌ์ •์˜ํ•˜๋„๋ก ํ•˜๋ฉด ์ถ”๊ฐ€ ์œ„ํ˜‘์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉฐ sudo pipenv ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์• ์ดˆ์— ์˜๋ฏธ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ฃ ?

@njsmith ์•„๋‹ˆ์š” sudo pipenv ๋ฅผ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์‹ค์ œ๋กœ ์ฃผ์ œ๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ ์œ„ํ˜‘ ๋ชจ๋ธ ๊ฒฝ๋กœ๋ฅผ ์•ฝ๊ฐ„ ๋”ฐ๋ผ๊ฐ”๊ธฐ ๋•Œ๋ฌธ์— ํƒ์ƒ‰ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ:

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

์ตœ์†Œํ•œ ์–ด๋Š ์ •๋„์˜ ๋ฐฉ์–ด๊ฐ€ ๊ถŒํ•œ ์žˆ๋Š” ์œ„์น˜์— ์ €์žฅ๋œ ํ‚ค์— ์˜์กดํ•˜์ง€๋งŒ ๊ถŒํ•œ ์žˆ๋Š” python ์„ค์น˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ๊ณ  ์กฐ์–ธํ•˜๋Š” ๊ฒฝ์šฐ ๋…ผ์˜ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํ‹€๋ ธ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ํ™•์‹คํžˆ @ncoghlan ์˜ ์˜๊ฒฌ๊ณผ ๊ด€๋ จ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค (๊ทธ๋Ÿฌ๋‚˜ sudo pipenv , ๊ทธ๊ฒƒ์€ ์ ˆ๋Œ€ ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค)

๋„ค, ๊ทธ๋ƒฅ ๊ฐ‘์ž๊ธฐ ๋– ์˜ค๋ฅธ ์ƒ๊ฐ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ผ๋ถ€ ํ•ด๊ฒฐ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

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

์ž, ์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ๋Œ€ํ•˜๊ฑฐ๋‚˜ ์„ ํ˜ธํ•˜๋Š” ๋™์ž‘์„ ์ •์˜ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜์˜ ํ˜„์žฌ ์ž‘์—… ์ดํ•ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • --pypi-mirror ๊ฐ€ ์ „๋‹ฌ๋˜๊ฑฐ๋‚˜ PIPENV_PYPI_MIRROR ๊ฐ€ ์„ค์ •๋˜๋ฉด ๋‹ค์Œ์„ ์„ ํ˜ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • PyPI๋ณด๋‹ค ๋” ์„ ํ˜ธํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ฃผ์–ด์ง„ ์ธ๋ฑ์Šค URL์ด 'PyPI'์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ์–ด๋–ป๊ฒŒ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๊นŒ? ์ฟผ๋ฆฌํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ชฉ๋ก์„ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชฉ๋ก์— ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ˆœ์—ด์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์ œ๊ณต๋œ ๋ฏธ๋Ÿฌ๋ฅผ ๋จผ์ € ์‹œ๋„ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ Pipfile์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๊ณผ๊ฑฐ์— ์‚ฌ์šฉํ•œ ๋‘ ๊ฐœ์˜ URL์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋งŒ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

๋‹ค๋ฅธ URL์ด ์•„๋‹Œ PyPI๋งŒ ์žฌ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ PyPI URL์ด ์‚ฌ์šฉ ์ค‘์ผ ๊ฒƒ์ด๋ฏ€๋กœ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•˜๋‚˜๋ฅผ ๋†“์น˜๋ฉด ๋ˆ„๊ตฐ๊ฐ€ ๋ฒ„๊ทธ๋ฅผ ์‹ ๊ณ ํ•˜๊ณ  ์ถ”๊ฐ€๋  ๊ฒƒ์ด๋ฉฐ ๊ณง ๋ชจ๋“  URL์„ ๊ฐ–๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ €์—๊ฒŒ ๋งž๋Š” ์ ‘๊ทผ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@njsmith ๊ฐ€ ๋งํ•œ ๊ฒƒ์€ ๋‚ด ๊ด€์ ๊ณผ๋„ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ PR์—์„œ ๊ต์ฒดํ•  ๊ฒƒ์„ ์ œ์•ˆํ•˜๋Š” 3๊ฐœ์˜ repo URL์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ›„ํ–‰ ์Šฌ๋ž˜์‹œ ์—ฌ๋ถ€๋Š” URL์„ ๋ณ„๋„๋กœ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค URL ์ •๊ทœํ™” ๋‹จ๊ณ„๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์š”์ฒญ Pipfile์—๋Š” ํ›„ํ–‰ ์Šฌ๋ž˜์‹œ(์ž‘์„ฑ ์‹œ) ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ด ๋ฐฉ๋ฒ• ๋˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งž๋‹ค, ๋‚ด ์ƒ๊ฐ์€ ์ด๋žฌ๋‹ค.

  • ํ›„ํ–‰ ์Šฌ๋ž˜์‹œ ์—†์ด URL ๋ชฉ๋ก ์œ ์ง€
  • ๋“ค์–ด์˜ค๋Š” URL์— ํ›„ํ–‰ ์Šฌ๋ž˜์‹œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๋ฐœ๊ฒฌ๋˜๋ฉด ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค( str.rstrip ๋Š” ์ž„์˜์˜ ์ˆ˜์˜ ํ›„ํ–‰ ์Šฌ๋ž˜์‹œ๋ฅผ ์ œ๊ฑฐํ•˜๋”๋ผ๋„ ์ž‘์—…์— ์ถฉ๋ถ„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ด์— ๋Œ€ํ•ด ๋” ์—„๊ฒฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ตœ๋Œ€ ํ•˜๋‚˜์˜ ํ›„ํ–‰ ์Šฌ๋ž˜์‹œ๋ฅผ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค)

์—„์ฒญ๋‚œ. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์ž‘์—…ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜๊ณ  ๊ตฌ์ถ•ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํžˆ ๊ฐ„๋‹จํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‘ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋ฏธ๋Ÿฌ ๊ธฐ๋Šฅ์ด ๋นจ๋ฆฌ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค~

์ด ๋ฌธ์ œ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ƒํ™ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ผ๋ถ€ ๊ฐœ์ธ ํŒจํ‚ค์ง€๊ฐ€ ํฌํ•จ๋œ ๋‚ด๋ถ€ PyPI ์„œ๋ฒ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Pipenv๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ข…์†์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ์—ฌ๋Ÿฌ Python ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ผ๋ถ€ ์ข…์†์„ฑ์€ ๋‚ด๋ถ€ PyPI ์„œ๋ฒ„์— ์žˆ๊ณ  ๋‹ค๋ฅธ ์ข…์†์„ฑ์€ ์ปค๋ฎค๋‹ˆํ‹ฐ PyPI์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ํŒจํ‚ค์ง€๋Š” ์ฐพ์„ ์ˆ˜ ์—†๋Š” ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด ์ปค๋ฎค๋‹ˆํ‹ฐ PyPI๋กœ ๋ฆฌ๋””๋ ‰์…˜๋ฉ๋‹ˆ๋‹ค.

๋‚ด ๋ฐฐํฌ ์ „๋žต์€ ์ด๋ฏธ ๋‚ด๋ถ€ PyPI ์„œ๋ฒ„๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์‹œ์Šคํ…œ ์ „์ฒด pip.conf๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋†€๋ž๊ฒŒ๋„ ์ด ๊ตฌ์„ฑ์€ Pipenv์—์„œ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

๋‚ด๋ถ€ PyPI๋ฅผ ์ด๋™/์ด๋ฆ„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด Pipfiles๊ฐ€ ์žˆ๋Š” ์—ฌ๋Ÿฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ํ•ด๋‹น Pipfile.lock ํŒŒ์ผ์„ ๋‹ค์‹œ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฏธ๋Ÿฌ ์˜ต์…˜์€ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Pipenv๊ฐ€ Pip์— ๋Œ€ํ•œ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ์„ ์ฝ์„ ์ˆ˜๋งŒ ์žˆ๋‹ค๋ฉด ์ž‘๋™ํ•˜๊ณ  ๋œ ์ค‘๋ณต๋˜๋Š” ๋Š๋‚Œ์ด ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

PR ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค btw

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

์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™ ์ œ์•ˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๊ตฌ์„ฑ ํŒŒ์ผ์€ Pipfile์˜ [[source]] ์„น์…˜์— ์ •์˜๋œ ๋ชจ๋“  ๊ฐ’์„ ์„ค์ •ํ•˜๋„๋ก ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Pipfile์˜ [[source]] ์„น์…˜๋งŒ ์žˆ๋Š” toml ํŒŒ์ผ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด ํŒŒ์ผ์˜ ์œ„์น˜๋Š” pip.conf(์˜ˆ: /etc/pipenrc.toml, ~/.pipenvrc.toml)์— ๋Œ€ํ•ด ์ •์˜๋œ ๊ทœ์น™์—์„œ ํฌ๊ฒŒ ์˜๊ฐ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ์ด๋Ÿฌํ•œ ๊ฐ’์„ ์žฌ์ •์˜ํ•˜๋„๋ก ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(์•Œ๋ฆผ: [[source]]์˜ ๋ชจ๋“  ๊ฐ’์ด ํ•„์š”ํ•จ). ์ •์˜
  • pipenv์˜ ํ˜„์žฌ ๋™์ž‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • Pipfile์„ ์ƒ์„ฑํ•  ๋•Œ ๊ตฌ์„ฑ ํŒŒ์ผ/ํ™˜๊ฒฝ ๋ณ€์ˆ˜์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

    • ๊ตฌ์„ฑ ํŒŒ์ผ์ด๋‚˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ pipenv์˜ ํ˜„์žฌ ๋™์ž‘์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

    • pipenv๋Š” ํ•ญ์ƒ Pipfile์˜ [[source]] ์„น์…˜์„ ๊ณ„์† ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    • Pipfile์˜ [[source]] ์„น์…˜์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ pipenv๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ๊ฐ’์œผ๋กœ ๋ฌด์—‡์ด๋“  ์žฌ์ •์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์ฐธ๊ณ ๋กœ ์šฐ๋ฆฌ๋Š” ํ˜„์žฌ ํ”„๋กœ๋•์…˜์—์„œ pipenv๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€๋งŒ Arrifactory Pypi ์ €์žฅ์†Œ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ Pipfile์„ ์ˆ˜๋™์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๋„ˆ๋ฌด ์ž์ฃผ ์ƒ๊ธฐ์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ฐธ๊ณ ๋กœ Nexus๋Š” Pypi๋„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ฌด๋ฃŒ๋กœ ์บ์‹œํ•˜๊ณ  t๋Š” ํ›Œ๋ฅญํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!). ์šฐ๋ฆฌ๋Š” ๋งค์šฐ ์ œํ•œ์ ์ธ ๋ฐฉํ™”๋ฒฝ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ํšŒ์‚ฌ ๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€ ์ข…์†์„ฑ์„ ์บ์‹œํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ฏ€๋กœ ๋ฐฑ์—…ํ•˜๊ณ  ์ทจ์•ฝ์ ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ผ๋ฐ˜ ๋˜๋Š” ์‚ฌ์šฉ์ž ๊ตฌ์„ฑ ํŒŒ์ผ๊ณผ ์œ ์‚ฌํ•œ ๊ฐ„๋‹จํ•œ ๊ธฐ๋Šฅ(์˜ˆ: pip ๋˜๋Š” npm์— ๋Œ€ํ•ด ์ด๋ฏธ ์ˆ˜ํ–‰ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด)์œผ๋กœ ๋ชจ๋“  ์›Œํฌ์Šคํ…Œ์ด์…˜์— ๋ฐฐํฌํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‹ค์ˆ˜๋ฅผ ๋œ ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒฝ์šฐ ์ €์—๊ฒŒ ์™„๋ฒฝํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์ณค์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ ํšŒ๊ท€์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ž ์‹œ ๋™์•ˆ 11.6.0์„ ์‚ฌ์šฉํ–ˆ๊ณ  pipenv๋Š” ๋‚ด๋ถ€ pypi ๋ฏธ๋Ÿฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” pip.conf์˜ ์„ค์ •์— ๊ธฐ๊บผ์ด ์œ„์ž„ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

๋ถ„๋ช…ํžˆ ํ•˜์ž๋ฉด: 2018.05.18๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•œ ํ›„ Pipfile[.lock]์— ์ง€์ •๋œ ๋ฏธ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ pipenv๋Š” pypi.org์—์„œ ์ƒˆ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ณด๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ์ด ๋ฌธ์ œ์™€ ๋ณ„๊ฐœ์˜ ๋ฌธ์ œ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@brettdh ๋ณธ์ธ์˜ ํ™˜๊ฒฝ์„ ๋ณด์ง€ ์•Š๊ณ ๋Š” ๊ตฌ๋ถ„ํ•˜๊ธฐ ์–ด๋ ต์ง€๋งŒ ๊ฐ™์€ ๋ฌธ์ œ๋Š” ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฆด๋ฆฌ์Šค ๊ฐ„์— ์ด๋“ฑ๋ถ„ํ•˜์—ฌ ์ •ํ™•ํžˆ ์–ด๋””๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ฌ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด PR์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ๊ธฐ๋ณธ ์„ค์ •์— ๋น„ํ•ด ํ‡ดํ–‰๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ์ถœ์‹œ๋˜์ง€ ์•Š์€ pip 10 ์—…๋ฐ์ดํŠธ์˜ ๋ฌผ๊ฒฐ์— ํœฉ์‹ธ์˜€์„ ์ˆ˜ ์žˆ์ง€๋งŒ @JacobHenner ๊ฐ€ ์•„์ง ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ํฐ ์–ด๋ ค์›€ ์—†์ด ์ด๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

๊ณต์‹ PyPi์˜ ์บ์‹ฑ ํ”„๋ก์‹œ๋กœ devpi๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. pip ์ž์ฒด์˜ ๊ฒฝ์šฐ pip๊ฐ€ ๋ชจ๋“  ์š”์ฒญ์— โ€‹โ€‹๋Œ€ํ•ด ๋กœ์ปฌ devpi ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก /etc/pip.conf ๋ฐ /usr/lib64/python3.6/disutils/distutils.cfg ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ pipenv๋Š” ์ด๋Ÿฌํ•œ ์‹œ์Šคํ…œ ์ „์ฒด ์„ค์ •์„ ๋ฌด์‹œ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋ฏ€๋กœ devpi ์„œ๋ฒ„๋ฅผ ์ฐธ์กฐํ•˜๋„๋ก Pipfile์˜ [[source]] ๊ตฌ์„ฑ ์„ค์ •์„ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Pipfile์„ ์™ธ๋ถ€์— ๊ฒŒ์‹œํ•˜๋ฉด ์™ธ๋ถ€ ๊ธฐ์—ฌ์ž๊ฐ€ ์‹ค์ œ๋กœ ์ž์‹ ์˜ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด [[source]] ์„ค์ •์„ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

pipenv๋Š” /etc/pip.conf ๋ฐ /usr/lib.../distutils.cfg ์˜ ์ „์—ญ ์„ค์ •์„ ์กด์ค‘ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@polski-g

๊ณต์‹ PyPi์˜ ์บ์‹ฑ ํ”„๋ก์‹œ๋กœ devpi๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋„ฅ์„œ์Šค ์ €์žฅ์†Œ, ํ•˜์ง€๋งŒ ๊ฐ™์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ pipenv๊ฐ€ ์ด๋Ÿฌํ•œ ์‹œ์Šคํ…œ ์ „์ฒด ์„ค์ •์„ ๋ฌด์‹œ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@techalchemy๊ฐ€ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด pipenv(11.6.0)๋Š” pip.conf (homedir๋„ ๋งˆ์ฐฌ๊ฐ€์ง€)๋ฅผ ์กด์ค‘ํ–ˆ์ง€๋งŒ ์ตœ์‹  ๋ฒ„์ „์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ํ•˜๋“œ ์ฝ”๋”ฉ๋œ pypi.org URL์ด ์–ด๋”˜๊ฐ€์— ์žˆ์Šต๋‹ˆ๋‹ค(์ข…์†์„ฑ resolution, IIRC) ์žฌ์ •์˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

pipenv๋Š” /etc/pip.conf ๋ฐ /usr/lib.../distutils.cfg์˜ ์ „์—ญ ์„ค์ •์„ ์กด์ค‘ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ distutils.cfg ๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

IIRC์—๋Š” pip.conf๋ฅผ ์กด์ค‘ํ•˜์ง€ ์•Š๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์—ˆ์ง€๋งŒ ์ด๋ฅผ ์ฐพ์œผ๋ ค๋ฉด ๋ฌธ์ œ ์ถ”์ ๊ธฐ๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๋ฐฐ๋Š” ํ•ญํ•ดํ–ˆ๊ณ  PyPI ๋ฏธ๋Ÿฌ๋ง์ด ๊ฑฐ์˜ ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฏ€๋กœ ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ๊ธฐ๋Šฅ์ด ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์— ์ถœ์‹œ๋  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด๊ฒƒ์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๊ตฌ์„ฑ ๊ธฐ๋ณธ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ์„œ ๊ตฌ์„ฑ ํŒŒ์„œ๋ฅผ ์ƒ์„ฑํ•œ ํ›„ .load() ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/pypa/pipenv/blob/master/pipenv/project.py#L573 -#L577

@uranusjr ๋ฏธ๋Ÿฌ๋ง ๊ตฌ์„ฑ์ด ์ž‘๋™ํ•˜๋Š” ํ•œ(์ฆ‰, ๋‚ด๊ฐ€ ์–ธ๊ธ‰ํ•œ ํ•˜๋“œ์ฝ”๋”ฉ๋œ pypi.org URL์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ) pipenv๊ฐ€ ์ด์— ๋Œ€ํ•œ ์ž์ฒด ๊ตฌ์„ฑ์„ ๊ฐ–๊ณ  pip๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@brettdh ๋‚ด ์ง€์ ์„ ํ™•์ธํ•˜๊ณ  ๊ท€ํ•˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
๊ท€ํ•˜์˜ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ ์‚ฌ๋ก€?

>

@JacobHenner ๋„ค, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. --pypi-mirror ์˜ต์…˜( pipenv install , pipenv lock )์„ ์‚ฌ์šฉํ•œ ์ดˆ๊ธฐ ํ…Œ์ŠคํŠธ๋Š” ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. PR์— ์ž‘์€ ์ œ์•ˆ์„ ๋‚จ๊ฒผ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ pypi.org์— ๋Œ€ํ•œ ํ•˜๋“œ์ฝ”๋”ฉ๋œ URL์ด ์—ฌ์ „ํžˆ pipenv ์†Œ์Šค์— ํฉ์–ด์ ธ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒƒ์ด ์•ฝ๊ฐ„ ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค. [[source]] ํ•ญ๋ชฉ์—์„œ ์–ด๋–ค ํ•ญ๋ชฉ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์žฌ์ •์˜๋˜์—ˆ๋Š”์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ์œ„์˜ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚จ ์›Œํฌํ”Œ๋กœ๊ฐ€ ์ •ํ™•ํžˆ ๊ธฐ์–ต๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ณ ์ณ์กŒ๋‹ค๊ณ  ๋ง์”€๋“œ๋ฆฌ๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๐Ÿ˜ฌ

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

๋ฐฉ๊ธˆ ์ตœ์‹  ๋ฒ„์ „์„ ๊ฐ€์ ธ์™”๊ณ  ์—ฌ์ „ํžˆ ์†Œ์Šค์—์„œ pypi.org๋ฅผ ํ•˜๋“œ์ฝ”๋”ฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋˜๋Š” pypi-mirror๋ฅผ ๊ฐ€์ ธ ์™€์„œ [[source]]์˜ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋‘๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?

ํŽธ์ง‘ํ•˜๋‹ค:

๋ฐฉ๊ธˆ ์ฝ”๋“œ๋ฅผ ํŒŒํ—ค ์ณค์Šต๋‹ˆ๋‹ค .. ๋‹น์‹ ์ด ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค

if PIPENV_TEST_INDEX:
    DEFAULT_SOURCE = {
        u"url": PIPENV_TEST_INDEX,
        u"verify_ssl": True,
        u"name": u"custom",
    }
else:
    DEFAULT_SOURCE = {
        u"url": u"https://pypi.org/simple",
        u"verify_ssl": True,
        u"name": u"pypi",
    }

PIPENV_TEST_INDEX๋ฅผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ PIPENV_PYPI_MIRROR๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค๋ฉด ์ข‹์€ ์‹œ์ž‘์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ๋…ผ์˜๋œ ์†”๋ฃจ์…˜์€ ์˜ค๋žซ๋™์•ˆ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ธ์šฉํ•œ ์Šค๋‹ˆํŽซ์€ ๊ธฐ๋ณธ๊ฐ’ ์ž…๋‹ˆ๋‹ค. ์ฆ‰, Pipfile์„ ์ƒ์„ฑํ•  ๋•Œ ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์•„๋‹ˆ์š”, ์†Œ์Šค๋Š” Pipfile์—์„œ ๋ณ€๊ฒฝ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๋ณ€ํ™”์˜ ๋ชฉํ‘œ
์‚ฌ์šฉ์ž๊ฐ€ ๋ณ€๊ฒฝ ์—†์ด _๋ฏธ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PyPI URL์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ•ํŒŒ์ผ.

@JacobHenner ๋ฏธ๋Ÿฌ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋Š” ์†Œ์Šค ๋ชฉ๋ก์„ ์‚ฌํ›„ ์ฒ˜๋ฆฌํ•˜๊ณ  pypi.org URL์„ ์ง€์ •๋œ ๋ฏธ๋Ÿฌ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค .

์ด๊ฒƒ์ด Pipfile ์— ๋ช…์‹œ์ ์ธ pypi.org ํ•ญ๋ชฉ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋„ ๋ฏธ๋Ÿฌ ์žฌ์ •์˜๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. pipenv ๋Š” ๋™์ผํ•œ ๋…ผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด ๊ธฐ๋ณธ ์†Œ์Šค๋„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

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

๋งˆ์ง€๋ง‰ ๋Œ“๊ธ€์€ @kylecribbs๋ฅผ ์œ„ํ•œ ๊ฒƒ ๊ฐ™์€๋ฐ์š”?

@JacobHenner ์•„, ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์›๋ž˜ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๊ณ  ๊ท€ํ•˜์˜ ์˜๊ฒฌ์„ ์ž˜๋ชป ํ•ด์„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ์‹ค์ œ๋กœ ๋ฌด์—‡์ธ์ง€ ๋ช…ํ™•ํžˆ ํ•˜๋ ค๋Š” Kyle์˜ ๋‹ต๋ณ€์ด ์•„๋‹™๋‹ˆ๋‹ค.

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