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 |