티스토리 뷰

파이썬 스크립트를 작성하다가 파이썬 2.x 버전과 파이썬 3.x 버전을 선택할 수 있는 방법을 찾아봤다.

셔뱅(Shebang)

리눅스 환경에서 Command Line 스크립트의 첫 번째 줄에 '#!'로 시작하는 코드가 있다. '셔뱅(Shebang)'이라고하는 이 코드는 스크립트를 실행시켜줄 프로그램의 경로를 지정하는 역할을 담당한다. 셔뱅은 'Sharp(#)' + 'Bang(!)'의 합성어라고 한다. 샤-뱅, 해시뱅, 파운드-뱅, 해시-플링, 크런치뱅 등으로 불리기도 한다. (링크 : 셔뱅 - 위키피디아)

#!interpreter [optional-arg]

 

위 형태로 '#!'라는 매직 바이트를 시작으로 바로 뒤에 인터프리터 경로가 나온다. 그 이후로 인터프리터를 위한 인자들이 오게 된다. 인터프리터 경로는 절대 경로여야하며 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' 명령이다. 스크립트의 셔뱅을 다음과 같이 만들어 놓는 경우를 많이 봤을 것이다.

#!/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 명령이 알아서 해당 버전의 파이썬 인터프리터를 찾아서 구동시켜 준다.

댓글
댓글쓰기 폼
공지사항
최근에 달린 댓글
Total
1,524
Today
21
Yesterday
48
링크
«   2020/02   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
글 보관함