리눅스나 맥에서 터미널로 제공되는 쉘은 엄청난 편의성을 제공해준다. 윈도우즈 유저로 가장 부러운 부분. git을 직접 다운받아 설치하면 git bash가 깔리는데 요게 꽤 쏠쏠했기에 더 찾아봤다.
일단, MS가 공식적으로 지원하는걸로 WSL(Windows Subsystem for Linux)가 있다. 리눅스 터미널 쉘을 가장 근접해서 느낄 수 있고, 공식지원이라 좋지만, exe를 실행하려면 확장자까지 써줘야하고 환경변수 공유등 좀 복잡했다.
git bash가 좀 더 제대로 동작하면 괜찮을거 같아서 옛날 Cygwin쓰던 기억을 떠올리며 찾아봤는데, 깨끗하게 제거하는 uninstalller를 따로 제공하지 않아 깜짝 놀랐다. 별다른 업데이트도 잘 안보이던데, Cygwin은 이제 퇴물이라 잘 안쓴다고.
그래서 찾은게 MSYS2. Cygwin과 유사하게 Mingw64에 기반하고 있다. git bash도 Mingw64위에 git사용을 위한 최소한의 구현만 되어 있는거 같다. 어쨌든, 현재로선 최선은 MSYS2 라는 결론.
환경변수도 자동으로 공유가 되며, 윈도우용 실행파일도 cmd에서 쓰듯 바로 사용할 수 있다. 패키지 관리도 packman으로 가능.
.bashrc
VS Code나 PyCharm 공통으로 수정해야할 부분이 있다. 바로 ~/.bashrc. 별다른건 아니고, python 사용시 현재 디렉토리에서 venv 폴더가 있으면 가상환경을 activate 해주도록 만드는 부분이다. 파이썬으로 작업시 수동 activate할 필요가 없어 편리하다. 기본 윈도우즈 cmd나 powershell을 사용하면 VS Code나 PyCharm이 알아서 해주는 기능인데, MSYS2로 교체하면 이부분이 작동하지 않아 추가하는 작업이다.
내용은 ~/.bashrc에 다음의 짧은 스크립트를 추가.
if [ -d "./venv" ]; then
source ./venv/Scripts/activate
fi
VS Code
WSL이나 Powershell, cmd 등은 자동감지해서 터미널 선택목록에 뜨는데, MSYS2나 git bash는 뜨지 않았다. 처음엔 shell launcher라는 확장프로그램을 썼으나, 개발환경과 맞물리려면 integrated shell을 변경해야 했다. ctrl + shift + p 를 눌러 커맨드 팔레트를 띄우고 settings를 입력해서 찾아들어간다. 잘보면 settings.json을 직접 편집하는 메뉴가 있다. 거기에서 “terminal.integrated.shell.windows” 항목을 찾아서 다음처럼 인자와 환경변수까지 추가했다.
"terminal.integrated.shell.windows": "F:\\msys64\\usr\\bin\\bash.exe",
"terminal.integrated.shellArgs.windows": [
"--login",
],
"terminal.integrated.env.windows":
{
"MSYSTEM": "MINGW64",
"MSYS2_PATH_TYPE": "inherit",
"CHERE_INVOKING": "1"
},
이렇게 설정하면, integrated shell 실행시 msys2가 뜨게된다.
PyCharm
PyCharm에서 터미널 설정하는 부분은 File > Settings > (Setting Dialog)Tools > Terminal
부분이다.
Shell path 항목에 다음과 같이 넣어준다. 꼭, 전체 경로를 쌍따옴표로 묶어 인자와 구별해줘야 한다.
"F:\msys64\usr\bin\bash.exe" --login -i
다음 Environment variables에 다음을 추가한다.
MSYSTEM="MINGW64";MSYS2_PATH_TYPE="inherit";CHERE_INVOKING="1"
문제가 아직 남아있긴한데, 이 유저 환경변수 부분이 프로젝트당 설정인듯하다. 프로젝트를 바꿨더니, msys2가 터미널로 뜨긴 하는데, 환경변수 부분이 날아간걸로 보인다. 이걸 글로벌 환경변수로 설정하면 되는지 아직 테스트 해보지 못했다. 아뭏튼 이걸로 완료. 개발툴에서 드는 bash shell 편~안~ 😀
Update 2020.04.06
다음의 환경변수들을 시스템 환경변수에 추가해주면 개별적으로 설정할 필요가 없는걸 확인했다. 관련 내용은 링크 참조
https://zyzyz.github.io/en/2017/10/Integrate-MSYS2-into-Cmder/MSYSTEM="MINGW64";
MSYS2_PATH_TYPE="inherit";
CHERE_INVOKING="1"
Update2 2020.04.06
PyCharm에선 시스템 환경변수인 PATH를 중간에 씹어먹는 증상이 보인다. venv로 설정한 python은 되는데, 시스템에 설치된 python 경로도 못찾는다. 정확하게는 터미널 쉘에서 env 명령으로 확인해 볼 수 있다. ORIGINAL_PATH라고 뜨는게 있는데, 시스템 환경변수에 추가한게 반영이 안되어 있음. 쩝.