파이썬 import란?
외부 모듈 또는 함수를 import 시킨다는 것은 결국 해당 파일의 경로를 찾을 수 있어야 한다는 말입니다.
pip로 설치한 패키지는 현재 가상환경(또는 기본경로) 내에 있는 특정 폴더 안에서 찾게 됩니다.
보통 아나콘다 가상환경의 경우
"C:\사용자\사용자명\anaconda3\envs\가상환경명\Lib\site-packages" 폴더 안에 pip install 한 패키지의 파일들이 저장됩니다.
하지만 프로젝트를 하며 직접 만든 파일의 경로는 직접 지정한 경로에 있기 때문에 import를 할 경우 찾지 못하게 됩니다. 특히 복잡한 폴더 경로를 가진 프로젝트라면 더더욱 그렇습니다.
"no module named 'noexist'" 와 같은 에러가 발생하면 해당 경우입니다.
보통 파이썬에서 import를 하게 되면 가장 먼저 위의 경로에서 파일을 찾고, 없으면 sys.path에서 폴더 경로를 검색합니다. 해당 경로에 내가 원하는 파일 또는 폴더를 등록해주면 해결됩니다.
import sys
sys.path
한 파일 내에서 import 폴더, 파일 경로를 등록하는 방법
가장 간단한 방법은 하나의 모듈(파일) 안에 필요한 폴더 또는 파일의 경로를 직접 등록해주는 방법입니다.
만약 "aaa" / "bbb" / "ccc" 와 같이 폴더 트리가 여러개라면 상위 폴더 하나만 아래와 같이 등록해줘도 사용이 가능합니다.
import sys
sys.path.append("aaa의 경로")
from bbb.aaa import 클래스 또는 함수
from bbb impora aaa 등등
가장 상위 폴더인 "aaa"를 등록해놨기 때문에 해당 경로에서 "bbb" 또는 "bbb\ccc"를 찾아서 import할 파일을 찾을 수 있게 됩니다.
만약 그냥 ccc만 필요하다면 해당 폴더 경로를 sys.path에 등록해주면 됩니다. 원리만 알면 간단합니다.
문제는 이렇게 등록하는 방법은 한 프로세스에서만 적용되기 때문에 여러 파일을 작성해서 테스트할 경우에는 모든 파일에 같은 코드들을 넣어줘야 하는 번거로움이 생긴다는 것입니다.
물론 실제 서비스가 한 프로세스에서 돌아간다면 문제가 없을 수 있겠지만 보통 개발할 때는 매우 귀찮습니다.
import 경로 sys.path에 디폴트로 등록하기
sys.path에 일일이 등록해주기 귀찮다면 가장 루트 폴더를 sys.path에 디폴트로 등록해두고 사용할 수 있습니다.
먼저 메모장을 하나 열어줍니다. 그리고 저장위치를 사용하는 가상환경의 site-packages 폴더로 지정합니다.
폴더는 보통 "c:\사용자\사용자명\anaconda3\envs\가상환경명\Lib\site-packages" 위치에 있습니다.
파일명은 아무렇게나, 확장자는 ".pth"로 저장합니다.
그리고 내용에 원하는 경로를 작성한 뒤 저장해줍니다. 여러 개 경로를 등록하고 싶다면 윈도우의 경우 그냥 엔터치고 여러 줄로 작성하면 됩니다.
등록전 sys.path 입니다.
등록 후 sys.path 결과입니다.
이렇게 등록된 패스 아래에 있는 패키지(폴더)나 파일은 from, import 로 찾아서 사용할 수 있게 됩니다.
대신 위와 같이 언더바( _ ) 나 점( . )등 특수문자는 안되는 경우가 많으니 루트폴더 하위부터 패키지들은 그냥 순수한 영어로만 만드는 것이 좋습니다.
'파이썬 > 개발TIP' 카테고리의 다른 글
아나콘다 가상 환경 설정 방법 (0) | 2024.04.24 |
---|
댓글