IntelliJ에서 Python 기본 Working Directory를 프로젝트 폴더로 설정하는 방법
IntelliJ에서 Python 기본 Working Directory를 프로젝트 폴더로 설정하는 방법
IntelliJ IDEA에서 Python 프로젝트를 실행할 때 기본 Working Directory를 프로젝트 폴더로 설정하고 싶다면, $ContentRoot$를 사용하는 방법을 추천합니다. 이 글에서는 $ContentRoot$를 활용하여 문제를 해결하는 방법을 단계별로 설명합니다.
설정 방법
Step 1: Run/Debug Configurations 열기
- IntelliJ 상단 메뉴에서 Run > Edit Configurations를 클릭합니다.
- Edit configuration templates… 클릭 (template을 변경해야, 새 configuration 생성시 자동으로 적용이 됩니다)
- python 선택
Step 2: Working Directory 설정
- Working directory 필드에
$ContentRoot$를 입력합니다. - 설정을 저장합니다.
$ContentRoot$란?
$ContentRoot$는 IntelliJ IDEA에서 사용하는 경로 변수(Path Variable)로, 현재 모듈의 콘텐츠 루트 디렉토리를 의미합니다. 일반적으로 프로젝트의 최상위 디렉토리와 동일합니다.
IntelliJ에서 지원하는 주요 경로 변수:
| 변수 | 의미 |
|---|---|
$ContentRoot$ |
현재 모듈의 콘텐츠 루트 디렉토리 |
$ModuleFileDir$ |
.iml 파일이 있는 디렉토리 |
$ProjectFileDir$ |
.idea 폴더가 있는 프로젝트 루트 디렉토리 |
$FilePath$ |
현재 편집 중인 파일의 절대 경로 |
$FileDir$ |
현재 편집 중인 파일의 디렉토리 |
왜 Working Directory 설정이 중요한가?
Python 프로젝트에서 Working Directory가 올바르게 설정되지 않으면 여러 문제가 발생할 수 있습니다.
파일 경로 문제
상대 경로로 파일을 읽거나 쓸 때, Working Directory가 예상과 다르면 FileNotFoundError가 발생합니다.
# Working Directory가 프로젝트 루트일 때는 정상 작동
with open('data/config.json', 'r') as f:
config = json.load(f)
# Working Directory가 다른 곳이면 FileNotFoundError 발생
모듈 임포트 문제
Python의 모듈 검색 경로는 Working Directory에 영향을 받습니다. Working Directory가 프로젝트 루트가 아니면 패키지 임포트가 실패할 수 있습니다.
# 프로젝트 구조:
# project/
# src/
# main.py
# utils/
# helper.py
# main.py에서 utils를 임포트하려면
# Working Directory가 project/ 또는 src/에 있어야 합니다
from utils.helper import some_function
기존 Configuration에도 적용하기
Template을 변경하면 새로 생성되는 Configuration에만 적용됩니다. 이미 만들어진 기존 Configuration의 Working Directory를 일괄 변경하려면 다음 방법을 사용하세요:
- Run > Edit Configurations를 엽니다
- 변경할 Configuration을 선택합니다
- Working directory 필드를
$ContentRoot$로 변경합니다 - 여러 개를 변경해야 하면 각각 수정하거나,
.idea/workspace.xml파일에서 일괄 수정할 수 있습니다
다른 언어에서의 설정
이 방법은 Python뿐 아니라 IntelliJ에서 지원하는 다른 언어에도 동일하게 적용됩니다:
- Java/Kotlin: Run/Debug Configuration의 Working directory 필드
- Node.js: Node.js Run Configuration의 Working directory 필드
- Go: Go Run Configuration의 Working directory 필드
- Ruby: Ruby Run Configuration의 Working directory 필드
각 언어의 Configuration Template에서 동일하게 $ContentRoot$를 설정하면 됩니다.
팁: .env 파일과 함께 사용
많은 Python 프로젝트가 .env 파일을 프로젝트 루트에 두고 환경변수를 관리합니다. Working Directory가 프로젝트 루트로 설정되어 있으면 python-dotenv 등의 라이브러리가 자동으로 .env 파일을 찾을 수 있습니다.
from dotenv import load_dotenv
# Working Directory가 프로젝트 루트이면 자동으로 .env 파일을 찾음
load_dotenv()
IntelliJ의 EnvFile 플러그인을 설치하면 Run Configuration에서 .env 파일을 직접 지정할 수도 있습니다.
트러블슈팅: Working Directory 관련 흔한 문제
문제 1: 테스트 실행 시 Working Directory가 다름
JUnit이나 pytest 같은 테스트 프레임워크를 실행할 때 Working Directory가 기대와 다른 경우가 있습니다. IntelliJ는 테스트 Configuration에 별도의 Working Directory를 설정할 수 있습니다.
해결 방법:
- Run > Edit Configurations에서 테스트 Configuration 선택
- Edit configuration templates… 클릭
- JUnit (또는 pytest 등) 선택
- Working directory를
$ContentRoot$로 설정
문제 2: 멀티 모듈 프로젝트에서의 Working Directory
멀티 모듈 프로젝트에서는 $ContentRoot$가 각 모듈의 루트를 가리킵니다. 프로젝트 전체의 루트를 사용하고 싶다면 $ProjectFileDir$를 사용하세요.
project-root/ ← $ProjectFileDir$
├── module-a/ ← module-a의 $ContentRoot$
│ └── src/
├── module-b/ ← module-b의 $ContentRoot$
│ └── src/
└── .idea/
문제 3: Gradle/Maven 프로젝트에서 Working Directory 불일치
Gradle이나 Maven으로 실행할 때와 IntelliJ에서 직접 실행할 때 Working Directory가 다를 수 있습니다. 이 경우 빌드 도구의 설정과 IntelliJ 설정을 일치시켜야 합니다.
Gradle 설정 예시:
// build.gradle
tasks.withType(JavaExec) {
workingDir = rootProject.projectDir
}
프로젝트 유형별 권장 설정
Python 프로젝트
| 설정 항목 | 권장 값 | 이유 |
|---|---|---|
| Working directory | $ContentRoot$ |
상대 경로 파일 접근 일관성 |
| Python interpreter | 프로젝트별 가상환경 | 의존성 격리 |
| Add content roots to PYTHONPATH | 체크 | 모듈 임포트 용이 |
| Add source roots to PYTHONPATH | 체크 | src 디렉토리 인식 |
Java/Kotlin 프로젝트
| 설정 항목 | 권장 값 | 이유 |
|---|---|---|
| Working directory | $ContentRoot$ 또는 $ProjectFileDir$ |
리소스 파일 접근 |
| Use classpath of module | 실행 대상 모듈 선택 | 올바른 클래스패스 |
| JRE | 프로젝트 SDK | 일관된 런타임 환경 |
Node.js 프로젝트
| 설정 항목 | 권장 값 | 이유 |
|---|---|---|
| Working directory | $ContentRoot$ |
package.json 위치 기준 |
| Node interpreter | 프로젝트별 nvm 경로 | Node 버전 관리 |
| Node parameters | --env-file=.env |
환경변수 로딩 (Node 20+) |
커맨드라인과 IDE의 Working Directory 통일
IDE에서 실행할 때와 터미널에서 실행할 때 Working Directory가 다르면 혼란이 발생합니다. 코드에서 Working Directory에 의존하지 않는 방식으로 경로를 처리하는 것이 가장 바람직합니다.
# Working Directory에 의존하지 않는 경로 처리 (Python)
import os
# 현재 스크립트 기준 상대 경로
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
config_path = os.path.join(BASE_DIR, '..', 'config', 'settings.json')
# pathlib 사용 (더 Pythonic한 방식)
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent
config_path = BASE_DIR / '..' / 'config' / 'settings.json'
// Working Directory에 의존하지 않는 경로 처리 (Java)
// 클래스패스에서 리소스 로딩
InputStream is = getClass().getResourceAsStream("/config/settings.json");
이렇게 하면 IDE의 Working Directory 설정에 관계없이 안정적으로 파일에 접근할 수 있습니다. 다만 프로젝트의 특성에 따라 Working Directory 설정이 반드시 필요한 경우도 있으므로, $ContentRoot$ 설정은 기본으로 해두는 것이 좋습니다.
Comments