대학원 공부/programming language

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

월곡동로봇팔 2020. 5. 19. 15:57

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