조금은 어려운 개념인 Module과 path에 대해 알아보자아!
: 변수나 함수, 클래스 등을 모아놓은 파일.
import < 모듈 이름>
<모듈 이름>, <모듈에서 사용하길 원하는 변수/ 함수 / 클래스 이름>
my_module.my_module_func() : my_module의 my_module_func 함수를 호출
from ... import... keyword
를 사용해 모듈을 불러올 수 있다.*
을 사용하면 모듈의 모든 요소가 import 되지만,import as
키워드로 새로운 이름을 준다! from my_module import my_module_func, my_module_var
print(my_module_var)
my_module_func()
from my_module import * : 한 줄로 표현하면 깔-끔
ex) import as 사용하기from my_module import My_func as f1
from my_module2 import My_func as f2
from my_module3 import function_with_name_long as f3
import my_module as m1
m1.my_module_func()
모듈과 마찬가지로 다른 파일에서 불러와 사용하는 개념이지만 모듈보다 크고 복잡한 코드!
여러 파일에 나누어져있는 코드들도 하나의 모듈로 불러와 사용할 수 있게 해주는 것이 패키지.
Package는 파이썬 파일들로 이루어져있는 디렉토리가 하나의 Package가 되며, 디렉토리의 이름이 Package의 이름이다!
사용 시, import로 불러오며, 클래스 객체를 사용할 때 처럼 원하는 모듈을 import 해야한다!
import pkg.mod1
from pkg.mod2 import func2
pkg.mod1.func2()
func2()
초기 설정이 필요할 때 __init__.py
파일을 통해 가능.
: Package 안에 init.py 파일이 있으면 package import 시 코드들이 자동으로 실행됨
__init__.py
파일의 역할 :
# __init__.py
from .mod1 import func2
.# main.py
from pkg import func2
func2()
Package에서 Import 할 수 있는 변수/함수/클래스 제한
: 함수가 패키지 내부에서 import 되어 사용되는 것을 막기 위해 __all__.py
변수 지정 가능
__all__.py
변수의 defalut 값은 모든 함수/ 변수 / 클래스.
그렇기에 변수를 따로 정의해 import 될 수 있는 요소를 제한할 수 있으며,
__all__.py
변수는 string 값의 요소를 가지고 있는 list!
import 되길 원하는 요소를 string으로 list에 선언해주면 된다.
ex)
.#__init__.py
from .mod1 import func2
from .mod2 import func3
__all__ = ['func2' , 'func3' ]
.#main.py
from pkg import +
func2()
func3()
sys.modules -> bulit-in-modules -> sys.path
3-1. sys.modules
3-3. sys.path
3-4. Absolute path와 relative path
ex) 프로젝트 예시
Absolute path를 사용해 package1과 package2를 import하면?
Absolute path 경로 표현하기
my_app => package2 => subpackage1 => module5.py
my_app/package2/subpackage1/module5.py : 리눅스의 directory 경로 형식
my_app\package2\subpackage1\module5\.py : 윈도우 형식
my_app.package2.subpackage1.module5.py : 파이썬의 경로 표현 방식
(my_app)은 이미 프로젝트 안에 있으므로 생략 가능
파이썬의 경로를 from import keyword를 사용해 import 하게 되면?
from package2.subpackage1.module5 import fucntion2
Relative path 예시
ex) package2의 module3에서 package2의 class1과 package2의 하위 package인 subpackage1의 module5의 function2 함수를 import 하려고 한다면?
. dot
은 import가 선언되는 파일의 현재 위치를 가르킴.
현재 위치에서부터 원하는 모듈의 경로만 선언해주면 됨!
.. dot
2개도 사용이 가능함 => 상위 디렉토리로 가는 경로로 사용됨
Assignment
1. sys.modules
와 sys.path
의 차이점을 서술해 주세요.
:
sys.modules
을 보고,sys.path
에 지정되어 있는 경로들을 확인해서 찾는다! 못찾으면 ModuleNotFoundError
를 리턴함2. sys
도 import
해야하는 모듈입니다. 파이썬은 sys
모듈의 위치를 어떻게 찾을 수 있을까요?
: list의 경로를 하나하나 확인하며 해당 경로에 import 하고자 하는 package가 위치해 있는지 확인하며 찾아낸다!
3. Absolute path와 relative path의 차이점을 서술해 주세요.
calculator
패키지 만들기 => 추후 포스팅 진행 예정!