본문 바로가기
카테고리 없음

'#!/bin/usr/env python' - 셔뱅(Shebang)을 이용하여 파이썬 버전 설정

by 꼬마낙타 2020. 3. 10.
반응형

파이썬 스크립트를 작성하면서 실행할 파이썬 버전을 '셔뱅(Shebang)'을 이용해 설정할 수 있습니다.

셔뱅(Shebang)

리눅스 환경에서 커맨드라인 스크립트를 작성할 때, 첫 번째 줄이 '#!'로 시작하는 라인이 들어갑니다. 이 부분을 '셔뱅(Shebang)'이라고 합니다. 스크립트 명령을 실행할 인터프리터의 경로를 명시하는 역할을 하는데요. 셔뱅은 'Sharp(#)' + 'Bang(!)'의 합성어라고 합니다. '샤-뱅', '해시뱅', '파운드-뱅', '해시-플링', '크런치뱅' 등으로 불리기도 합니다. (링크 : 셔뱅 - 위키피디아)

셔뱅인 '#!'라는 매직 바이트를 시작으로 바로 뒤에 인터프리터의 경로가 나옵니다.

#!interpreter [optional-arg]

그 이후로 인터프리터를 실행할 때 넘겨줄 인자(Argument)들이 오게 됩니다. 인터프리터 경로는 절대 경로여야하며, [optional-arg] 부분은 필요한 경우만 선택적으로 명시하면 됩니다.

셔뱅(Shebang)의 사용예를 들어보면,

#!/bin/bash
#!/bin/csh -f
#!/usr/bin/perl -T
#!/usr/bin/python
#!/usr/bin/php

이렇게 이 스크립트를 해석할 인터프리터의 경로와 선택적으로 인자를 써주는 방식으로 사용할 수 있습니다.

'셔뱅'의 매직 바이트가 샵(#) 문자로 시작하는 이유는, 많은 인터프리터 언어의 경우 '#' 문자가 주석으로 사용되기 때문입니다. 따라서 인터프리터 언어를 편집하는 편집기에서 셔뱅 부분을 주석처럼 처리 할 수 있습니다.

env 명령을 이용한 셔뱅

셔뱅에 인터프리터 경로를 입력할 때 한가지 불편한 점이 있습니다. 스크립트가 실행될 환경에 인터프리터의 설치 경로가 각기 다를 수 있다는 점입니다. 어떤 서버에서는 파이썬 경로가 '/bin/python'이고, 또 다른 서버에서는 '/usr/bin/python'인 경우가 있습니다. 하나의 파이썬 스크립트가 이 두 서버에서 실행된다면 셔뱅에 명시된 경로에 심볼릭 링크를 만들어줘야 정상적으로 동작하게 됩니다. 매우 귀찮은 일입니다.

이 때 셔뱅에 사용하는 명령이 'env' 입니다. 'env' 명령을 이용해 셔뱅을 다음과 같이 만들어 놓을 수 있습니다.

#!/usr/bin/env python
#!/usr/bin/env bash
#!/usr/bin/env php

'#!/usr/bin/env {언어이름}' 형식의 셔뱅을 사용하면 스크립트가 실행될 서버의 상황에 상관없이 유연하게 스크립트를 실행할 수 있습니다.

마치 쉘에서 사용자가 명령어를 입력하면 'PATH' 환경변수에서 바이너리를 찾아서 실행해주는 것처럼 셔뱅에 'env + python'을 입력하면 PATH 환경변수에서 python이라는 이름의 바이너리를 찾아서 이 스크립트의 실행에 사용하게 됩니다. 따라서 실행 환경의 PATH 환경변수만 잘 지정해주면 스크립트 실행에는 큰 문제가 없게 됩니다.

셔뱅으로 파이썬 버전 설정하기

파이썬 2.x 와 파이썬 3.x 버전이 모두 설치되어 있는 환경에서 스크립트가 어떤 버전으로 실행되어야 할지 명시하는것이 중요합니다.

#!/usr/bin/env python2

or

#!/usr/bin/env python3

이 처럼 파이썬 스크립트의 셔뱅에 바이너리 버전을 명시해주면 env 명령이 알아서 해당 버전의 파이썬 인터프리터를 찾아서 구동시켜 줍니다.

반응형

댓글