shebang: /usr/bin/env python3 vs /usr/bin/python3

예전부터 이 둘간에 무슨 차이가 있는 건지 궁금했었는데, 며칠 전에 확실히 알게 되었다.
간단하게 말하면, 나혼자만 쓸 지, 아니면 누구나 쓸 수 있게 할 지의 문제다.

/usr/bin/python3 는 우분투 계열이라면 문제없이 쓸 수 있다. 왜냐? 그 위치에 실행파일(정확하게는 심볼릭 링크)이 자리잡고 있기 때문이다.

ll /usr/bin/python3
lrwxrwxrwx 1 root root 9 2020-03-13 21:20 /usr/bin/python3 -> python3.8

그러나, 이게 모든 *Nix 계열에서 동일하게 적용된다고 보기는 어렵다.
대신, /usr/bin/env python3 로 해주면, env 로 인해 python3 는 경로에 자동으로 포함되고, 그 경로에 있는 python3 를 실행해줌으로써 직접 경로를 설정한 /usr/bin/python3 와 같은 결과를 얻을 수 있게 된다.

~/.local/lib/python3.8/site-packages 에 있는 *.py 를 살펴보니, /usr/bin/python3 라고 쓰여진 파일은 하나도 없었다. 모두 env 를 사용했는데, 이게 나름대로 업계 표준(?)인가보다.
지금까진 그냥 직접 경로를 입력하는 식을 써왔는데, 앞으로는 env 로 가는게 맞겠네.
사실, env 를 일부러 안 쓴게 아니고, 뭔지 몰라서 안쓴거였기 때문에~!

** VS Codium 에서!

  • 2022.03.15, Codium 1.65.2 현재, 아래 현상은 보이지 않는다.

#!/usr/bin/env python3 을 쓰면, 첫 줄 위 공백에 ‘Set as interpreter‘ 라는 항목이 표시된다.
VS Code 에선 안 이러는데..
그냥 무시하면 될 듯 하다.

Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.