Welcome! ๐Ÿ™‹โ€โ™‚๏ธ View more

Engineering ๐Ÿ’ป/Tools

[Python] ์ฐธ์กฐํ•œ ๋ชจ๋“ˆ์ด ๋‹ค๋ฅธ ๋ชจ๋“ˆ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ํ•ด๊ฒฐ (๋‹ค๋ฅธ ๋ชจ๋“ˆ ์ฐธ์กฐํ•˜๊ธฐ)

DeepFlame 2022. 2. 18. 21:40

ํŒŒ์ด์ฌ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์งค ๋•Œ, ๋‹ค๋ฅธ ๋ชจ๋“ˆ์˜ ํด๋ž˜์Šค๋‚˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค. 

ํ•„์ž ์—ญ์‹œ ๊ทธ๋Ÿฌํ–ˆ๊ณ , ๊ทธ๋ ‡๊ฒŒ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ์ž‘ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. 

๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พธ๊ณ  ๋‚˜๋‹ˆ, ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ๋‹ค. ์•„๋ž˜ ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด์ž. 

 

 

๐Ÿ˜ซ. ๋ฌธ์ œ ์ƒํ™ฉ


Test ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์กฐ

์—ฌ๊ธฐ์„œ file1.py๊ฐ€ file2.py ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

์—ฌ๊ธฐ์— ๋Œ€ํ•œ ํ•ด๋‹ต์€ ๋งŽ์€ ๊ณณ์—์„œ ๋‚˜์™€์žˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ํ•ด๊ฒฐํ•˜๋ฉด ๋œ๋‹ค.

# file2.py

class Class2:
    def __init__(self):
        print('This is class in Class2')
# file1.py

# ์ƒ์œ„ ํด๋”๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•œ๋‹ค.
import sys, os
sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__))))
from folder2 import file2

file2.Class2()

์ œ๋Œ€๋กœ ์‹คํ–‰๋œ ๊ฒฐ๊ณผ

์œ„์™€ ๊ฐ™์ด ์‹คํ–‰ํ•˜๋ฉด ๋ชจ๋“ˆ์ด ์ œ๋Œ€๋กœ ๋ถˆ๋Ÿฌ์ ธ Class๊ฐ€ ์ดˆ๊ธฐํ™”๋˜๋ฉฐ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‹คํ–‰๋œ๋‹ค. 

 

 

๊ทธ๋ ‡๋‹ค๋ฉด ์•„๋ž˜ ์ƒํ™ฉ์€ ์–ด๋–จ๊นŒ? ๐Ÿ‘€

# file3.py

class Class3:
    def __init__(self):
        print('This is class in Class3')
# file2.py

# ๋™์ผํ•œ ํด๋”์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ƒฅ import ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
import file3

class Class2:
    def __init__(self):
        print('This is class in Class2')
        file3.Class3()

 

์ด ๊ฒฝ์šฐ, file1.py์—์„œ file2๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค๋ฉด ์ œ๋Œ€๋กœ ๋ถˆ๋Ÿฌ์™€์ง€๊ฒ ์ง€?? ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. 

ํ•˜์ง€๋งŒ...

 

์‘...? file2์—์„œ ์ž˜๋งŒ ๋ถˆ๋Ÿฌ์™€์ง€๋Š” file3๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์—†๋‹ค๋‹ˆ.....

 

 

๐Ÿค”. ๊ณ ๋ฏผ๊ณผ ํ•ด๊ฒฐ


์ธํ„ฐ๋„ท์— ์ฐพ์•„๋ดค๋Š”๋ฐ, ๋‚˜์˜ค์ง€๊ฐ€ ์•Š์•˜๋‹ค. ์• ์ดˆ์— ์ด ์ƒํ™ฉ์„ ๋ญ๋ผ ์„ค๋ช…ํ• ์ง€๋„ ์• ๋งคํ–ˆ๋‹ค.. ๐Ÿ˜“

๊ทธ๋ž˜์„œ ๊ณ ๋ฏผ์„ ํ•ด๋ดค๋‹ค. ์ƒ์œ„ ํด๋”๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•˜๋Š” ์ด ํ•จ์ˆ˜๋Š” ๋ฌด์—‡์ผ๊นŒ... 

import sys, os
sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__))))

 

import sys, os
print(os.path.dirname(__file__))
print(os.path.abspath(os.path.dirname(__file__)))
print(os.path.dirname(os.path.abspath(os.path.dirname(__file__))))

์ด๋ ‡๊ฒŒ ๋ณด๋‹ˆ, ํ˜„์žฌ ํŒŒ์ผ์˜ ํด๋”์˜ ์ƒ์œ„ ํด๋”๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ผ ๋ฟ์ด์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ƒ์œ„ํด๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. 

 

๐Ÿ’ก ๊ทธ๋Ÿผ ์ด ๊ณผ์ •์„ file2์— ์ง„ํ–‰ํ•˜๋ฉด ์ž˜ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์ง€๋˜์ง€ ์•Š์„๊นŒ? 

๋ฌผ๋ก  ์ด๋ฒˆ์—” ์ƒ์œ„ ํด๋”๊ฐ€ ์•„๋‹Œ, ํ˜„์žฌ ํด๋”๋กœ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

# file2.py

# ํ˜„์žฌ ํด๋”๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•œ๋‹ค. (์ถ”๊ฐ€๋จ)
import sys, os
sys.path.append(os.path.dirname(__file__))

# ๋™์ผํ•œ ํด๋”์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ƒฅ import ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
import file3

class Class2:
    def __init__(self):
        print('This is class in Class2')
        file3.Class3()

ํ›Œ๋ฅญํ•˜๊ฒŒ ์‹คํ–‰๋œ๋‹ค!