module: 2. 명사 컴퓨터 모듈(특정 기능을 하는 컴퓨터 시스템이나 프로그램의 단위)
import
또는 from import
을 사용한다.import module
import module1, module2, module3
import module as my_module
from full_module import some_class
from full_module import some_function
from full_module import some_variable
from full_module import some_class, some_function, some_variable
from random import randrange as revelation_of_god
def god_bless_me():
round = 6
lottery = []
while round != 0:
lottery.append(revelation_of_god(1, 46))
round -= 1
print(f"Let the believer have light! \n {lottery}")
god_bless_me()
Let the believer have light!
[38, 14, 14, 21, 22, 6]
package: 1. = parcel 2. (포장용) 상자; 포장물 3. 포장하다
import package.module
import package.module1, module2
import package as my_package
from full_package.module import some_class
from full_package.module import some_function
from full_package.module import some_variable
from full_package.module import some_class, some_function, some_variable
# sys.module은 파이썬이 모듈을 제일먼저 검색하는 dictionary 이다.
Python 3.8.2 (default, Jul 16 2020, 14:00:26)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.modules
{'sys': <module 'sys' (built-in)>, 'builtins': <module 'builtins' (built-in)>, '_frozen_importlib': <module 'importlib._bootstrap' (frozen)>, '_imp': <module '_imp' (built-in)>, '_warnings': <module '_warnings' (built-in)>, '_frozen_importlib_external': <module 'importlib._bootstrap_external' (frozen)>, '_io': <module 'io' (built-in)>, 'marshal': <module 'marshal' (built-in)>,
... (생략) ...
path[0]
은 파이썬 인터프리터에 의해서 실행된 스크립트를 포함하고 있는 경로이다.path[0]
는 ''
이 되고, 파이썬에게 현재 디렉토리부터 모듈을 검색하도록 한다.# 쉘에서 바로 파이썬 인터프리터를 실행하여 sys.path의 첫 번째 요소가 '' 인 경우
Python 3.8.2 (default, Jul 16 2020, 14:00:26)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/usr/local/lib/python3.8/dist-packages', '/usr/lib/python3/dist-packages']
>>>
파이썬은 모듈을 import하기 위해 다음의 순서대로 검색을 수행한다.
그런데 파이썬은 애초에 sys 모듈이 어디에 있는줄 알고 불러와서 사용하는 걸까?
(built-in)
으로 표기된 모듈들은 built-in 모듈이다.파이썬 공식문서를 참조하여 작성
from randome import randrange
form .there import cvs
import
하는 경우 파이썬은 현재 모듈의 __name__을 기반으로 동작한다.ImportError: attempted relative import with no known parent package
에러가 출력된다.from .multiplication import multiply
# from calculator.multiplication import multiply
def add_and_multiply(a,b):
return multiply(a,b) + (a+b)
print("name of add_and_multiply.py: ", __name__)
def multiply(a,b):
return(a*b)
print("name of multiplication: ", __name__)
# 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))
# absoulte path
from calculator.add_and_multiply import add_and_multiply
if __name__ == '__main__':
print(add_and_multiply(1,2))
# 실행 결과
# name of multiplication: calculator.multiplication
# name of add_and_multiply.py: calculator.add_and_multiply
# 5
ImportError: attempted relative import with no known parent package
relative path
from .calculator.add_and_multiply import add_and_multiply
if __name__ == '__main__':
print(add_and_multiply(1,2))
# 실행 결과 -> 에러 발생
# from .calculator.add_and_multiply import add_and_multiply
# ImportError: attempted relative import with no known parent package
from calculator.multiplication import multiply
def add_and_multiply(a,b):
return multiply(a,b) + (a+b)
print("name of add_and_multiply.py: ", __name__)
# 실행 결과
# name of multiplication: calculator.multiplication
# name of add_and_multiply.py: __main__
from .multiplication import multiply
def add_and_multiply(a,b):
return multiply(a,b) + (a+b)
print("name of add_and_multiply.py: ", __name__)
# 실행 결과
# from .multiplication import multiply
# ImportError: attempted relative import with no known parent package
initialization: 초기치 설정
initialize: 초기 내용을 설정하다
init
는 initialization 내지는 initialize의 의미이다.init
는 시스템 초기화라는 의미에서init 0
는 시스템 종료init 6
는 시스템 재기동의 의미이다.