sys.modules 와 sys.path의 차이점을 서술해 주세요.
위 두개의 차이점을 서술하기 전에, 파이썬은 모듈/package를
1. sys.modules
2. built-in modules
3. sys.path
위의 순서 대로 찾는다.
sys 도 import 해야하는 모듈입니다. 파이썬은 sys 모듈의 위치를 어떻게 찾을 수 있을까요?
Absolute path와 relative path의 차이점을 서술해 주세요.
main.py에서 상대경로로 add_and_mutiply 를 임포트 했을 때 발생하는 에러를 확인하고
다음의 파이썬 공식 문서를 참고해서 main module 에서는 패키지의 모듈을 어떻게 임포트 해야하는지 블로깅 해주세요.
패키지를 가져올 때 Python sys.path은 패키지 하위 디렉토리를 찾을 때 디렉토리를 검색합니다 .
패키지가 하위 패키지로 구조화되면 absolute imports 를 사용하여 형제 패키지의 하위 모듈을 참조 할 수 있습니다. 예를 들어, 모듈이 패키지 sound.filters.vocoder에서 echo모듈 을 사용해야하는 경우을 sound.effects사용할 수 있습니다 .from sound.effects import echo
import 문의 형식 으로 relative imports를 작성할 수도 있습니다 . 이러한 import는 선행 점을 사용하여 relative imports와 관련된 현재 및 상위 패키지를 나타냅니다. 로부터 예를 들어 모듈, 당신은 사용할 수 있습니다.
relative imports는 현재 모듈의 이름을 기반으로합니다. 기본 모듈의 이름은 always "main"이므로 Python 응용 프로그램의 기본 모듈로 사용하려는 모듈은 항상 absolute imports를 사용해야합니다.
따라서 main.py를 실행시키기 위해서는
absolute imports를 사용해야하며
결과는 위와 같이 나오게 된다.
위에서 relative imports는 현재 모듈의 이름을 기반으로합니다. 기본 모듈의 이름은 항상 "main"이므로 Python 응용 프로그램의 기본 모듈로 사용하려는 모듈은 항상 absolute imports를 사용해야합니다.
이 위치에서 실행하려는 모듈의 이름이 main이 아닌것도 있지만, 그렇다 하더라도 main모듈을 기본 모듈로 사용하기 위해서는 상대경로를 사용해서는 프로그램을 돌릴 수 없다.
__init__.py
의 역할
__init__.py
파일은 해당 디렉터리가 패키지의 일부임을 알려주는 역할을 합니다.
디렉터리에__init__.py
파일이 없다면 패키지로 인식되지 않을 수도 있습니다.
python3.3 버전부터는 __init.py__
파일이 없어도 패키지로 인식한다. 하지만 하위버전 호환을 위해 __init.py__
파일을 생성하는 것이 안전한 파일이다.
__init.py__
에서 가장 중요한 변수는 __all__
이라는 리스트 변수이다.
__all__
은 만약 from 패키지명 import*
를 사용하는 경우에 __all__
에 들어있는 모듈들만을 불러온다는 뜻이다.