๐Ÿ—‚ Module & Package

Min-Ho Leeยท2020๋…„ 6์›” 27์ผ
0

Learn Python

๋ชฉ๋ก ๋ณด๊ธฐ
14/22
post-thumbnail

Saturday_June_27
.
.
.

โ—๏ธ Module? Package?

Module : ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค ๋“ฑ์„ ๋ชจ์•„๋†“์€ ํŒŒ์ผ.
Package : Module ํŒŒ์ผ์˜ ์ง‘ํ•ฉ(๋””๋ ‰ํ† ๋ฆฌ)๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๐Ÿ‘

์™œ ๋”ฐ๋กœ Module์ด๋‚˜ Package๋กœ ๋ฌถ์„๊นŒ?

1 - ๋‹ค๋ฅธ ํŒŒ์ด๋ฆฌ์—์„œ ์žฌ์‚ฌ์šฉ ํ•˜๋ ค๊ณ 
2 - ์ฝ”๋“œ๊ฐ€ ๊ธธ๋ฉด ์•ˆ ์˜ˆ์˜๋‹ˆ๊นŒ ๐Ÿ˜

โœ๏ธ Module ๋งŒ๋“ค๊ธฐ

ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ , ๋งŒ๋“  ํŒŒ์ผ ์•ˆ์— ์žฌ์‚ฌ์šฉ ํ•˜๊ณ ์‹ถ์€ ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค ๋“ฑ์„ ๊ตฌํ˜„ํ•˜๋ฉด ๋!

## my_module.py
my_module_var = 7

def my_module_func():
    return "Hello!"

class MyModuleClass:
    pass

my_module.py ๋ผ๋Š” ํŒŒ์ด์ฌ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ , ๊ฑฐ๊ธฐ์— my_module_var๋ผ๋Š” ๋ณ€์ˆ˜์™€ my_module_func์ด๋ผ๋Š” ํ•จ์ˆ˜, ๊ทธ๋ฆฌ๊ณ  MyModuleClass๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ •์˜ ํ•œ ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฌ๋ฉด ๋‚˜์ค‘์— ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์–ด๋–ป๊ฒŒ ํ•˜๋ƒ???

โ—๏ธ Import?

๊ทธ๋ ‡๋‹ค. Import๋ฅผ ์จ์ฃผ๋ฉด ๋œ๋‹ค ๐Ÿคฉ

import module_name

์ด๋ ‡๊ฒŒ import๋ฅผ ํ•˜๊ณ  importํ•  ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์ฃผ๋ฉด ๋œ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ๊ทธ ํŒŒ์ผ์—์„œ ์ •์˜ํ•œ ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค๋“ค์„ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ ์ฃผ์˜ ํ•  ์ ์€, module_name.py๋ผ๋Š” ํŒŒ์ผ์„ importํ•œ๋‹ค๊ณ 

import module_name.py

์ด๋ ‡๊ฒŒ ํ™•์žฅ์ž์ธ .py๊นŒ์ง€ ๋ถ™์ด๋ฉด ์•ˆ๋œ๋‹ค. ์กฐ์‹ฌํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.

์ž ์ด์ œ importํ•  ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š”๋ฐ ๊นŒ์ง€๋Š” ์„ฑ๊ณตํ–ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ง„์งœ๋กœ ์–ด๋–ป๊ฒŒ ์“ฐ๋Š๋ƒ?

module_name.my_variable
module_name.my_function()
module_name.MyClass

์ด๋Ÿฌํ•œ ํ˜•ํƒœ๋กœ importํ•œ ๋ชจ๋“ˆ์ด๋ฆ„.์›ํ•˜๋Š” ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค ๋“ฑ์„ ์จ์ฃผ๋ฉด ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

import๋ฅผ ํ•ด์คฌ๋Š”๋ฐ ๋ชจ๋“ˆ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ์จ์ค˜์•ผ ํ• ๊นŒ?

๋ชจ๋“ˆ ์ด๋ฆ„์„ ์•ž์— ๋ถ™์—ฌ์ค˜์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ํŒŒ์ด์ฌ์ด ์‚ฌ์šฉํ•  ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค ๋“ฑ์ด ์–ด๋Š ํŒŒ์ผ์„ ๋ด์•ผ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

import๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ํ•ด์ค„ํ…๋ฐ, ๊ทธ ์ค‘์— ์–ด๋–ค ๋ชจ๋“ˆ์ด ์ด ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

โ—๏ธ From Import?


ํŒŒ์ด์ฌ ๋‘๊ณ ๋ณด์ž

import๊ฐ€ ์•„๋‹Œ from import ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์˜ฌ ๊ฒฝ์šฐ, ๋ชจ๋“ˆ์ด๋ฆ„์„ ๋ถ™์ด์ง€ ์•Š์•„๋„ ๋ฐ”๋กœ ์›ํ•˜๋Š” ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค์˜ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ช…ํ™•ํ•  ๋•Œ from import๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฟ€ ๐Ÿฏ ์ด๋‹ค.

from my_module import *

print(my_module_var)
my_module_func()

์ด๋ ‡๊ฒŒ * ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋ฉด my_module์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ import ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์“ฐ๋Š” ๊ฒƒ์€ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค. ์ด์œ ๋Š”, Local Scope์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค์™€ ์ด๋ฆ„์ด ์ถฉ๋Œ์ด ๋‚ฌ์„ ๋•Œ, ๋งค์šฐ ๊ณค๋ž€ํ•˜๊ณ  ํ”ผ๊ณคํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋ฅผ ๋„์™€์ค„ ์นœ๊ตฌ์ธ as๋ฅผ ์†Œ๊ฐœํ•œ๋‹ค.

from my_module  import my_func as f1
from my_module2 import my_func as f2
from my_module3 import function_with_name_too_long as f3

f1()
f2()
f3()

๋ถˆ๋Ÿฌ์˜จ ์š”์†Œ๋“ค(๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค)๋“ฑ์˜ ์ด๋ฆ„์„ ์น˜ํ™˜ํ•ด์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

import my_module as m1

m1.my_module_func()

์ด๋ ‡๊ฒŒ ๋ชจ๋“ˆ ์ด๋ฆ„๋„ as๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ด๋ฆ„์œผ๋กœ ์น˜ํ™˜ํ•ด์„œ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿค” Package

์•ž์„œ ๋งํ–ˆ๋“ฏ, module๋ณด๋‹ค ๋” ํฌ๊ณ , ๋ณต์žกํ•œ ์ฝ”๋“œ๋ผ๋Š” ๊ฒƒ.

module์ด ๋‹จ์ˆœํ•œ ํŒŒ์ด์ฌ ํŒŒ์ผ์ด๋ผ๋ฉด ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ํ•œ ๊ณณ์— ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ฐœ๋…์ด ๋ฐ”๋กœ Package์ธ ๊ฒƒ์ด๋‹ค.

Package๋„ ์ผ๋ฐ˜ ๋ชจ๋“ˆ ์ฒ˜๋Ÿผ, importํ•˜์—ฌ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹ค๋งŒ ์ฐจ์ด์ ์€, 'ํด๋ž˜์Šค ๊ฐ์ฒด'๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฒ˜๋Ÿผ . ์œผ๋กœ ํ•ด๋‹น package์˜ ์›ํ•˜๋Š” ๋ชจ๋“ˆ์„ importํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

import pkg.mod1
from pkg.mod2 import func2

pkg.mod1.func2()
func2()
profile
๐Ÿ‡ Rabbit can take a rest, but ๐Ÿข turtle can't

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