본문 바로가기

헛공부

Git Bash 에서 'code' 명령이 수행되지 않는 문제 해결방법

⚠️ 이 포스팅은 git-bash와 anaconda가 충돌을 일으키는 문제에 대해 이야기하고 있습니다.

들어가며:

다들 아시다시피 vscode는 터미널 상에서 'code' 명령으로 간단하게 띄울 수 있습니다.

git을 사용해야 하니 뭐 당연하게 git for windows를 설치해 줍니다.

 

개인적으로 vscode에서 기본 터미널로 사용되는 파워쉘이나, cmd는 별로 맘에 들지 않아서

git for windows에 패키지로 설치되는 git-bash를 사용합니다.

 

하지만 anaconda를 설치하고, git-bash 에 적용시키기 위해 cmd(anaconda prompt) 창에서 다음을 입력하고

(bash)
C:\> conda init bash
⚠️ anaconda를 설치하였다고 하더라도 내장 cmd나 powershell 환경을 건드리지 않으므로, cmd나 powershell로는 conda가 수행되지 않습니다.
⚠️ 따라서 위의 명령은 anaconda에서 제공하는 anaconda prompt 등에서 수행하셔야 합니다.

 

새 git-bash 터미널을 띄우면 (base) 가 안 뜹니다.

아니 왜? 하면서 사용자의 git-bash환경을 잡아주는 .bash_profile을 살펴봅니다.

그림 1. 이런, 초기화 경로가 잘못되었네요.

 

네 초기화 경로가 잘못되었습니다...

/cygdrive/~ 로 시작되면 안 됩니다(...)

⚠️ 이 부분에 있어서는 cygwin 쪽에서 /cygdrive 와 관련된 변경사항이 있어 보입니다. 사실 옛날에는 됐거든요.

 

해당 부분을 삭제하고 /c/ 로 시작될 수 있도록 다음과 같이 바꿔주세요.

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
if [ -f'/c/ProgramData/anaconda3/Scripts/conda.exe' ]; then
    eval "$('/c/ProgramData/anaconda3/Scripts/conda-exe' 'shell.bash' 'hook')"
fi
# <<< conda initialize <<<
⚠️ anaconda를 전체 사용자용(all user)으로 설치한 경우 %PROGRAMDATA%를 사용하므로 다음과 같이 나타납니다.
⚠️ 사용자 전용 (user only)로 설치하셨다면 아래 경로 중간이 %USERPROFILE%  밑으로 들어가 있을 것이니 참고하시기 바랍니다.

 

다시 새 git-bash 터미널 창을 띄웁니다.

그러면 (base) 가 떠 있는 것을 볼 수 있습니다.

 

하지만 code 명령어를 입력하는 순간,

그림 2. anaconda 설치 후 code가 수행되지 않는 모습.

 

네, code 명령이 먹지를 않습니다...

 

원인:

git-bash 상에서 conda 환경이 activate되면서,

%PROGRAMDATA%/anaconda3/* 에 있는 디렉터리들을 환경변수 PATH에 추가하게 되는데,

이 중 git bash에서 제공하는 기본 도구들을 anaconda3에 있는 것들로 덮어써지면서 생기는 문제입니다.

 

해당 문제에 대한 자세한 내용은 다음을 보세요 (깁니다):

 

더보기

앞서의 code 명령 실행에서 보시면 아시겠지만, code 명령이 가리키는 경로가 이상하다는 것을 느끼실 수 있습니다. 

 C:\ProgramData\anaconda3\Library\

가 앞에 붙어있는 형태라는 것이지요.

 

하지만 이것을 보고 대부분은 'vscode'가 동작하지 않으니 'vscode'에서의 문제 정도로 생각하고 있는 것 같습니다.

밑에 버그 보고사례도 그렇고요.

 

그래서 vscode issue #187392를 보시면 추가적인 내용을 확인해 보실 수 있는데,

I can temporarily fix this by commenting out lines 56 and 57 in this file:C:\Users\mryan\AppData\Local\Programs\Microsoft VS Code\bin\code

 

네 저도 그래서 확인해 봤습니다.

elif [ -x "$(command -v cygpath)" ]; then
    CLI=$(cygpath -m "$VSCODE_PATH/resources/app/out/cli.js")

 

cygpath 명령이 존재하면, cygpath를 이용해서 $VSCODE_PATH를 변환하라는 말입니다.

 

저도 여기까지는 vscode에 제보해야 되나 싶었습니다만,

여기서 이상함을 느낍니다.

 

아니 왜 잘 돌아가는 프로그램이 conda activate만 되면 안되는 것인가. 

그래서 진짜 그렇다고? 하면서 cygpath를 확인해보기 시작했습니다.

그림 3. conda activate/deactivate에 따라 다르게 반응하는 cygpath 명령.

 

문제는 저 cygpath라는 녀석이었습니다.

conda activate, deactivate에 따라 "cygpath -m"가 다른 결과를 내놓는게 문제였던 것입니다!

 

여기서 멈추지 않습니다. 그럼 저 놈은 어디에 숨어있는지 찾아봅니다:

아나콘다가 추가하는 디렉터리 하나하나를 검사해 봅니다.

/c/ProgramData/anaconda3:
/c/ProgramData/anaconda3/Library/mingw-w64/bin:
/c/ProgramData/anaconda3/Library/usr/bin: <- this directory have 'cyg*, msys2'tools
/c/ProgramData/anaconda3/Library/bin:
/c/ProgramData/anaconda3/Scripts:
/c/ProgramData/anaconda3/bin:

 

네 그렇습니다.

conda activate는 anaconda 실행에 필요한 디렉터리들을 PATH의 맨 앞에 추가하게 됩니다.

저 녀석이 PATH상 앞에 있기 때문에, git-bash의 cygpath를 가로채 간 것입니다.

 

아니 그래서 어떻게 다른 놈인가 계속 파 봅니다.

그림 4. git(2.45.2)에 포함된 git-bash의 cygpath. 3.4.10 버전

 

네 버전이 3.4.10이네요. 그럼 아나콘다는?

그림 5. anaconda 2024.02-1에 포함된 cygpath. 2.5.0 버전

 

2.5.0! (8년 전 ㄷㄷ)

 

그렇습니다.

anaconda 에서 뭐 여기까지 신경 쓸 필요는 없겠습니다만, 아무래도 이 버전에서는 뭔가 버그가 있는 모양입니다.

같은 입력을 넣었는데 결과가 다르게 나옵니다. 어느 샌가 눈치채고 cygpath는 업데이트가 된 것 같습니다.

(현재로서 그 시점은 못 찾겠습니다. 아시는 분은 제보 좀.)

 

해결: 

git-bash가 구동될 때 환경 초기화를 수행하는 .bash_profile을 다음과 같이 수정해 줍니다.

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
if [ -f'/c/ProgramData/anaconda3/Scripts/conda.exe' ]; then
    eval "$('/c/ProgramData/anaconda3/Scripts/conda-exe' 'shell.bash' 'hook')"
fi
# <<< conda initialize <<<

# /usr/bin/ 을 앞에 추가.
export PATH='/usr/bin/':$PATH

사실 마지막 줄 하나 넣었습니다.

⚠️ 일반적으로 PATH 수정을 별로 추천하지는 않습니다. 다만 이번의 경우와 같이 답이 없는 경우라면 어쩔 수 없는 겁니다.
⚠️ 사실 대부분의 환경 구축 문제에서 PATH의 수정은 거의 치트키입니다.(...)

결론:

사실 이 문제를 일으키려면,

vscode를 사용하며, git-bash를 주로 사용하는 사람이 anaconda를 설치하여야 합니다.

 

즉,

anaconda - vscode만 사용한다던가,

git-bash - vscode 만 사용한다던가,

(뭐 그럴 일은 없겠지만)

anaconda - git-bash 만 사용하는 경우에서는

위와 같은 문제를 겪을 일이 없습니다.(...)

 

단지 제가 기본 편집기로 vscode를 쓰고, windows상에서 git-bash 터미널을 vscode의 기본 터미널로 사용하는 것이 문제인데,

종종 이렇게 anaconda를 써야 하는 경우가 생겨 환경을 잡다 보니 이런 문제가 있다는 사실을 알게 되었습니다.

 

이 문제에 대한 해결 방법에 대해 찾을 방도가 없어서 이렇게 긴- 포스팅을 하게 되었습니다.

 

(추가) 해당 문제는 vscode issue에 두 차례정도 올라온 적이 있습니다.

https://github.com/microsoft/vscode/issues/187392

 

Code fails to launch from Git Bash Windows 11 · Issue #187392 · microsoft/vscode

Type: Bug Running Git bash in Windows Terminal, (base) conda environment is active. Command code . returns the following error: node:internal/modules/cjs/loader:1013 throw err; ^ Error: Cannot find...

github.com

https://github.com/microsoft/vscode/issues/191133

 

VSCode fails to launch from git bash on windows · Issue #191133 · microsoft/vscode

Type: Bug This used to work for quite a long time until recently. Not sure when this breaking change was triggered. My usual workflow is to open code from a conda environment, whether its from cmd,...

github.com

하지만 이게 vscode 문제도 아니고, 해결해 줄 이유도 딱히 없기에, 둘 다 종료(closed) 된 상태입니다.

 

그래서 아나콘다 이슈에 제보하고 왔습니다.

언젠가 업데이트가 되어서 자동으로 해결되면 좋겠습니다.(...)

https://github.com/ContinuumIO/anaconda-issues/issues/13399

 

anaconda 'cygpath' return wrong path on git bash terminal in windows 10 · Issue #13399 · ContinuumIO/anaconda-issues

Checklist I added a descriptive title. I searched through existing issues and couldn't find a solution or duplicate issue. I searched on the web (e.g. Google) and didn't find any helpful informatio...

github.com