Python 과제

노광오·2020년 6월 8일
0

Python

목록 보기
10/13

Assignment 1

sys.modules 와 sys.path의 차이점을 서술해 주세요.

위 두개의 차이점을 서술하기 전에, 파이썬은 모듈/package를
1. sys.modules
2. built-in modules
3. sys.path
위의 순서 대로 찾는다.

sys.modules

  • 파이썬이 제일먼저 모듈이나 패키지를 찾는곳
  • 딕셔너리구조
  • import 되있는 모듈과 패키지 저장 (다시 찾지 않아도 된다.)

sys.path

  • 모듈과 패키지를 1,2를 찾고 마지막으로 sys.path를 찾는다.
  • 리스트구조(string 요소)
  • 처음의 리스트 요소부터 마지막까지 찾는다.
  • 파이썬에 포함되어있는 built-in modules
  • sys.path에서도 모듈을 발견하지 못하면 ModuleNotFoundError 에러를 리턴

Assignment 2

sys 도 import 해야하는 모듈입니다. 파이썬은 sys 모듈의 위치를 어떻게 찾을 수 있을까요?

  • 파이썬은 스크립트 실행시 PYTHONPATH, 환경설정, 변수, 위의 모듈들을 순차적으로 실행한다.
  • 이러한 3RD 파티는 설치시 자동으로 절대경로(""STRING타입)가 설정이되어 찾기 쉽다.

Assignment 3

Absolute path와 relative path의 차이점을 서술해 주세요.

Absolute path(절대경로)

  • 절대경로는 프로젝트 폴더 최상위(root)기준으로 경로가 표시된다.
  • 절대경로는 최상위루트부터 경로를 표시해야해서 경로를 길게 표시해야하는 단점이 있다.

relative path(상대경로)

  • 상대경로는 import된 파일기준으로 경로가 표시되며, 절대 경로의 단점을 보완하기 위해서 상대경로를 사용한다.
  • 상대경로의 단점은 파일의 위치가 변경되었을 때, 찾을 수 없다는 점이 있다.

Assignment 5

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를 사용해야하며

결과는 위와 같이 나오게 된다.

Assignment6

절대경로를 사용한 경우

상대경로를 사용한 경우

위에서 relative imports는 현재 모듈의 이름을 기반으로합니다. 기본 모듈의 이름은 항상 "main"이므로 Python 응용 프로그램의 기본 모듈로 사용하려는 모듈은 항상 absolute imports를 사용해야합니다.

이 위치에서 실행하려는 모듈의 이름이 main이 아닌것도 있지만, 그렇다 하더라도 main모듈을 기본 모듈로 사용하기 위해서는 상대경로를 사용해서는 프로그램을 돌릴 수 없다.

Assignment7

__init__.py의 역할

__init__.py 파일은 해당 디렉터리가 패키지의 일부임을 알려주는 역할을 합니다.
디렉터리에 __init__.py 파일이 없다면 패키지로 인식되지 않을 수도 있습니다.

python3.3 버전부터는 __init.py__파일이 없어도 패키지로 인식한다. 하지만 하위버전 호환을 위해 __init.py__파일을 생성하는 것이 안전한 파일이다.

__init.py__에서 가장 중요한 변수는 __all__이라는 리스트 변수이다.
__all__은 만약 from 패키지명 import*를 사용하는 경우에 __all__에 들어있는 모듈들만을 불러온다는 뜻이다.

0개의 댓글