pip install -e์ ์๋ฏธ, ์์ง๋ ํจํค์ง ๊ทธ๋ ๊ฒ ํธ์งํ์ธ์?
๐ค Problem
๋ณธ ํฌ์คํ ์ ๋ค์ด๊ฐ๊ธฐ ์ , ์ ์์ฌํญ์ ์๋ ค๋๋ฆฝ๋๋ค. ์ด๋ฒ ํฌ์คํ ์ ๋ด์ฉ์ ์๊ฒฉ ์ ์ฅ์์๋ ์๋ฌด๋ฐ ๊ด๋ จ์ด ์์ต๋๋ค. ์กฐ๊ธ ํท๊ฐ๋ฆด ์ ์๊ธฐ ๋๋ฌธ์ ๋ฏธ๋ฆฌ ์ ์ด๋ก๋๋ค. ์ด ๊ธ์์ ๋งํ๋ ํจํค์ง(๋ผ์ด๋ธ๋ฌ๋ฆฌ)๋ '๊น์์ ํด๋ก ํ ๋ ํฌ์งํ ๋ฆฌ', '์์ฒด ๊ฐ๋ฐ ํจํค์ง' ๋ฑ ๋ก์ปฌ ์์ ์กด์ฌํ๋ ํจํค์ง(ํด๋)๋ฅผ ์๋ฏธํฉ๋๋ค. '๊น์ ์๊ฒฉ ์ ์ฅ์', 'PyPI'์ ๊ฐ์ ์๊ฒฉ์ ์ฅ์์ ์์นํ (์์ง ๋ก์ปฌ์ ์ค์นํ์ง ์์) ํจํค์ง์๋ ๊ฑฐ๋ฆฌ๊ฐ ๋จผ ๋ด์ฉ์ ๋๋ค.
์คํ์์ค๋ฅผ ํธ๋ค๋งํ๋ค ๋ณด๋ฉด, ๋ ํฌ์งํ ๋ฆฌ๋ฅผ cloneํ๊ณ , ํด๋น ๋ ํฌ์งํ ๋ฆฌ๋ก ์ด๋ํ์ฌ requirements.txt
์ ๋ฐ๋ผ ์ค์นํ๋ฉด์ ์๋์ ๊ฐ์ ๋ช
๋ น์ด๋ฅผ ์์ฃผ ๋ณผ ์ ์์์ต๋๋ค.
pip install -e .
option์ ํ์ธํด ๋ณด๋ฉด, 'ํด๋น ๊ฒฝ๋ก์ ์์นํ ํจํค์ง(๋ผ์ด๋ธ๋ฌ๋ฆฌ)๋ฅผ editableํ๊ฒ ์ค์นํ ๊ฒ์ด๋ค.'๋ผ๋ ์๋ฏธ๋ก ํด์๋ฉ๋๋ค.
ํ์ง๋ง, ์์ํ๊ฒ๋ ๊ทธ๊ฑด -e
์ต์
์์ด๋ ๊ฐ๋ฅํฉ๋๋ค. ํด๋น ํจํค์ง๊ฐ ์ค์น๋ site-packages
๊ฒฝ๋ก๋ก ๊ฐ์ ์ฝ๋๋ฅผ ์ฃผ์ด์ง ์์
์ ๋ง๊ฒ ์์ ํ๋ฉด ์ด๊ฒ editable ์๋๊น์?
์๋๋ฉด, ๊ทธ ํจํค์ง ์์ฒด๋ฅผ ์ฌ์ฉํ๋ ค๋ ํ๋ก์ ํธ ํด๋์ ํจํค์ง๋ฅผ ๋ฃ๊ณ ์ฌ์ฉํ ์๋ ์์ฃ . (ํด๋๊ฐ ๋ง์ด ์ง์ ๋ถํ๊ฒ ์ง๋ง๐)
ํ์ง๋ง, ์์์ ๋งํ ๊ฒ์ฒ๋ผ ํจํค์ง๋ฅผ ํธ์ง์ ํ๋ค๋ ๊ฒ์ ํด๋น ํจํค์ง๋ฅผ ๋ด ํ๋ก์ ํธ์ fitํ๊ฒ ๋ณ๊ฒฝํด ์ฃผ๊ธฐ ์ํด์ ํจํค์ง๋ฅผ ํธ์งํ๋ ๊ฒ์ ๋๋ค.
ํจํค์ง๋ผ๋ ๊ฒ์ ๋ณธ์ง์ ์ธ ๋ชฉ์ ์ ์ฌ๋ฌ ํ๋ก์ ํธ์์ ์์ฃผ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ๋ค์ ๊ตฌํํด ๋ชจ์๋ ๊ฒ์ ๋๋ค. (ex: numpy, matplotlib ๋ฑ)
์ฆ, ํจํค์ง์์ ๊ฐ๋ฐ๋๊ฑฐ๋, ํธ์ง๋๋ ์ฝ๋๋ค์ ๋ชฉ์ ์ ์กฐ๊ธ ๋ ๋ฒ์ฉ์ ์ธ ์ฌ์ฉ์ ํ๊ธฐ ์ํจ์ธ ๊ฒ์ ๋๋ค. ์ด์ ๋ฐ๋ผ ์ฃผ๋ก ํจํค์ง ํธ์ง์ด๋ผ๋ ๊ฒ์ ํน์ ํ๋ก์ ํธ์ ๊ฒจ๋ฅํ ํธ์ง์ ํ๊ธฐ๋ณด๋ค ํจํค์ง ์์ฒด์ ๋ ๋ฒ์ฉ์ ์ธ ๊ธฐ๋ฅ๋ค์ ์๊ฐํด์ ํธ์ง์ด ๋ค์ด๊ฐ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋์, ํจํค์ง๋ฅผ ์ ๋ฐ์ดํธ ํน์ ํธ์ง์ ํ๋ค๋ ๊ฒ์ ํ๋ก์ ํธ๋ฅผ ๋์ด ๋ ํฐ ๊ทธ๋ฆผ์ ๋ด์ผ ํฉ๋๋ค.
ํจํค์ง๋ฅผ ํธ์งํ๋ค๋ ๊ฒ์ ๋ชฉ์ ์ ์๊ณ ์๋ ์ํ์์ ์ด๋ฐ ์ํฉ์ ๊ฐ์ ํด ๋ด ์๋ค.
๋ด๊ฐ ๊ฐ๋ฐํ ํจํค์ง๊ฐ ๋ด๊ฐ ๋ง๋ค๊ณ ์๋ ์ด๋ค ํ๋ก์ ํธ์์ pip install <package ๊ฒฝ๋ก>
์ ํด์ ์ฌ์ฉํ๊ณ ์๋ค๊ณ ํ์ ๋, ํ๋ก์ ํธ๋ฅผ ํ๋ค ๋ณด๋ ํจํค์ง์ 'A๋ผ๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ผ๋ฉด ์ข๊ฒ ๋ค'๋ ์๊ฐ์ด ๋ญ๋๋ค. ๊ทธ๋ฌ๋ฉด, site-packages
์ ์๋ ํจํค์ง ์ฝ๋๋ฅผ ํธ์งํ์ค ๊ฑด๊ฐ์? ์ข์ต๋๋ค. ํ์ง๋ง, pip install <package ๊ฒฝ๋ก>
๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์๋ค๋ฉด ์๊ฐ์ด ๋ฌ๋ผ์ง ๊ฒ๋๋ค.
์ ๊ทธ๋ฆผ์ pip install <package ๊ฒฝ๋ก>
๋ฅผ ์คํํ์ ๋, ํจํค์ง๊ฐ ๊ฐ์ ํ๊ฒฝ์ ์๊ธฐ๋ ๋ฐฉ๋ฒ์
๋๋ค. ๊ทธ๋ฆผ์ฒ๋ผ ๊ฐ์ ํ๊ฒฝ์ ํจํค์ง๋ฅผ ์ค์นํ๋ฉด, ํจํค์ง์ ๋ณต์ฌ๋ณธ์ด ์๊น๋๋ค. ํจํค์ง ์์ฒด์ ์
๋ฐ์ดํธ๋ฅผ ํด์ฃผ๊ธฐ ์ํด ํธ์ง์ ํ๊ณ ์ ํ๋ ๊ฑด๋ฐ ๋ณต์ฌ๋ณธ ์ฝ๋๋ฅผ ํธ์งํ๋ค๊ณ ํด์ ๋ฌ๋ผ์ง๋ ๊ฒ ์๋์? ๋ฌผ๋ก , ํ๋ก์ ํธ ๋ด์์ ์ฌ์ฉํ๊ฒ ๋๋ ํจํค์ง๋ ์
๋ฐ์ดํธ๋ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ ์ ์๊ฒ ์ง๋ง, ์ด๊ฒ์ ๋ณธ์ง์ ์ธ ๋ชฉ์ ์ ์ด๊ธ๋ฉ๋๋ค. ํจํค์ง ์์ฒด์ ๋ํ ์
๋ฐ์ดํธ๋ฅผ ํ๊ณ ์ถ์์ผ๋๊น์.
๊ทธ๋ฌ๋ฉด, ์๋์ ํจํค์ง(๊ทธ๋ฆผ์์ ์ฃผํฉ์ ๋ฐ์ค)์ ์ฝ๋๋ฅผ ์์ ํด ์ค์ผ๊ฒ ๋ค์. ํ๋ก์ ํธ ๊ฐ์ ํ๊ฒฝ์ ์๋ ํจํค์ง ๋ณต์ฌ๋ณธ์ ์ง์์ฃผ๊ณ ์
๋ฐ์ดํธ๋ ํจํค์ง๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค. ๋ค์ pip install <package ๊ฒฝ๋ก>
๋ฅผ ํ๋ฉด ๋ฉ๋๋ค.
๋ ํจํค์ง์ ์
๋ฐ์ดํธ๊ฐ ํ์ํ๋ค๋ฉด์? ํ๋ก์ ํธ๋ ํ๋ฉด์ ํจํค์ง๋ฅผ ์์ฃผ ์
๋ฐ์ดํธ ์ํฌ ์๋ ์๋ ์ํฉ์ด๋ผ๋ฉด ๋ฒ๊ฑฐ๋กญ์ง ์์๊น์? ์ด๋ฐ ์ํฉ์ ๊ณ ๋ คํ์ฌ ํจํค์ง๋ฅผ ํ๋ก์ ํธ ๊ฐ์ ํ๊ฒฝ์ ์ค์นํ๋ ๋ฐฉ๋ฒ์ผ๋ก -e | --editable
์ด๋ผ๋ ์ต์
์ด ๋ฑ์ฅํ๊ฒ ๋ฉ๋๋ค.
๐ Solution
-e | --editable
์ด๋ผ๋ ์ต์
์ ํ๋ก์ ํธ ๊ฐ์ ํ๊ฒฝ์ ํจํค์ง๋ฅผ ์ค์นํ ๋, site-packages
๋ก ํจํค์ง์ ๋ณต์ฌ๋ณธ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์๋๋ผ ํด๋น ํจํค์ง์ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์์ฑ์ํต๋๋ค.
์ฌ๋ณผ๋ฆญ ๋งํฌ๋ ํ์ผ ์์คํ ์์ ํน์ ํ์ผ ํน์ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋ ํน๋ณํ ์ข ๋ฅ์ ํ์ผ์ ๋๋ค. ์ฆ, ํด๋น ์ต์ ์ผ๋ก ํจํค์ง๋ฅผ ๊ฐ์ ํ๊ฒฝ์ ์ค์นํ๋ฉด ํจํค์ง๋ฅผ ์ค์นํ๋ ๊ฒ์ด ์๋๋ผ ํจํค์ง์ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ํ์ผ์ ์ค์นํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์๋ ๊ทธ๋ฆผ์ฒ๋ผ ํจํค์ง์ ์ ๊ทผ์ ํ ์ ์๊ฒ ๋๋ ๊ฒ์ธ๋ฐ์.
๊ทธ๋์, ํ๋ก์ ํธ ๊ฐ์ ํ๊ฒฝ์์ sys.path
(ํจํค์ง ์์น๋ฅผ ํ์ํ๋ ๊ฒฝ๋ก)๋ฅผ ์ถ๋ ฅํด ๋ณด๋ฉด ํจํค์ง๊ฐ ๋ก์ปฌ์์ ์์นํ ๊ฒฝ๋ก๊น์ง ๋ด๊ณ ์์ต๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, editable ์ต์ ์ ํตํด์ ํธ์งํ ํจํค์ง๋ฅผ ๋ฒ๊ฑฐ๋กญ๊ฒ ์ฌ๋ฌ ๋ฒ ์ค์นํด์ผ ํ๋ ์ํฉ์ ์์ ๊ฑฐ๋, ํจํค์ง ์์ฒด์ ๋ํ ์์ ์ ๋ ๋ฆฝ์ ์ธ ๊ด์ ์ผ๋ก ๋ฐ๋ผ๋ณผ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
๐ Experiment
์ด๋ฌํ ์ต์
์ ์ญํ ์ ์ํํ๋์ง ํ์ธํ๊ธฐ ์ํด์ Hugging Face์ transformers
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ git clone
ํ์ฌ, r๊ฐ ๊ฐ์ ํ๊ฒฝ์ ๋ฐ๋ผ ์ต์
์ ๋ฌด๋ฅผ ์ ํ์ฌ ์ค์นํ๊ณ , ๋ด๋ถ์ ์์์ ์คํฌ๋ฆฝํธ(doby_hello.py
, doby_hi.py
)๋ฅผ ๋ง๋ค์ด ํ์ธํ ๊ฒฐ๊ณผ, -e
์ต์
์ ์ฌ์ฉํด์ผ ํจํค์ง๋ฅผ ๋
๋ฆฝ์ ์ผ๋ก ํธ์งํด๋ ์ฌ๋ณผ๋ฆญ ๋งํฌ์ ์ํด์ ํจํค์ง ์
๋ฐ์ดํธ๊ฐ ์ถ์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
๐ Conclusion
์ด๋ฒ ๊ธ์ ๋ค์ ์ ๊ทผ์ด ์ด๋ ค์ธ ์๋ ์์ ๊ฑฐ๋ผ ์๊ฐ์ด ๋ญ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํจํค์ง๋ฅผ ๊ฐ์ ํ๊ฒฝ์ ์ค์นํ ๋๋ฅผ ์๊ฐํ๋ฉด, ์๊ฒฉ์ ์๋ ํจํค์ง๋ฅผ ํ๋ก์ ํธ ๊ฐ์ ํ๊ฒฝ์์ ์ค์นํ๋ ์ํฉ์ ๋ง์ง๋ง ๋ก์ปฌ์ ์๋ ํจํค์ง๋ฅผ ํ๋ก์ ํธ ๊ฐ์ ํ๊ฒฝ์ ์ค์นํ๋ ์ํฉ์ ์ ์๊ธฐ ๋๋ฌธ์ธ๋ฐ์.
์๋ํ๋ฉด, ๊นํ๋ธ์์ ํด๋ก ํ ๋ ํฌ์งํ ๋ฆฌ๋ ๋๋ถ๋ถ ํจํค์ง๋ก ์ฌ์ฉํ์ง ์๊ณ , ํด๋ก ํ ๋ ํฌ์งํ ๋ฆฌ ์์ฒด ๋ด๋ถ์์ ์์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ด๋ผ ์๊ฐํฉ๋๋ค.
๊ทธ๋์, ์ค์ง์ ์ผ๋ก -e | --editable
์ด๋ผ๋ ์ต์
์ ์ฌ์ฉํ ์ผ์ ์ ์๊ฒ ๋ค๋ง, ์์ฃผ ๋ฑ์ฅํ๋ ์ต์
์ด๋ผ ํ ๋ฒ์ฏค ์ ๋ฆฌ๊ฐ ํ์ํ์ต๋๋ค.
์ฌ์ค ์ด ๊ธฐ๋ฅ์ ์ต์ ์์ฒด๊ฐ ๊นํ๋ธ์์ ํด๋ก ํ ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ํจํค์ง์ฒ๋ผ ๋ค๋ฃจ๋ ์ฌ๋์ด๊ฑฐ๋ ์์ฒด์ ์ผ๋ก ํจํค์ง(๋ผ์ด๋ธ๋ฌ๋ฆฌ)๋ฅผ ๊ฐ๋ฐํ๊ณ ์๋ ์ฌ๋์ด ์๋๋ผ๋ฉด, ์ด ์ต์ ์ด ํ์ํ ๊น?๋ฅผ ๋ง์ด ์๊ฐํ๊ฒ ๋ฉ๋๋ค. (์ฐ ๊ฐ๋ฐ์ ๋ถ๋ค์ด ๋ง์ด ์ฐ์ง ์์๊น)
๋ํ, ๋ณธ ๊ธ์์๋ ๋ค๋ฃจ์ง ์์ง๋ง, ํด๋น ์ต์
์ ๋์์ด ๋๋ ํจํค์ง์๋ setup.py
๋ pyproject.toml
๊ฐ์ ํ์ผ์ด ํ์ํ๋ฐ ์ด๊ฑด ๋์ค์ ๋ ํ ๋ฒ ํ์ํด์ง๋ค๋ฉด ๋ค๋ฃจ์ด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.