๐Ÿฃ ๋ชจ๋“ˆ & ํŒจํ‚ค์ง€ ์ดํ•ดํ•˜๊ธฐ

may_soouuยท2020๋…„ 8์›” 22์ผ
0

1. ๋ชจ๋“ˆ๊ณผ ํŒจํ‚ค์ง€ ๊ฒ€์ƒ‰

  • ๋ชจ๋“ˆ : ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜ ๋˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋ชจ์•„๋†“์€ ํŒŒ์ผ
    ๊ทธ๋Ÿผ import ๋ฅผ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ ๋ชจ๋“ˆ์ด๋‚˜ ํŒจํ‚ค์ง€๋ฅผ ์ฐพ๋Š”์ง€ ์•Œ์•„๋ณด์ž.

ํŒŒ์ด์ฌ์€
1. sys.modules
2. built-in modules
3. sys.path
์ด 3๊ฐ€์ง€๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์‚ดํŽด๋ณธ๋‹ค.

1๋ฒˆ์€ ๊ฐ€์žฅ ๋จผ์ € ํ™•์ธํ•˜๋Š” ๊ณณ, 2๋ฒˆ์€ ํŒŒ์ด์ฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ณต์‹ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค 3๋ฒˆ์€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ณด๋Š” ์žฅ์†Œ

sys.modules

๋ชจ๋“ˆ์ด๋‚˜ ํŒจํ‚ค์ง€๋ฅผ ์ฐพ๊ธฐ์œ„ํ•ด ์šฐ์„ ์ ์œผ๋กœ ์‚ดํŽด๋ณด๋Š” ์˜์—ญ์œผ๋กœ dictionary ํ˜•ํƒœ๋กœ ๋˜์–ด ์žˆ๋‹ค.

built-in-modules

ํŒŒ์ด์ฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ณต์‹ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค ์ด๋‹ค.
ํŒŒ์ด์ฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์—๋Š” ๋งŽ์€ ๋‚ด์žฅ ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

print(), float(), int() ๋“ฑ

sys.path

๋งˆ์ง€๋ง‰์œผ๋กœ ์‚ดํŽด๋ณด๋Š” ์˜์—ญ์œผ๋กœ ๋ฆฌ์ŠคํŠธ ๊ตฌ์กฐ์ด๋ฉฐ, sys.path์—์„œ๋„ ๋ชจ๋“ˆ์„ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ•˜๋ฉด ModuleNotFoundError ์—๋Ÿฌ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

  • sys.path ์— ์ •์˜๋˜์–ด ์žˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ 3๊ฐ€์ง€

    ํŒŒ์ด์ฌ ๋ชจ๋“ˆ์ด ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ
    PYTHONPATH ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ์ •์˜๋˜์–ด ์žˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ
    ํŒŒ์ด์ฌ๊ณผ ํ•จ๊ป˜ ์„ค์น˜๋œ ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
๐Ÿ…พ๏ธ sys.modules ์™€ sys.path ์˜ ์ฐจ์ด์ ์€?
path ๋ณ€์ˆ˜๋Š” ๋‚ด๊ฐ€ ๋งŒ๋“  ๋ชจ๋“ˆ๊ณผ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค
modules ๋ณ€์ˆ˜๋Š” ์ž„ํฌํŠธํ•œ ๋ชจ๋“ˆ์ด ์‚ฌ์ „ํ˜•์ฒ˜๋Ÿผ ๋“ค์–ด์žˆ๋‹ค.

* ๐Ÿคทโ€โ™‚๏ธ sys ๊ฐ€ ๋ญ์ง€?
System-specific parameters and functions.
sys๋Š” ํŒŒ์ด์ฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ์ด๋‹ค.

2. Absolute path vs relative path

2-1 . Absolute path

์–ด๋–ค ์›นํŽ˜์ด์ง€๋‚˜ ํŒŒ์ผ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ณ ์œ ํ•œ ๊ฒฝ๋กœ๋‹ค.
์ตœ์ƒ์œ„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฒฝ๋กœ๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค.

C:\users\document\untitled.jpg


๐Ÿ” ์ ˆ๋Œ€๊ฒฝ๋กœ๋กœ ์ž„ํฌํŠธํ•˜๊ธฐ

from calculator.multiplication import func1


2-2. relative path

ํ˜„์žฌ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋Š” ํŽ˜์ด์ง€ ๊ธฐ์ค€์˜ ๊ฒฝ๋กœ๋ฅผ ๋งํ•œ๋‹ค
์ฆ‰ ๋‚ด ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฒฝ๋กœ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—, ํŒŒ์ผ ์œ„์น˜๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๊ฒฝ๋กœ๋„ ๋ณ€๊ฒฝํ•ด์•ผํ•˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

๐Ÿ” ์ƒ๋Œ€๊ฒฝ๋กœ๋กœ ์ž„ํฌํŠธํ•˜๊ธฐ

from .calculater22.sum_ import func2


๐Ÿ‘€ ๊ณผ์ œ ํ•ด๋ณด๊ธฐ

# absoulte path
#from calculator.add_and_multiply import add_and_multiply

# relative path
from .calculator.add_and_multiply import add_and_multiply

if __name__ == '__main__':
    print(add_and_multiply(1,2))

main ํŒŒ์ผ์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค.

  • ์ž„ํฌํŠธ์—๋Ÿฌ!!!!!!
    - ๋ชจ๋“ˆ์„ import ํ•  ๋•Œ ์ง€์ •ํ•œ ์ƒ๋Œ€๊ฒฝ๋กœ์—์„œ ์ƒ์œ„ ํŒจํ‚ค์ง€๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค
  • ๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?
    # absoulte path
    from calculator.add_and_multiply import add_and_multiply
    # relative path
    #from .calculator.add_and_multiply import add_and_multiply
    if __name__ == '__main__':
    print(add_and_multiply(1,2))

> ์ƒ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹Œ, ์ ˆ๋Œ€๊ฒฝ๋กœ์—์„œ ์‹คํ–‰ํ•˜์ž

์ƒ๋Œ€๊ฒฝ๋กœ๋Š” ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๊ทธ๋ž˜์„œ main module ์—์„œ ์ƒ๋Œ€๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๋ฉด ํ˜„์žฌ ์Šคํฌ๋ฆฝํŠธ ๋ช…์ด ๊ธฐ์ค€์ด ์•„๋‹Œ "main" ์ด๋ผ๋Š” ๋ชจ๋“ˆ๋ช…์„ ๊ธฐ์ค€์œผ๋กœ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š”๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ๋ชจ๋“ˆ๋ช…์€ "main"์ด ์•„๋‹ˆ๋ฏ€๋กœ ๊ฒฝ๋กœ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. main module ์—์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์ƒ๋Œ€๊ฒฝ๋กœ๊ฐ€ ์•„๋‹Œ ์ ˆ๋Œ€๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“ˆ์ด๋‚˜ ํŒจํ‚ค์ง€๋ฅผ import ํ•ด์•ผํ•œ๋‹ค.


3. __init __.py

init.py ๋Š” ํŒจํ‚ค์ง€์˜ ์ดˆ๊ธฐ ์„ค์ •์„ ๋•๋Š”๋‹ค.
init.py ํŒŒ์ผ์€ ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ํŒจํ‚ค์ง€์˜ ์ผ๋ถ€์ž„์„ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

  • ํŠน์ • ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๋ชจ๋“ˆ์„ *๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ importํ•  ๋•Œ์—๋Š” init.py ํŒŒ์ผ์— all ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ณ  importํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“ˆ์„ ์ •์˜ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
#multiplication.py 

def multiply(a,b):
return(a*b)

def Squared(a,b):
return(a**b)
-----------------------------------------------
#__init__.py   'multiply'ํ•จ์ˆ˜๋งŒ ํ•œ์ •
from .multiplication import multiply
__all__ = ["multiply"]
-----------------------------------------------
#main.py ์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์˜ค๋ฅ˜ ๋‚จ

from calculator import *
print(multiply(1,2))
print(squered(1,2))

์˜ค๋ฅ˜ : NameError: name 'squered' is not defined

๊ทธ๋Ÿฌ๋‚˜ ์ง์ ‘์ ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ž„ํฌํŠธ ํ•˜๋Š” ๊ฒฝ์šฐ (import Squared) ํ•˜๋Š” ๊ฒฝ์šฐ์—” ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค.

profile
back-end ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€