ํธ์ง ๊ฐ๋ฅํ๊ฒ ์ค์น๋ ๋ค์ ์คํ์ด์ค ํจํค์ง์ ์ ๊ธฐ์ ์ผ๋ก ์ค์น๋ ๋ค๋ฅธ ํจํค์ง๋ ํจ๊ป ์ ์๋ํ์ง ์์ต๋๋ค.
์ฌ๊ธฐ์ ๊ฐ์ ๋ฌธ์ :(
์ด ๋ฒ๊ทธ๋ฅผ ํ ์คํธํ๋ ์ฝ๋๋ฅผ ๊ฒ์ํ์ต๋๋ค. 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์์ ํ ๋ก ์ฐธ์กฐ
์ด ๋ฌธ์ ๋ฅผ ์ค์ ๋ก ์ฌํํ๋ ์คํฌ๋ฆฝํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋๋ --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.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๊ถ๊ธํ ์ฌ๋์ ์ํด
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
๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.