맨날 까먹어서 쓰는 글
다른 사람이 배포해놓은 라이브러리를 다운받아서 사용하면 그 안에 많은 모듈이 있다.
0. 라이브러리 vs 모듈 vs 패키지
내가 사용하기 위해 만든 다양한 함수,변수,클래스 등을 묶어서 .py로 만들면 모듈이라고 하고
이들을 묶어서 __init__.py와 함께 만들어서 폴더에 넣으면 패키지 (init.py이 없으면 패키지로 인식이 안되는 문제가 있다.)
패키지와 모듈들을 묶어서 하나로 만들면 라이브러리라고 한다.
numpy나 pandas 같은 것들이 파이썬 패키지이고 그 안에 다양한 모듈들이 있다.
이를 모아서 더 큰 라이브러리를 만들 수 있다. 예를 들면 Matplotlib, PyTorch 등.
이것보다 더 큰 개념을 framework라고 하는데 이는 보통 개발자들이 사용하는 툴이라고 한다.
1. 파일 경로 확인
import sys
print(sys.path) # 탐색할 경로들
print(sys.modules) # system이 보유한 모듈들
import os
print(os.getcwd()) # 현재 경로
print(os.path.dirname(os.getcwd())) # 현재 경로를 기준으로 상위 경로
2. 경로 추가
2-1. 일시적 방법
경로는 코드로 다음과 같이 추가 가능하다.
import os,sys
sys.path.append(os.path.dirname(os.getcwd()))
또는 PYTHONPATH 환경 변수에 내가 원하는 경로를 추가하는 방법도 있다.
import os
os.environ["PYTHONPATH"] = "경로"
vscode를 사용한다면, vscode에 있는 기능으로 폴더 추가도 가능하다. 빨간 밑줄친 곳을 눌러서 경로추가하면 .vscode 안에 settings.json 파일이 추가된다.
# .vscode/settings.json 파일 안에
{
"python.analysis.extraPaths": [
"./jax"
]
}
3. 경로 상의 문제
나는 보통 가상환경을 만들고 그 안에서 코드를 사용하는데 원하는 모듈을 가져올 때 문제가 발생했다.
from jax.config import config
라고 할 때 가상환경 상의 jax 먼저 살펴보기 때문에 내가 가져온 라이브러리 내부의 jax 폴더를 살펴보지 않는다.
sys.modules (현재 환경 상의 모듈과 패키지) > built-in modules (파이썬 내장 모듈) -> sys.path (현재 디렉토리, PYTHONPATH 환경 변수 경로, 직접 추가한 경로)
순서로 살펴보기 때문에 위처럼 경로를 추가해도 내가 가상환경에 설치한 패키지와 내가 작업하는 폴더 상의 패키지 중 가상환경을 먼저 선택하게 되어있다.
이 순서를 바꿔보고 싶었으나 방법을 찾을 수 없어서 중복되는 가상환경 패키지는 삭제하는 것을 택했다.
참고자료
https://velog.io/@hwang-eunji/python-import%EC%9D%98-%EA%B2%80%EC%83%89-%EC%88%9C%EC%84%9C
python import의 검색 순서
Python module 이해하기Python pacakage 이해하기에서 살펴본 import 에 대해 더 알아보자. import를 통해 모듈과 패키지를 불러오면 어디서 어떻게 가져오는 걸까? 아래 목록을 보자.sys.modulesbuilt-in modulessys.
velog.io
https://learnpython.com/blog/python-modules-packages-libraries-frameworks/
Python Modules, Packages, Libraries, and Frameworks
Let’s discuss the difference between Python modules, packages, libraries, and frameworks – in simple terms and with multiple examples.
learnpython.com
'프로그래밍 Programming > 파이썬 Python' 카테고리의 다른 글
[Python] matplotlib colormap, colorbar 사용 방법 (0) | 2024.12.07 |
---|---|
[에러기록] moviewriter ffmpeg unavailable; using pillow instead. (0) | 2024.04.17 |
[matplotlib] matplotlib에서 latex 사용 오류 (0) | 2024.01.26 |
[matplotlib] 그래프 색상/마커 다르게 그리기 (0) | 2023.09.18 |
[Python] MCMC Sampling library (0) | 2023.08.24 |