대학원 공부/programming language
Python : package 에서 상위 모듈 import 하기.
월곡동로봇팔
2020. 5. 19. 15:57
다음과 같은 dir 구조를 가지고 있다고 해보자.
1. os, sys module로 상위 dir import 하기
import os, sys
sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__))))
"""
['C:\\Users\\ADmin\\anaconda3\\envs\\text\\project\\text_mining',
'C:\\Users\\ADmin\\anaconda3\\envs\\text\\python36.zip',
'C:\\Users\\ADmin\\anaconda3\\envs\\text\\DLLs',
'C:\\Users\\ADmin\\anaconda3\\envs\\text\\lib',
'C:\\Users\\ADmin\\anaconda3\\envs\\text',
'C:\\Users\\ADmin\\AppData\\Roaming\\Python\\Python36\\site-packages',
'C:\\Users\\ADmin\\anaconda3\\envs\\text\\lib\\site-packages',
'C:\\Users\\ADmin\\anaconda3\\envs\\text\\lib\\site-packages\\win32',
'C:\\Users\\ADmin\\anaconda3\\envs\\text\\lib\\site-packages\\win32\\lib',
'C:\\Users\\ADmin\\anaconda3\\envs\\text\\lib\\site-packages\\Pythonwin',
"""
"""
['C:\\Users\\ADmin\\anaconda3\\envs\\text\\project\\text_mining',
'C:\\Users\\ADmin\\anaconda3\\envs\\text\\python36.zip',
'C:\\Users\\ADmin\\anaconda3\\envs\\text\\DLLs',
'C:\\Users\\ADmin\\anaconda3\\envs\\text\\lib',
'C:\\Users\\ADmin\\anaconda3\\envs\\text',
'C:\\Users\\ADmin\\AppData\\Roaming\\Python\\Python36\\site-packages',
'C:\\Users\\ADmin\\anaconda3\\envs\\text\\lib\\site-packages',
'C:\\Users\\ADmin\\anaconda3\\envs\\text\\lib\\site-packages\\win32',
'C:\\Users\\ADmin\\anaconda3\\envs\\text\\lib\\site-packages\\win32\\lib',
'C:\\Users\\ADmin\\anaconda3\\envs\\text\\lib\\site-packages\\Pythonwin',
'C:\\Users\\ADmin\\anaconda3\\envs\\text\\project']
"""
위 코드를 입력하게되면,
print(os.path.dirname(os.path.abspath(os.path.dirname(__file__)))) # C:\Users\ADmin\anaconda3\envs\text\project
print((os.path.abspath(os.path.dirname(__file__)))) # C:\Users\ADmin\anaconda3\envs\text\project\text_mining
print(os.path.dirname(__file__)) # None
이 코드의 abspath 때문에 부모 상위 dir 로 가게된다.
따라서 path에 상위 dir가 추가가 되는 것이다.
만약 상위에 상위 dir를 참조하고 싶다하면, 저 code를 한 번 더 적어주면 된다.
2. from --- import --- 할 때, 전체 dir부터 적어주기.
from project.utils.ToolSet import OsTool, StringTool
위에처럼 code를 복잡하게 적을 필요 없이, 그냥 처음 부모 dir 부터 적어주면 된다.
https://hashcode.co.kr/questions/7132/%ED%8C%8C%EC%9D%B4%EC%8D%AC-relative-package