.py 파일
을 의미합니다.모듈 불러오기
# 첫번째 방법
import 모듈이름
# 두번째 방법
from 모듈이름 import 함수/변수 이름
# 지양하세요
# local scope 변수/함수와 이름 충돌이 발생
# 충돌이 어디서 발생했는지 쉽지 않습니다.
from 모듈이름 import *
# 사용할 때엔 이렇게
함수이름()
print(변수이름)
.py 파일
여러개를 만들어 놓은 하나의 폴더입니다.패키지 불러오기
import 패키지.모듈이름
from 패키지.모듈이름 import 변수/함수
__init__.py
# 모듈이 필요한 파이썬 파일 내 작성하는 코드
from 패키지.모듈1 import 모듈1
from 패키지.모듈2 import 모듈2
from 패키지.모듈3 import 모듈3
이를 간편하게 해주는 것이 _init__.py
파일입니다.
모듈 3개와 __init__.py
파일을 같이 묶어 다시 하나의 디렉토리에 넣어줍니다.
이 때 __init__.py
는 빈 파일이 될 수도 있고, 모듈 3개의 경로를 담고 있는 파일일 수도 있습니다.
# 패키지.감싸는디렉토리.__init__.py (경로)
from .모듈1 import 모듈1
from .모듈2 import 모듈2
from .모듈3 import 모듈3
# 또는 함수, 변수명 제한하여 사용
from .모듈1 import 모듈1
from .모듈2 import 모듈2
from .모듈3 import 모듈3
__all__ = [모듈1, 모듈2, 모듈3]
이제 다른 파일에서 3개의 모듈을 사용하고 싶을 때 다음과 같이 사용하면 됩니다.
# 모듈7.py 파일에서 사용한다고 가정
import 감싸는디렉토리
모듈1()
모듈2()
모듈3()
# __all__ 사용
from 패키지.감싸는디렉토리 import *
모듈1()
모듈2()
모듈3()
모듈4() # <=== error 발생
결국 감싸는디렉토리
가 또 하나의 패키지로 사용됩니다.
sys.module
dictionary
형태로 이미 불러온 (import된) 모듈과 패키지를 저장하고 있습니다.built-in modules
Built-in
모듈들은 이미 파이썬에 포함되어 나오므로 파이썬이 쉽게 찾을 수 있습니다.sys.path
list
형태로 string 요소들을 가지고 있습니다.각 string 요소들은 다음 처럼 경로를 나타냅니다:
['',
'/Users/song-eun-u/anaconda3/bin',
'/Users/song-eun-u/anaconda3/lib/python36.zip',
'/Users/song-eun-u/anaconda3/lib/python3.6',
'/Users/song-eun-u/anaconda3/lib/python3.6/lib-dynload',
'/Users/song-eun-u/anaconda3/lib/python3.6/site-packages',
'/Users/song-eun-u/anaconda3/lib/python3.6/site-packages/aeosa',
'/Users/song-eun-u/anaconda3/lib/python3.6/site-packages/IPython/extensions',
'/Users/song-eun-u/.ipython']
[error] ModuleNotFountError
sys.path에서도 찾지 못하면 다음 에러를 리턴합니다.
sys
모듈을 import 하여 sys.module과 sys.path를 출력하고 수정할 수 있습니다.
import sys
print(sys.path)
print(sys.modules)
모듈이나 패키지를 import할 때 그 모듈의 경로를 작성해주어야 합니다.
절대경로 (Absolute path)
예시)
C:\Users\UserID\Desktop\test.txt
최상위루트/하위루트/그다음하위루트/파일이름...
상대경로 (relative path)
dot(.)
은 현재 파일의 위치를 의미합니다.dot * 2 (..)
은 상위 디렉토리로 이동하는 경로를 의미합니다.예시)
동일한 디렉토리의 "파일3"을 참조하는 경우
>> .파일3
상위 디렉토리의 "파일7"을 참조하는 경우
>> ../파일7
외부 "B디렉토리"의 "파일17"을 참조하는 경우
>> ../B디렉토리/파일17
자바스크립트를 공부하면서 변수나 함수를 다른 파일에서 가져와 사용할 때가 많았다.
특히 componene를 공유해야하는 리액트의 경우 더욱 많이 사용했던 것 같다.
몰라서 나중에 고생하는 것보다 기본을 다져놓고 시작하면 자바스크립트를 공부할 때와 달리 덜 헤매지 않을까,,🙄