<p>๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ pip install --editable ๋ฐ pip install clash</p>

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

ํŽธ์ง‘ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์„ค์น˜๋œ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง€์™€ ์ •๊ธฐ์ ์œผ๋กœ ์„ค์น˜๋œ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋Š” ํ•จ๊ป˜ ์ž˜ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

auto-locked bug

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

๊ถ๊ธˆํ•œ ์‚ฌ๋žŒ์„ ์œ„ํ•ด pip install , pip install -e , python setup.py install ๋ฐ python setup.py develop ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง€๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ „์ฒด ๋ชฉ๋ก์ด ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/jonparrott/namespace-pkg-tests/blob/master/table.md

tl; dr : pip ์‚ฌ์šฉํ•˜์—ฌ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค์˜ ๋‹ค๋ฅธ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ ํ•œ ๊ฒฝ์šฐ pip install -e ๋ฐ python setup.py develop ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์—ฌ๊ธฐ์— ๊ฐ™์€ ๋ฌธ์ œ :(

์ด ๋ฒ„๊ทธ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. http://public.hg.stephane-klein.info/hgwebdir.cgi/test_pip_namespace_bug_3/

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ์˜ ๊ทผ์›์€ setuptools์— ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง€๋ฅผ ์ž‘๋™์‹œํ‚ค๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. __init__.py ๋ฐฉ๋ฒ• (๋ฌธ์„œํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ)๊ณผ ...-nspkg.pth ํŒŒ์ผ ๋ฐฉ๋ฒ• --single-version-externally-managed (pip๊ฐ€ ์‚ฌ์šฉํ•จ)์—์„œ๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฐฉ๋ฒ•์€ ์„œ๋กœ ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

IRC์—์„œ mitsuhiko ๋ฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๊ณผ ๋…ผ์˜ํ•œ ํ›„, pip๋ฅผ์œ„ํ•œ ์ตœ์ƒ์˜ (๋ถ€๋ถ„) ์†”๋ฃจ์…˜์€ "pip install -e"๊ฐ€ ๊ฐ ๊ฐœ๋ฐœ ์„ค์น˜ ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด ํ‘œ์ค€ setuptools ... nspkg.pth ํŒŒ์ผ์˜ ์ˆ˜์ • ๋œ ๋ฒ„์ „์„ ์ถ”๊ฐ€ํ•˜๋„๋กํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. . (ํ•„์š”ํ•œ ์ˆ˜์ •์€ sitedir ๋Œ€์‹  ๊ฐœ๋ฐœ ๋‹ฌ๊ฑ€ ๋งํฌ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๊ฐœ๋ฐœ์— ์„ค์น˜๋œ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง€์—๋Š” init .py๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ init .py ๊ฒ€์‚ฌ๋ฅผ ์™„์ „ํžˆ ๊ฑด๋„ˆ ๋›ฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค). ์ฆ‰, pip๋Š” ์ตœ์†Œํ•œ ์ž์ฒด์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค (pip ์„ค์น˜ ๋ฐ pip ํŽธ์ง‘ ๊ฐ€๋Šฅ ์„ค์น˜ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง€๊ฐ€ ํ•จ๊ป˜ ์ž‘๋™ ํ•จ). Pip ์„ค์น˜ ๋ฐ setuptools / ๋ถ„์‚ฐ ์„ค์น˜ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง€๋Š” ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

๋‚˜๋Š” pip๊ฐ€ ์–ด๋–ป๊ฒŒ ๋“  nspkg.pth๋ฅผ ๋ชจ๋‘ ์ฃฝ์ด๊ณ  __init__.py ์„ค์น˜ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ ์ž์ฒด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋””์ž์ธ ๋œ ํ•œ (์ฆ‰, __init__.py ๋Š” extend_path / declare_namespace๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋น„์–ด ์žˆ์Œ) ๋ฌธ์ œ๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. --single-version-externally-managed๋Š” ์‹œ์Šคํ…œ ํŒจํ‚ค์ €๋ฅผ ์—ผ๋‘์—๋‘๊ณ  ์„ค๊ณ„๋˜์—ˆ์ง€๋งŒ ์ฒ˜์Œ์—๋Š” pip๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋„ˆ๋ฌด ๋ฐฉํ•ดํ•˜์ง€ ์•Š๊ณ ์ด ๋™์ž‘์„ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™” ํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

'--single-version-externally-managed'์—์„œ ์ „ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ +1 : ํ•ด๋‹น ์˜ต์…˜์€ pip์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ์œ„ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. pip๊ฐ€ ์ตœ์†Œํ•œ easy_install๋งŒํผ ์ข‹์€ ์„ค์น˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ๊ทธ ๋ชฉ์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

--single-version-externally-managed ์™„์ „ํžˆ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”Œ๋žซ ์„ค์น˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง€์˜ ๊ฒฝ์šฐ์—๋งŒ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ๋ คํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์ง€๋งŒ setuptools / distribute์— ๋‚ด์žฅ ๋œ ๋‘ ๊ฐ€์ง€ ์œ ํ˜•์˜ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง€ ์ง€์› ์‚ฌ์ด์˜ ๋ณธ์งˆ์ ์ธ ๋น„ ํ˜ธํ™˜์„ฑ์„ ๊ณ ๋ คํ•  ๋•Œ ํ›Œ๋ฅญํ•œ ์˜ต์…˜์€์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

์—ฌ๊ธฐ์„œ ํŒŒ์†์€ ํ•ด๋‹น ํ”Œ๋ž˜๊ทธ๊ฐ€์žˆ๋Š” ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด setuptools๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์— ๋‚ด์žฌ ๋œ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค. ๋ฒ„๊ทธ๋Š” ์›๋ž˜ ์˜๋„ ํ•œ ๋Œ€์ƒ์ธ ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ์ž‘์„ฑ์ž๊ฐ€ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์™€ ๋˜‘๊ฐ™์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค (์ฒ˜์Œ์—๋Š” " setup.py develop "์„ค์น˜๋œ ํŒจํ‚ค์ง€ ๋ฐ ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ์„ค์น˜ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง€).

์ด ๋ฒ„๊ทธ๋„ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์—ฌ๊ธฐ ๋‚จ์•„์žˆ๋Š” ํ•ด๊ฒฐ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฒ„๊ทธ ์ค‘ ํ•˜๋‚˜๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ค ์ž˜.

๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง€๊ฐ€ ๊ด€๋ จ๋˜์–ด์žˆ์„ ๋•Œ --single-version-externally-managed ๋ฅผ ํ”ผํ•˜๊ธฐ์œ„ํ•œ ํŒจ์น˜๋ฅผ ์ˆ˜๋ฝ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ˜„์žฌ ๊ทธ ํŒจ์น˜๋ฅผ ์ž‘์„ฑํ•  ๊ณ„ํš์ด ์—†์Šต๋‹ˆ๋‹ค.

--single-version-externally-managed ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด pip install ์ „๋‹ฌํ•  ์ˆ˜์žˆ๋Š” ์˜ต์…˜์ด ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” easy_install์ฒ˜๋Ÿผ ./pip/req.py:568 ์™€ ๋ชจ๋“  ํŒจํ‚ค์ง€๊ฐ€ ์ด์ œ egg dir์— ์„ค์น˜๋œ ๊ฒƒ์„ ์ฃผ์„์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค. ๋•Œ๋กœ pip์™€ easy_install์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜์—ฌ site-packages ๊ฐ€ ์ผ๋ถ€ ํŒจํ‚ค์ง€์™€ ํ˜ผํ•ฉ๋˜์ง€ ์•Š๋„๋กํ•˜๊ณ  ์ผ๋ถ€๋Š” ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š”์— ๋ฌธ์ œ๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค --egg ์˜ตํŠธ ์•„์›ƒ ์˜ต์…˜์„ --single-version-externally-managed .

https://github.com/k4ml/pip/commit/93cd6b16207d2eba201a7fc3126624b616f5e6f9

๋‚ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ์›€์ง์ด๊ณ  ์žˆ๋‹ค๋ฉด ๋ˆ„๊ตฐ๊ฐ€ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ์ฒ˜์Œ์œผ๋กœ pip ์ฝ”๋“œ๋ฅผ ํ•ดํ‚นํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ด๊ฒƒ์€ ๋ช‡ ๋ถ„ ๋™์•ˆ ์ผ๋ถ€๋ฅผ ์—ฟ๋ณผ ๋•Œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœํ•ฉ๋‹ˆ๋‹ค. pip install --egg somepackages ๋ชจ๋“  ๊ฒƒ์„ ๋‹จ์ผ ์—๊ทธ ๋””๋ ‰ํ† ๋ฆฌ์— ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ์›€์ง์ด๊ณ  ์žˆ๋‹ค๋ฉด ๋ˆ„๊ตฐ๊ฐ€ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜์—๊ฒŒ ์ž˜ ์–ด์šธ๋ ค์š”. ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋Š” ๋Œ€๋ถ€๋ถ„ ๋†’์€ ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค.
ScriptTest๋ฅผ ์‚ฌ์šฉํ•œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋Š” ๋‹ค์Œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ•˜๊ธฐ ์‰ฌ์›Œ์•ผํ•ฉ๋‹ˆ๋‹ค.
๊ธฐ์กด ์˜ˆ. ์ด ๊ฒฝ์šฐ ์„ค์น˜๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์‹ถ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ƒ˜ํ”Œ ํŒจํ‚ค์ง€๋Š” ํ”Œ๋žซ ์„ค์น˜๊ฐ€ ์•„๋‹Œ .egg ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
์‚ฌ์ดํŠธ ํŒจํ‚ค์ง€. ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๋„คํŠธ์›Œํฌ๊ฐ€ ์•„๋‹˜ : tests/packages/FSPkg ์ด (๊ฐ€) ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ฒจ๊ฐ€
tests/test_basic.py ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ!

ํ’€ ์š”์ฒญ-https: //github.com/pypa/pip/pull/541

๋˜ํ•œ pip.conf์—์„œ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

๋˜ํ•œ pip.conf์—์„œ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

ํ’€ ๋ฆฌํ€˜์ŠคํŠธ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•ฉ์‹œ๋‹ค.

ํ•˜๋‚˜์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ๋ณ‘ํ•ฉ ๋œ ํ’€ ์š”์ฒญ # 541. @ k4ml ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์ฃผ์˜ :์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ๋œ --egg ์˜ต์…˜์€ ๋Œ€์ฒด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์ œ๊ณต๋˜์ง€ ์•Š๊ณ  ์ œ๊ฑฐ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. # 1749์—์„œ ํ† ๋ก  ์ฐธ์กฐ

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

https://gist.github.com/Ivoz/d9bff05069e0ec53e6ea

๋‚˜๋Š” --egg ์†”๋ฃจ์…˜์˜ ์—ด๋ ฌํ•œ ํŒฌ์€ ์•„๋‹ˆ์ง€๋งŒ ์ด๊ฒƒ์— ๋Œ€ํ•œ ๋œ ์„ฑ๊ฐ€์‹  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์—†์œผ๋ฉด ๊ฐœ๋ฐœ ์ค‘์— --editable์„ ํ•œ ๋ฒˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ํŽธ์ง‘ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•  ๋•Œ๋งˆ๋‹ค pip install -I --no-deps . ์‹คํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ •๋ง ์˜ค๋ž˜๋˜๊ณ  ๊นจ์ง€๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค (์ฝ๊ธฐ : ๊ฐ€๋” ์žŠ์–ด ๋ฒ„๋ฆผ).

์ด ์ „์ฒด ๋ฌธ์ œ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ๋ฐฉ์‹์˜ ๋ฌธ์ œ ์ค‘ ์ผ๋ถ€๋Š” ์นจ๋ฌต์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์ด ์„ค์น˜๋˜์–ด ์žˆ๊ณ  pip๊ฐ€ ๋ชจ๋“ˆ์ด ์žˆ๋‹ค๊ณ  ์•Œ๋ ค์ฃผ๋”๋ผ๋„ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

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

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด setuptools https://bitbucket.org/pypa/setuptools/issue/250/develop-and-install-single-version ์—์„œ 2 ๊ฐœ์˜ ์ œ์•ˆ์„ ์ œ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค

ํผํŒ…

import pkg_resources; pkg_resources.fixup_namespace_packages ( '')

์‚ฌ์ดํŠธ ํŒจํ‚ค์ง€์˜ .pth ํŒŒ์ผ์—์„œ pip install -e ์„ค์น˜๋œ ํ•ญ๋ชฉ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋„๋กํ•˜๋Š” ๋ฐ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ๋˜ํ•œ ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ์„ค์น˜๋œ ๋‘ ํŒจํ‚ค์ง€ ๋ชจ๋‘ ์ตœ์ƒ์œ„ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๊ฐ€ ๋™์ผํ•œ ๋‘ ํŒจํ‚ค์ง€์— ์˜ํ–ฅ์„์ค๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ํŒจํ‚ค์ง€ ์„ค์น˜๊ฐ€ ์†์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ „์—ญ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ์ด ๋ฌธ์ œ๋Š” ์•ฝ๊ฐ„ ์–ด๋ ต์Šต๋‹ˆ๋‹ค (+ Windows ๋ฐฐํฌ ํ”Œ๋žซํผ์— ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ์„ค์ • ๋„๊ตฌ๊ฐ€ ํœ ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ). ๋˜ํ•œ ๋ชจ๋“  ๊ถŒ์žฅ ์†”๋ฃจ์…˜์€ Python 3.4๋ฅผ ์‚ฌ์šฉํ•œ ์„ค์ •์—์„œ ์‹คํŒจํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

pip install -e ๊ฐ€ ํŽธ์ง‘ ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•˜๋Š” ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด setup.py develop ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ธ์‹ ํ•œ ํ›„ setuptools ํ”„๋กœ ์‹œ์ €์— ์—ฐ๊ฒฐํ•˜์—ฌ * .pth ํŒŒ์ผ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.์ด ํŒŒ์ผ์€ ํŒŒ์ด์ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง€๋ฅผ "๋„์ž…"ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด setuptools 18 ๋ฐ pip 7.1.0์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์ œ setup.py ํŒŒ์ผ์€ ์—ฌ๊ธฐ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
https://gist.github.com/cbrand/a1624ac3e9c81ce45fcb

๋‹ค๋ฅธ ๋ถ„๋“ค์—๊ฒŒ๋„ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉดํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋Š˜๋„์ด ๋ฌธ์ œ๋ฅผ ๋งŒ๋‚ฌ๋Š”๋ฐ ๋นŒ๋“œ ์•„์›ƒ์—์„œ virtualenv + pip๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์ฐจ๋‹จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ž‘์€ ๋ฐ๋ชจ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด .tar.gz์˜ ์••์ถ•์„ ํ’€๊ณ  ๊ทธ ์•ˆ์— {{run-me}} ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ…Œ์ŠคํŠธ ํ•  ๋•Œ ์œ ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ์ด ๋ฌธ์ œ์— ๋ถ€๋”ช ์น˜๊ณ ์žˆ๋‹ค.

์ดํ•ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๋Š” ๋™์•ˆ https://github.com/pypa/pip/issues/3#issuecomment -1659959์—์„œ @carljm ์ด ์ œ์•ˆํ•œ ์†”๋ฃจ์…˜์„

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

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

๊ทธ๋Ÿผ ...์ด ๋ฌธ์ œ๊ฐ€ ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— ๊ณ ์ณ์งˆ ํฌ๋ง์ด ์—†๋‚˜์š”?

pkg_resources.get_distribution() ์˜ ์ผ๋ถ€ ๋ถ€์ž‘์šฉ์œผ๋กœ ์ธํ•ด ๊ฐ€์ ธ ์˜ค๊ธฐ๊ฐ€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ ์‰˜์ด ์‹คํŒจํ•˜๋Š” ๋™์•ˆ ์ง„์ž… ์ ์„๋กœ๋“œ ํ•œ ์ฝ”๋“œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ–ˆ์„ ๋•Œ ์ด๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋˜ํ•œ ipython ์‰˜์ด ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ ์˜ค๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€์—†๋Š” ์ด์œ ๋ฅผ ์„ค๋ช… ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฒ„๊ทธ๊ฐ€ 5 ๋…„ ํ›„์—๋„ ๋ช…ํ™•ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์—†์ด ์—ด๋ ค ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์— ๋†€๋ž์Šต๋‹ˆ๋‹ค.

ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ํ•˜๋‚˜์˜ ํ†ตํ•ฉ ํ”„๋ ˆ์ž„ ์›Œํฌ๋กœ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ์ด ์ž‘์—…์ด๋ผ๋ฉด pip๋Š” ์ž‘์—…์„ ์งœ์ฆ๋‚˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ๋ฒ„๊ทธ๋กœ ์ธํ•ด ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†”์งํžˆ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ฃผ๋กœ ์ž์› ๋ด‰์‚ฌ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
pip๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ๋„๋ก setuptools์— ํ•„์š”ํ•œ ์ง€์›์„ ์ž์œ ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

Brandon Github [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์”๋‹ˆ๋‹ค.

์ด ๋ฒ„๊ทธ๊ฐ€ 5 ๋…„ ํ›„์—๋„ ๋ช…ํ™•ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์—†์ด ์—ด๋ ค ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์— ๋†€๋ž์Šต๋‹ˆ๋‹ค.

๋„ค, ์œ ๊ฐ์ž…๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ์ตœ๊ทผ์— ์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ fixup_namespace_packages ( '') ํ•ดํ‚น์„ ์ ์šฉํ–ˆ๊ณ 
์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค : Venv์˜ ์‚ฌ์ดํŠธ ํŒจํ‚ค์ง€ ๋‚ด์— z.pth ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
import pkg_resources; pkg_resources.fixup_namespace_packages('')

์‹œ๋„ํ• ๋งŒํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค, IMHO.

์—ฌ๊ธฐ์— ๋˜ ๋‹ค๋ฅธ ์ถฉ๋Œ!

๋ชจ๋“  ๊ณจ์ˆ˜ ํŒจํ‚ค์ง€๋Š” ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค (์ผ๋ถ€ ํŒจํ‚ค์ง€๋Š” ์ตœ๋Œ€ 4 ๊ฐœ ๋˜๋Š” 5 ๊ฐœ๋กœ ์ฑ„์›Œ์ง)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ,์ด ํŠน์ • ๋ฌธ์ œ๋Š” ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๋•Œ ๋‚ด ์กด์žฌ์— ์•ฝ๊ฐ„์˜ ๊ณจ์นซ๊ฑฐ๋ฆฌ์˜€์Šต๋‹ˆ๋‹ค. . ๋‚˜๋Š” ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” 60 ๊ฐœ์˜ ํŒจํ‚ค์ง€๋ฅผ ๋ถ€๋„๋Ÿฌ์›Œํ–ˆ์Šต๋‹ˆ๋‹ค. entry_points ๋ฉ”๋ชจ๋„ ํฅ๋ฏธ ๋กญ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค์ƒ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค์— ๊ธฐ์—ฌํ•˜๋Š” ๋ชจ๋“  ํŒจํ‚ค์ง€๊ฐ€ entry_points ๋„ ๊ธฐ์—ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

pip ์ ‘๊ทผ ๋ฐฉ์‹์€ _every_ ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜๊ณ  ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ๋””์Šคํฌ์—์„œ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค์—์„œ ํ˜‘๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํŒจํ‚ค์ง€๊ฐ€ pip๋ฅผ ํ†ตํ•ด ํŽธ์ง‘ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ์„ค์น˜๋œ ๊ฒฝ์šฐ, ์ „์ฒด ์›์‚ฌ ๊ณต์ด ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋งค์šฐ ๋‘”๊ฐ ํ•œ ์ฆ์ƒ์œผ๋กœ ํ’€๋ฆฌ๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ : ๊ฐ„ํ—์ ์œผ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜์žˆ๋Š” ๋ชจ๋“ˆ, ์ƒ์œ„ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ๊ฐ€์ ธ ์˜ค๊ธฐ ๋ฐ namespace.__path___ ํ™•์ธ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์˜จ ์ „์„ฑ ๊ฒ€์‚ฌ๋Š” ํ…Œ์ŠคํŠธ์—์„œ ๋ฌธ์ œ๊ฐ€๋˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ์‹๋ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.) ์ ์ ˆํ•˜๊ฒŒ pip ์„ค์น˜๋œ ํŒจํ‚ค์ง€์™€ ์ˆœ์ˆ˜ setup.py develop 'd ํ˜ผํ•ฉ ๊ทธ๋Ÿฌ๋‚˜ ์†Œ์Šค (pip ํšŒํ”ผ)๋Š” ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ๋‹จ์ผ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ์ œ๊ณต ํŒจํ‚ค์ง€๊ฐ€ ์„ธ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ, ๋•Œ๋กœ๋Š” ๋ชจ๋‘ ๋™์‹œ์— ์„ค์น˜ ๋  ์ˆ˜์žˆ๋Š” ์ด์ƒํ•œ ์ƒํ™ฉ์— ์ฒ˜ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ( pip uninstall ๋ฐ˜๋ณต์  ์ธ ํ˜ธ์ถœ์€ ๊ฐ๊ฐ ๋” ๋งŽ์€ ํŒŒ์ผ์„ ์ฐพ๋Š” ๊ฒƒ์€ ๋ถˆํ–‰ํ•œ ์ผ์ž…๋‹ˆ๋‹ค.) pip install -e ์‚ฌ์šฉํ•  ๋•Œ ์ข…์†์„ฑ ์„ค์น˜๋„ ์ผ๊ด€์„ฑ์ด์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์šฐ๋ฆฌ๋Š” ์ ์ ˆํ•˜๊ฒŒ ์••์ถ•์ด ํ’€๋ฆฐ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค (์„ค์น˜๋จ), pth-link ํŒŒ์ผ (ํŽธ์ง‘ ๊ฐ€๋Šฅ ์„ค์น˜๋จ)์œผ๋กœ ๋๋‚˜๊ณ , ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” zip_safe ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์••์ถ• ๋œ .egg ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค zip_safe ๋Š” ํ•ด๋‹น ์ข…์† ํŒจํ‚ค์ง€์—์„œ False ์ด๊ณ  Pypi์—์„œ๋Š” .egg ๋ฐฐํฌ๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ขŒ์ ˆ๊ฐ์€ ๊ฐ€์ƒ ํ™˜๊ฒฝ์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘๋˜๋„๋ก ๋„ค ๋ฒˆ์งธ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ ˆ์ •์— ์ด๋ฆ…๋‹ˆ๋‹ค. ;)

ํ•ด๊ฒฐ์ฑ…์€ ์•„๋‹ˆ์ง€๋งŒ ๋ช‡ ๊ฐ€์ง€ ๋ฉ”๋ชจ๋ฅผ ๋‚จ๊ฒผ์Šต๋‹ˆ๋‹ค. 'ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ'ํŒจํ‚ค์ง€, ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง€ ๋ฐ ์ผ๋ฐ˜ ํŒจํ‚ค์ง€๋ฅผ ํ˜ผํ•ฉ ํ•  ๋•Œ buildout + mr.developer์— ๋” ๋งŽ์€ ํ–‰์šด์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@lelit์ด ์–ธ๊ธ‰ ํ•œ ์ˆ˜์ • ํ•ดํ‚น์ด ์ผ๋ถ€ ํŒจํ‚ค์ง€์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ผ๋ถ€ ํŒจํ‚ค์ง€ / ๋นŒ๋“œ๋„ ๋ง๊ฐ€์ง‘๋‹ˆ๋‹ค.

pip ์„ค์น˜ ๋ฐ ํŽธ์ง‘ ๊ฐ€๋Šฅ ๋ชจ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ๋†€๋‹ค๊ฐ€ @carljm (ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํŒจํ‚ค์ง€์— -nspkg.pth ํŒŒ์ผ ์ถ”๊ฐ€)๊ณผ ๋™์ผํ•œ ์•„์ด๋””์–ด๋ฅผ

PEP420์ด ๊ตฌํ˜„ ๋œ ์ตœ์‹  ๋ฒ„์ „์˜ Python์—์„œ ์—ฌ์ „ํžˆ ๋ฌธ์ œ์ž…๋‹ˆ๊นŒ? (์ฝ๊ธฐ : ์ตœ์‹  ๋ฒ„์ „์˜ ํŒŒ์ด์ฌ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋ ๊นŒ์š”?)

PEP420 ์Šคํƒ€์ผ์„ ์‚ฌ์šฉํ•˜๋ฉด ํŽธ์ง‘ ๊ฐ€๋Šฅ ๋ชจ๋“œ์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ํšจ๊ณผ์ ์œผ๋กœ ๋„์›€์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์•ˆํƒ€๊น๊ฒŒ๋„ ์ž์ฒด ๊ฒฐํ•จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด setuptools์˜ find_packages ๋Š”์ด๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค .

-    packages=find_packages('src'),
+    packages=['toplevel.child.' + package
+              for package in find_packages('src/toplevel/child/')],

์•„๋ฌด๋„ ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํŒจํ‚ค์ง€์— -nspkg.pth๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๊ณ  Python 3.5 ์ด์ƒ์—์„œ PEP-420 ํŒจํ‚ค์ง€์™€ ๊ณต์กดํ•˜๋Š” Setuptools 31 ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๊ถ๊ธˆํ•œ ์‚ฌ๋žŒ์„ ์œ„ํ•ด pip install , pip install -e , python setup.py install ๋ฐ python setup.py develop ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง€๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ „์ฒด ๋ชฉ๋ก์ด ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/jonparrott/namespace-pkg-tests/blob/master/table.md

tl; dr : pip ์‚ฌ์šฉํ•˜์—ฌ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค์˜ ๋‹ค๋ฅธ ๋ชจ๋“  ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ ํ•œ ๊ฒฝ์šฐ pip install -e ๋ฐ python setup.py develop ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. setuptools 31์€ ์šฐ๋ฆฌ์˜ ๋ณต์ œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์œ„ํ•ด ์ด๊ฒƒ์„ ์ˆ˜์ • ํ•œ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ, ๊ทธ ์ด์ƒ์œผ๋กœ๋Š” pip๊ฐ€ ์—ฌ๊ธฐ์„œ ํ•  ์ˆ˜์žˆ๋Š” ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋ฟก๋ฟก
https://github.com/jonparrott/namespace-pkg-tests/blob/master/table.md ์—์„œ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ ๋œ pip ๋ฐ setuptools ๋ฒ„์ „์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

@jonparrott ์˜ ์˜ˆ์—์„œ ์‹คํŒจํ•œ ๊ฒฝ์šฐ๋Š” " python setup.py install ์ง์ ‘ ์‚ฌ์šฉ (์˜ˆ์ƒ๋˜๋Š” Python 2์˜ PEP 420 ์‹คํŒจ ์ œ์™ธ)์œผ๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” pip๊ฐ€ ๊ด€๋ จ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์ „ํ˜€ (์˜ˆ : python setup.py install + python setup.py develop ).

์ด ํ‹ฐ์ผ“์€ pip install . ๋ฐ pip install -e ๋˜๋Š” python setup.py develop ์กฐํ•ฉ์„์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@jonparrott ๊ฐ€ ์ด๋ฏธ ๊ฒŒ์‹œ ํ•œ ๊ทธ๋ž˜ํ”„๋Š”์ด ํ‹ฐ์ผ“์ด ํ•ด๊ฒฐ๋˜์—ˆ์œผ๋ฉฐ ์—ฌ๊ธฐ์— ๋‚จ์•„์žˆ๋Š” ๋ชจ๋“  ๋ฌธ์ œ๋Š” pip๊ฐ€ ์•„๋‹Œ python setup.py install ์˜ ๋ฌธ์ œ์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

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

@ piotr-dobrogost ํ…Œ์ŠคํŠธ๋Š” ๋‘˜ ๋‹ค ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์„ ์“ฐ๋Š” ์‹œ์ ์—์„œ pip 9.0.1 ๋ฐ setuptools 34.3.2.

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