[Windows] 환경 변수란? 환경 변수의 모든 것
여러 버전의 파이썬 설치를 하며 환경변수의 중요성에 대해 알게 되었고 공부하며 얻은 정보들을 아래에 정리해둔다. 혹시라도 환경변수가 꼬여서 원하는 명령어가 실행되지 않는 사람들이 보면 도움이 될 것이라 생각한다.
목차
환경 변수 정의
환경 변수 확인 방법
사용자 변수와 시스템 변수
사용자 변수와 시스템 변수의 우선순위
예외 - Path 변수(시스템 path 우선 적용)
Path 변수는 변수 내 값들을 앞에서부터 차례로 읽어 리턴한다.
환경 변수 정의
환경 변수란 위키피디아의 정의에 따르면 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는, 동적인 값들의 모임이다.
위키피디아 환경 변수 설명
아래는 윈도우에서 쓰이는 환경변수값들을 정리해놓은 것이다.
변수 | 자료값 |
%ALLUSERSPROFILE% | (윈도 XP) C:\Documents and Settings\All Users |
(윈도 비스타) C:\ProgramData | |
%APPDATA% | (윈도 XP) C:\Documents and Settings\{사용자 이름}\Application Data |
(윈도 비스타) C:\Users\{사용자 이름}\AppData\Roaming | |
%COMPUTERNAME% | {컴퓨터 이름} |
%COMSPEC% | C:\Windows\System32\cmd.exe |
%HOMEDRIVE% | C: |
%HOMEPATH% | (윈도 XP) \Documents and Settings\{사용자 이름} |
(윈도 비스타) \Users\{사용자 이름} | |
%PATH% | C:\Windows\System32\;C:\Windows\;C:\Windows\System32\Wbem |
%PATHEXT% | (윈도 XP) .COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS ; .WSF: .WSH |
(윈도 비스타) .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC | |
%PROGRAMFILES% | C:\Program Files |
%PROMPT% | 현재 명령 프롬프트 포맷에 대한 코드. 보통 이 코드는 $P$G로 되어 있다. |
%SYSTEMDRIVE% | 윈도 XP 루트 디렉터리를 포함하고 있는 드라이브. 보통 C: |
%SYSTEMROOT% | 윈도 디렉터리. 보통 C:\Windows로 되어 있으며, 공식적으로는 C:\WINNT이다. |
%TEMP% 및 %TMP% | (윈도 XP) C:\Documents and Settings\{사용자 이름}\Local Settings\Temp |
(윈도 비스타) C:\Users\{사용자 이름}\AppData\Local\Temp | |
%USERNAME% | {사용자 이름} |
%USERPROFILE% | (윈도 NT 4, 2000) C:\windows\Profile |
(윈도 XP) C:\Documents and Settings\{사용자 이름} | |
(윈도 비스타) C:\Users\{사용자 이름} | |
%WINDIR% | C:\Windows |
환경 변수 확인 방법
환경 변수는 다음 두 방법으로 확인할 수 있다.
1. cmd에서의 set 명령어
2. 내 PC >> 속성 >> 고급 시스템 설정 >> 고급 탭 >> 환경 변수
1번 set 명령어는 확인하기 편하고 편집도 가능하지만 편집하려면 2번이 편하다.
1. cmd에서의 set 명령어
2. "내 PC" >> "속성" >> "고급 시스템 설정" >> "고급 탭" >> "환경 변수"
위에서 사용자 변수와 시스템 변수를 확인하고 편집할 수 있다.
사용자 변수와 시스템 변수
사용자 변수란 로그인한 사용자에게 적용되는 환경 변수이다. 하나의 시스템 안에 A, B 두 사용자가 있을 때, A 사용자가 지정한 환경 변수는 B 사용자가 접근할 수 없고 그 반대도 마찬가지이다.
시스템 변수란 해당 시스템을 사용하는 사용자 모두에게 동일하게 적용되는 변수이다. A, B 두 사용자 모두 하나의 같은 시스템을 쓰기 때문에 동일한 변수를 적용 받는다.
사용자 변수와 시스템 변수의 우선순위
대부분의 사용자 변수는 시스템 변수보다 우선적으로 적용된다. 이는 아래의 예시로 확인할 수 있다. 아래 사진을 보면 사용자 변수와 시스템 변수 모두 'TEST' 라는 이름의 변수가 있지만 값은 다르다.
이를 위에서 확인한 set 명령어로 확인해보면 아래처럼 사용자 변수가 적용된 것으로 나온다. 동일한 이름의 다른 값의 변수는 보이지 않는다. 즉 이는 "사용자 변수가 시스템 변수보다 우선 적용된다"는 의미이다.
예외 - Path 변수(시스템 path 우선 적용)
먼저, "Path 변수는 변수 내 값들을 위에서부터 차례로 읽어 리턴한다"는 것을 알고 시작하자.
사용자 변수와 시스템 변수 모두 'Path' 라는 변수가 있다. 이 변수는 다른 형태의 변수와 다소 다른데, 편집을 눌러보면 차이가 있다.
여기서는 위에서 언급한 "사용자 변수가 시스템 변수보다 우선 적용된다"는 통하지 않는다. 그 이유는 운영체제가 윈도우이기 때문인데, 윈도우에서는 "사용자 path의 경우 시스템 path 뒤에 붙기 때문이다.
The user path is appended to the system path.(MicroSoftKnowledgeBase)
이는 다음 명령어를 통해 path 변수를 확인해보면 알 수 있다.
set path
참고)set 뒤에 텍스트를 덧붙이면 해당 텍스트를 포함하는 변수만 리턴한다.
이렇게 시스템 Path가 앞에 있고 사용자 path가 뒤에 붙어 나오는 것을 확인할 수 있다.
Path 변수는 변수 내 값들을 앞에서부터 차례로 읽어 리턴한다.
이제 실제로 위에서부터 차례로 리턴하는지 확인해보자. 아래는 확인을 위한 셋팅이다.
아래는 각각의 환경에서 path 확인과 python 명령어가 위치한 경로 확인, python을 실행했을 때의 결과를 나타낸 것이다.
각각의 결과를 살펴보면 왼쪽 사진에서는
첫 번째 박스에서 WindowsApps path가 뒤에 위치하는 것을,
두 번째 박스에서 python 경로에서 WindowsApps 경로가 뒤에 있음을,
세 번째 박스에서 python 명령어 실행 시 커맨드에서 python 3.10 버전이 실행됨을 확인할 수 있다.
오른쪽 사진에서는
첫 번째 박스에서 WindowsApps path가 앞에 위치하는 것을,
두 번째 박스에서 python 경로에서 WindowsApps 경로가 앞에 있음을,
세 번째 박스에서 python 명령어 실행 시 Microsoft Store 의 python 다운로드 창이 열림을 확인할 수 있다.
이렇게 "Path 변수는 변수 내 값들을 위에서부터 차례로 읽어 리턴한다"는 것을 확인할 수 있다.
이렇게 환경변수, 사용자 변수, 시스템 변수, 각각의 우선순위와 path 간의 우선순위에 대해 알아보았다. 생각보다 이를 체계적으로 설명하는 자료가 없었고, MSKB(MicroSoftKnowledgeBase)의 자료도 아카이브를 통해 알 수 있었다. 이를 계기로 앞으로 윈도우 환경변수 설정으로 인한 어려움은 당분간 없을 것으로 예상된다.
이 글이 도움이 되기를 바랍니다.