파이썬 모듈
파이썬 모듈은 별거 아니다. 그냥 파일이다. 개발한 파일을 다른 곳에서 사용하는 방법이다.
이를 통해 여러 파일에 분리해서 개발할 수 있다.
물론 분리된 파일들을 여러 곳에서 재활용하면 더 좋은 것이고...
기본적인 내용은 다음 링크에서 확인하자.
위 링크를 정리하면 아래와 같다. (함수나 클래스나 접근법은 동일하다)
# 아래는 moduleX.py 파일을 가져오는 것이다.
import moduleX
# 아래는 moduleX.py의 함수 funcA와 funcB를 호출하는 것이다.
moduleX.funcA()
moduleX.funcB()
# 특정 함수만 import 해올 수 있다. 그려먼 funcA()처럼 바로 호출 가능하다.
from moduleX import funcA
funcA()
# 아래 문장으로 여러 함수 혹은 전체를 가져올 수 있다.
from moduleX import funcA, funcB
from moduleX import *
파이썬 패키지
패키지는 모듈의 집합이다. 그냥 디렉터리라고 생각하자.
대문자를 디렉터리, 소문자를 파일이라고 가정해 보자.
# 아래는 A 디렉터리 밑, B 디렉터리 밑, C 디렉터리 밑에 x.py 파일에 func 함수
A.B.C.x.func
위 함수를 사용하는 방법은 아래와 같다.
# 일반적인 사용
import A.B.C.x
A.B.C.x.func()
# 조금이라도 타이핑을 줄이고 싶을때
from A.B.C import x
x.func()
# 모듈내에 특정 함수만 임포트
from A.B.C.x import func
func()
# 다만 아래는 동작하지않는다. 도트연산은 모듈까지만 인식한다고...
import A.B.C.x.func
# 만약 A.D 패키지 내의 y 모듈이 x 모듈을 사용하기 위해서는 아래와 같이 사용한다고 (상대경로)
from ..B.C.x import func
__init__. py는 최신 버전에서는 필요 없다고 하는데 아래와 같은 패키지 레벨의 동작을 정의하는데 필요하다.
자세한 건 링크를 확인하자.
- 패키지 레벨 변수 및 함수 정의
- 패키지 내 모듈을 미리 import
- 패키지 초기화
- __all__ 을 통한 패키지 디폴트 import 지정
파이썬 패키지 내 모듈을 실행하는 법
일반적으로는 최상위 모듈로 실행을 할 것이라서 문제가 되지 않는다.
그런데 만약에 A.D 패키지에서 y 모듈을 별도로 실행하고 이 y 모듈이 A.B.C.x를 사용할 경우, import가 꼬이게 된다.
import 하기 위해서는 기준 path가 중요한데 이것을 python에서 인식하지 못한다고...
자세한 내용은 여기를 참조하자.
간단히 아래와 같이 python 인터프리터에게 기준 path를 알려주면 해결된다고 한다.
$ python3 -m A.D.y
참고로 y모듈의 코드는 아래와 같다. 상대경로 import의 경우, 'from... import...' 형태를 사용한다.
from ..B.C.x import func
func()
개발환경이 visual studio code일 경우에는 y.py를 직접하면 에러를 만난다.
아래와 같이 간단히 실행해볼 수 있다.
실행-구성추가 메뉴 선택
모듈 메뉴 선택
모듈명 입력
그 이후에는 그냥 [ctrl + F5] 단축키로 실행 가능하다.
그런데 이 방법은 해당 모듈만 실행하게 된다.
일반적인 방법을 위해서 이런 저런 짓을 해봤는데 아래 두 에러로 엄청난 고통을 겪었다.
- ImportError: attempted relative import with no known parent package
- ImportError: attempted relative import beyond top-level package
그냥 상대경로는 포기하고 절대경로를 사용하자.
root 디렉토리를 PYTHONPATH에 추가하고 절대경로로 import 하면 된다.
그런데
Visual Studio Code에서는 PYTHONPATH를 처리를 해주지 않는다고 한다. (링크)
아래 두줄을 추가해주면 된다고..
"cwd": "${fileDirname}",
"env": {"PYTHONPATH": "${workspaceFolder}${pathSeparator}${env:PYTHONPATH}"}
우선은 벌레/세모 버튼을 누르고... 'launch.json 파일 만들기'를 클릭한다.
그리고 'Python 파일'을 클릭한다.
그리고 자동생성되는 launch.json 파일에 위 두 라인을 추가하자.
이제 상대경로 대신 절대경로 import로 바뀐 y모듈의 코드는 아래와 같다.
from A.B.C.x import func
func()
단축키로 실행해보면 잘되는 것을 확인할 수 있다.
참고자료
'소프트웨어 > 파이썬 (python)' 카테고리의 다른 글
파이썬(Python) virtualenv 정리 (0) | 2023.07.27 |
---|---|
파이썬 코드를 실행파일로 만들기 (0) | 2023.07.25 |