
TIL#28 import error 상대경로 절대경로
상대경로와 절대경로에서 어떤 경우에 import에러가 나타나는지 살펴보자. import os print(os.path.abspath('.')) #현재 폴더의 절대경로를 물어보는 것 C:\Users\Jaesang Choi\Desktop\CALC #현재 폴더의 절..
higher77.tistory.com
main.py
from calculator.add_and_multiply import add_and_multiply if __name__ == '__main__': print(add_and_multiply(1,2))
multiplication.py
def multiply(a,b): return(a*b)
add_and_multiply.py
from calculator.multiplication import multiply def add_and_multiply(a,b): return multiply(a,b) + (a+b)
하위폴더 파일 import하기
<메인모듈 상관없음>
main.py를 기준으로 설명.
from calculator.add_and_multiply import add_and_multiply #함수를 가져옴 if __name__ == '__main__': print(add_and_multiply(1,2))
from calculator import add_and_multiply #모듈을 가져옴 if __name__ == '__main__': print(add_and_multiply.add_and_multiply(1,2))
동일폴더 파일 import하기
1) <메인모듈: main.py>일때
add_and_multiply.py가 multiplication.py를 import한다.

add_and_multiply.py
from calculator import multiplication #절대경로 모듈 def add_and_multiply(a,b): return multiplication.multiply(a,b) + (a+b)
from calculator.multiplication import multiply #절대경로 함수 def add_and_multiply(a,b): return multiply(a,b) + (a+b)
<메인모듈이 main.py>일 때는 os.getcwd()의 값이
C:\Users\Jaesang Choi\Desktop\CALC으로 나와서 calculator부터 절대경로를 설정해줘야한다.
from .multiplication import multiply #상대경로 함수 def add_and_multiply(a,b): return multiply(a,b) + (a+b)
from . import multiplication #상대경로 모듈 def add_and_multiply(a,b): return multiplication.multiply(a,b) + (a+b)
2) <메인모듈: add_and_multiply.py>일때
add_and_multiply.py가 multiplication.py를 import한다.

import multiplication #모듈 def add_and_multiply(a,b): return multiplication.multiply(a,b) + (a+b)
from multiplication import multiply #함수 def add_and_multiply(a,b): return multiply(a,b) + (a+b)
<메인모듈: add_and_multiply.py>는 os.getcwd()의 값도
C:\Users\Jaesang Choi\Desktop\CALC으로 나오지만 그건 atom으로 폴더를 열 때
CALC를 열어서 그렇게 나오는 것이다.
atom으로 새창에서 add_and_multiply.py가 있는 calculator폴더를 열면
os.getcwd()의 값이
C:\Users\Jaesang Choi\Desktop\CALC\calculator로 제대로 나온다.
그래서 바로 multiplication을 적는 것이다.
상위폴더 파일 import하기
<메인모듈 상관없음>
multiplication.py를 기준으로 설명.

devide.py를 추가했다.
def devi(a,b): return(a/b)
calculator폴더 안의 mutuplication.py에서 devide.py를 불러오고 싶을 때
#def multiply(a,b): # return(a*b) import sys, os sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__)))) import devide #모듈 print(devide.devi(6,2)) #3.0
#def multiply(a,b): # return(a*b) import sys, os sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__)))) from devide import devi #함수 print(devide.devi(6,2)) #3.0
실행파일 경로의 1단계 상위 폴더를 구하는 코드는 os.path.dirname(os.path.abspath(os.path.dirname(__file__))) 이다.
2단계 상위 폴더는
os.path.dirname(os.path.abspath(os.path.dirname(os.path.abspath(os.path.dirname(__file__))))))이다.

calculator/mutuplication.py에서 calculator2/devide.py를 불러오고 싶을 때
#def multiply(a,b): # return(a*b) import sys, os sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__)))) from calculator2 import devide #모듈 print(devide.devi(6,2)) #3.0
#def multiply(a,b): # return(a*b) import sys, os sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__)))) from calculator2.devide import devi #함수 print(devi(6,2)) #3.0
다른경로의 파일 import
다른경로의 파일을 import할 경우
import sys sys.path.append(다른 경로의 파일)
sys.path.append에 다른경로의 path를 넣어주면 된다.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
sys.path.append를 사용하지 않고 하는 방법은
시스템의 환경변수 PYTHONPATH에 프로젝트를 추가하는 방법이 있다.
이 방법은 모든 파이썬 프로젝트에서 built-in모듈을 그냥 import 할 수 있는 것과 마찬가지의 원리로
시스템의 파이썬 컴파일러가 기본적으로 참조하게 될 패키지 모듈에 자신의 프로젝트를 추가하는 형태이다.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
os.path.dirname(os.path.abspath(os.path.dirname(__file__)))의미
print(os.path.dirname(__file__)) print(os.path.abspath(os.path.dirname(__file__))) print(os.path.dirname(os.path.abspath(os.path.dirname(__file__)))) C:\Users\Jaesang Choi\Desktop\CALC\calculator C:\Users\Jaesang Choi\Desktop\CALC\calculator C:\Users\Jaesang Choi\Desktop\CALC 경로 중 디렉토리명만 얻기 os.path.dirname("C:/Python35/Scripts/pip.exe") # "C:/Python35/Scripts" 특정 경로에 대해 절대 경로 얻기 os.path.abspath(".\Scripts") #"C:\Python35\Scripts" os.path.abspath(".") #점(.)은 현재 디렉토리(작업 폴더)를 의미함으로 이것은 현재 디렉토리의 절대 경로를 얻는것이다. 현재 수행중인 코드를 담고 있는 파일의 위치 path __file__
'Python > Today I learned' 카테고리의 다른 글
TIL#35 객체, 클래스, 인스턴스 관계정리(매우 중요) (0) | 2021.05.20 |
---|---|
TIL#34 클래스 self (0) | 2021.05.20 |
TIL#33 CSV 파일 읽기 및쓰기 (0) | 2021.05.19 |
TIL#32 파일 읽기 및 쓰기 (0) | 2021.05.19 |
TIL#31 외장함수 (0) | 2021.05.19 |