본문 바로가기
대학원 공부/programming language

Python : package 에서 상위 모듈 import 하기.

by 월곡동로봇팔 2020. 5. 19.

dir 구조

다음과 같은 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

 

파이썬 relative package

render.py from ..sound.echo import echo_test def render_test(): print("render") echo_test() render_test() echo.py def echo_test(): print("echo")graphic 과 sound 디렉터리는 동일한 깊이라서 부모디렉터리(..)을 이용하라고 했는데 "at

hashcode.co.kr

 

댓글