์ Absolute path๋ relative path ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ ๊น?
ํ์ด์ฌ์ built-in ๋ชจ๋๊ณผ pip ์ ํตํด ์ค์นํ ์ธ๋ถ ๋ชจ๋ ๋ฐ
package๋ ์ผ๋ฐ์ ์ผ๋ก import ํ๋๋ฐ ํฐ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค.
์๋ํ๋ฉด built-in ๋ชจ๋์ ํ์ด์ฌ์ ๊ธฐ๋ณธ ํจํค์ง์ ํฌํจ๋์ด ์๊ณ
pip๋ฅผ ํตํด ์ค์นํ ์ธ๋ถ ๋ชจ๋์ ์๋์ผ๋ก site-packages
๋๋ ํ ๋ฆฌ์ ์ค์น๊ฐ ๋๋๋ฐ,
site-packages
๋ sys.path
์ ์ด๋ฏธ ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ธ์ Absolute path
๋ Relative path
๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ ๊น?
๋ฐ๋ก ์ง์ ๊ฐ๋ฐํ local package
์ importํ ๋ ์ฌ์ฉํ๋ค.
importํ๋ ํ์ผ์ด๋ ๊ฒฝ๋ก์ ์๊ด์์ด ๊ฒฝ๋ก๊ฐ ํญ์ ๋์ผํ๋ค.
์ ๋ ๊ฒฝ๋ก๋ ๋จ์ด์ ์๋ฏธ์์ ์ ์ ์๋ฏ์ด ์ด๋ ํ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋๋ฐ์ ์์ด์ ๊ณ ์ ์ ๊ฒฝ๋ก.
์ ๋ํ์ผ ๊ฒฝ๋ก๋ ํ์ผ ์์คํ
์ ๋ฃจํธ์์ ์์ํ์ฌ ์ฃผ์ด์ง ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ์
์์ธ์ค ํ๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ํ ์ ์๋ค.
์ด๋์์๋ ์ ๊ทผ ๊ฐ๋ฅํ ๊ฒฝ๋ก ์ง์ ๋ฐฉ์
absolute path๋ฅผ ์ฌ์ฉ์ ๋จ์ : ๊ฒฝ๋ก๊ฐ ๊ธธ์ด์ง๋ค
๋ฃจํธ ๋๋ ํ ๋ฆฌ(์ต์๋จ ๋๋ ํ ๋ฆฌ)์์ ์์
โโโ my_project
โโโ main.py
โโโ package1
โ โโโ module1.py
โ โโโ module2.py
โโโ package2
โโโ __init__.py
โโโ module3.py
โโโ module4.py
โโโ subpackage1
โโโ module5.py
์ด ํ๋ก์ ํธ๋ฅผ Absoulte path
๋ฅผ ์ฌ์ฉํด package1๊ณผ package2๋ฅผ importํ๋ค๋ฉด,
from package1 import module1
from package1.module2 import function1
from package2 import class1
from package2.subpackage1.module5 import function2
๊ฒฝ๋ก์ ์์์ ์ด ๋ชจ๋ my_project
์ ์ต์์ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ฑฐ์น๋ค.
subpackage1 > module5์ function2 ๊ฒฝ๋ก ํํ
package2.subpackage1.module5.py
# my_project์ ํ๋ก์ ํธ ์์ ์์ผ๋ฏ๋ก my_project๋ ์๋ต๋๋ค.
from import ํค์๋ ์ฌ์ฉ์
from package2.subpackage1.module5 import function2
ํ๋ก์ ํธ ๋ด์์ ์ด๋ ํ์ผ, ์ด๋ ์์น์์ import ํ๋์ง
๊ฒฝ๋ก๊ฐ ํญ์ ์์ ๊ฐ์ด ๋์ผํ๊ฒ ๋๋ฏ๋ก absolute path
๋ผ๊ณ ํ๋ ๊ฒ
Relative path
๋ absolute path
์ ๋ค๋ฅด๊ฒ import ํ๋ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฒฝ๋ก๋ฅผ ์ ์ํ๋ค.
๊ทธ๋์ ์ผ๋ฐ์ ์ผ๋ก relative path
๋ local package
์์์ ๋ค๋ฅธ local package
๋ฅผ import ํ ๋ ์ฌ์ฉ
importํ๋ ์์น ๊ธฐ์ค์ผ๋ก ๊ฒฝ๋ก๋ฅผ ์ ์ํ๋ค.
์ ์ธํด์ผ ํ๋ ๊ฒฝ๋ก์ ๊ธธ์ด๋ฅผ ์ค์ผ ์ ์๋ค.
์ ๋๊ฒฝ๋ก์ ๋ฐ๋๋ก ์ ์ธํ ์ ํ์ผ ์์น๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๊ฒฝ๋ก ์์น๋ ๋ณ๊ฒฝํด์ผ ํ๋ค.
โโโ my_project
โโโ main.py
โโโ package1
โ โโโ module1.py
โ โโโ module2.py
โโโ package2
โโโ __init__.py
โโโ module3.py
โโโ module4.py
โโโ subpackage1
โโโ module5.py
ํ์ฌ ์์น๋ package2.module3.py์ด๋ผ๊ณ ํ ๋,
package2์ module3์์ >
package2์ class1์
package2์ ํ์ package์ธ subpackage1์ module5์ function2 ํจ์๋ฅผ importํ๋ค๋ฉด,
# package2/module3.py
from . import class1
from .subpackage1.module5 import function2
๋ก ๊ฒฝ๋ก๋ฅผ ์ ์ธํด์ฃผ๋ฉด ๋๋ค.
ํ์ฌ ์์น๊ฐ package2.module4.py์ด๋ผ๊ณ ํ ๋,
package1์ module1๋ด function2 ํจ์๋ฅผ importํ๋ค๋ฉด,
from ..package1.module1 import function2
์ ์ธํด์ผ ํ๋ ๊ฒฝ๋ก์ ๊ธธ์ด๋ฅผ ์ค์ฌ์ค๋ค๋ ์ฅ์ ์ ์์ง๋ง ํท๊ฐ๋ฆฌ๊ธฐ ์ฝ๊ณ ํ์ผ ์์น๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๊ฒฝ๋ก ์์น๋ ๋ณ๊ฒฝํด์ค์ผ ํ๋ฏ๋ก,
์ฌ๋งํ ๊ฒฝ์ฐ absolute path
๋ฅผ ์ฌ์ฉํ๋๊ฒ ๋ซ๋ค~~!~!