Python package

jayden·2020년 6월 4일
0

python

목록 보기
2/3

1. sys.modules 와 sys.path의 차이점

2. 파이썬 sys 모듈의 위치를 찾는 방법

  • 파이썬이 sys 모듈을 찾는 순서는 가장 먼저 내장 모듈(sys.modules, built-in modules)을 찾고 다음 sys.path에서 sys 모듈을 검색하게 된다. sys.path는 스크립트를 포함하는 디렉토리, PYTHONPATH, 설치 기본값 등을 포함하고 있습니다.

3. Absolute path와 relative path의 차이점

  • Absolute path는 최상단 디렉토리를 기준으로 path 설정
  • Relative path는 실행파일이 위치한 디렉토리를 기준으로 path를 설정

5. main.py에서 상대경로로 add_and_mutiply 를 임포트 했을 때 발생하는 에러를 확인

  • main.py에서 add_and_mutiply를 상대경로로 임포트 했을 때 아래와 같은 에러가 발생한다.
    (ImportError: attempted relative import with no known parent package)

  • 에러가 발생하는 이유는 파이썬 응용 프로그램의 메인 모듈로 사용될 목적의 모듈들은 반드시 절대경로로 임포트를 사용해야 한다.

  • 절대경로로 임포트할 경우 문제없이 임포트가 가능했다.

6. add_and_multiply.py에서 multiply함수를 절대경로와 상대경로도 각각 임포트 해보고 main 모듈과 차이점을 생각해 보기

(1) 절대경로와 상대경로 모두 실행이 되지 않고 오류가 발생한다. 절대경로는 패키지를 인식하지 못하고 상대경로는 알려진 부모패키지가 없이 상대경로 import를 실행한다는 오류가 출력된다.

(2) main 모듈과의 차이점은 name 변수를 확인하는 조건문이 있어서 main 모듈을 실행할 때는 name 변수의 조건문이 이를 만족시켜 print 함수를 실행시킨다. add_and_multiply.py 모듈은 절대경로와 상대경로 모두 정상적으로 작동이 가능하다.

7. init.py 파일의 역할

(1) 'init.py' 파일은 해당 디렉터리가 패키지의 일부라는 것을 알려주는 역할을 한다.
그러나 python3.3 버전부터는 init.py 파일이 없어도 패키지로 인식한다(PEP 420). 하지만 하위 버전 호환을 위해 init.py 파일을 생성하는 것이 안전한 방법이다.

(2) init.py에서 from .모듈 import 변수, 함수, 클래스 또는 from .모듈 import * 형식으로 작성했다면 패키지를 가져오는 스크립트에서는 패키지.함수() 형식으로 사용할 수 있다.

(3) 패키지의 init.py에서 from .모듈 import 로 모든 변수, 함수, 클래스를 가져오면 패키지 외부에 공개하고 싶지 않은 것까지 공개되는데 이때는 all에 공개할 모듈, 변수, 함수, 클래스를 리스트 형태로 지정해주면 된다. all이라는 이름 그대로 모든 것()을 공개할 때의 목록을 정하는 것이다.

profile
DevOps 너로 정했다!

0개의 댓글