파이썬 개발을 하면서 가장 헷갈리는 개념이 디렉토리 참조법이다. 자바에서는 그냥 대충 import package.directory.fileName; 과 같은 형식으로 지정해주면 바로 가져다 쓸 수 있는데 반해, 파이썬은 그렇지 않은가보다.
아무튼 세 가지의 케이스에 대해 정리/적용해보았고 그 내용은 다음과 같다.
패키지 구성은 다음과 같은 형식으로 되어있다고 가정한다.
project ⌞ A_folder - a_file_1.py - a_file_2.py ⌞ B_folder - b_file_1.py ⌞ C_folder - c_file_1.py ⌞ D_folder - d_file_1.py |
1. 동일 경로상의 import
A_folder 내부의 a_file_1.py 에서 a_file_2.py 파일을 import 하기위해서는 다음과 같이 작성한다.
1
|
from . import a_file_2.py
|
cs |
또는
1
|
import a_file_2.py
|
cs |
이거는 쉽다.
2. 하위 폴더의 import
B_folder 내부의 b_file_1.py 에서 C_folder 내부의 c_file_1.py를 import 하기 위해서는 다음과 같이 작성한다.
1
|
from C_folder import c_file_1.py
|
cs |
이정도는 크게 어렵지 않다.
3. 상위 폴더의 import
여기서부터 많이 헷갈리게 된다.
C_folder 내부의 c_file_1.py 에서 D_folder 내부의 d_file_1.py를 import 하기 위해서는 꽤 여러가지 방법이 있으나, 일단 내가 해결한 방법을 위주로 작성해본다.
1
2
3
4
|
import os
import sys
sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(__file__))))
from D_folder import d_file_1.py
|
cs |
여기에서 os.path.dirname(os.path.abspath( 는 한단계 상위를 의미하며, C_folder의 한단계 상위인 B_folder로 이동함을 의미한다. B_folder 내부에 D_folder가 위치해있으므로, from d_folder 을 해주는 것.
마찬가지로 c_file_1.py 에서 A_folder 를 참조하기 위해서는 os.path.dirname(os.path.abspath를 두 번 작성해주면 될 것이다.
java를 하다와서 그런지, from~ 쪽도 잘 이해가 안갔고 __file__과 같은 옵션네이밍(?)의 정의도 익숙하지 않다. 일단은 해결했으니까, 다음 개발로 넘어가야지...
'어장 Develop' 카테고리의 다른 글
[Windows11] Openssh를 이용한 sftp 서버 생성 (0) | 2024.03.12 |
---|---|
[Python] unknown error: session deleted because of page crashfrom tab crashed (0) | 2022.04.12 |
[Mac] chromedriver 설치부터 (1) | 2022.04.10 |
[MacBook] M1 MacBookPro 에 openjdk설치 (0) | 2022.04.09 |
[http1.1] Expect: 100-continue (0) | 2021.03.18 |