Search
🌍

bb2.1_1.1_2. title: 런타임 환경이 어떤 운영체제가 될지 모른다면 파이썬 스크립트의 맨 앞에 env 를 이용한 셔뱅(Shebang, #!)을 작성하라.

생성
🚀 prev note
♻️ prev note
bb2.1_1.1_1. title: 굳이 소스코드를 묶기 위해 Makefile을 쓸 필요는 없다. Makefile이 코드형 인프라(‣)의 표준인 것은 아니다.
bc6_1. [entry] title: 도커파일을 구성하는 명령어들은 내(호스트) 환경과 격리된 환경인 도커 환경 사이의 관계를 정의하기도 하고, 이미지 환경 자체를 정의하기도 하고, 컨테이너 환경에서 수행해야 하는 작업을 정의하기도 한다.
bb8.1_2. title: 리눅스(Linux)는 유닉스 계열(‣)이지만 유닉스(UNIX)가 아니고 MacOS는 유닉스(UNIX)이다. 유닉스 계열과 유닉스는 엄연히 다르다.
🚀 next note
14 more properties
파이썬은 인터프리터 언어다. 따라서 별도의 컴파일 과정 없이 파이썬 인터프리터 프로그램 python(python2 또는 python3)을 실행하며 그 인자로 파일의 경로를 작성하면 스크립트가 쭉 실행된다(from3). 이말은 곧 스크립트 언어는 인터프리터의 버전에 종속적이라는 말이기도 하다.
환경 종속성을 피하기 위해 도커를 사용하는 방법 등을 고려할 수 있겠지만(from2), 의존성이 충분히 작아 직관적으로 관리가 가능한 작은 프로젝트를 진행할 때 도커 환경을 세팅하는 일은 상당히 번거로울 수 있다. 이럴 때 커맨드라인에서 사용하는 스크립트를 축약하기 위한 목적으로 Makefile(from1)이나 셸 스크립트를 사용하곤 한다. 하지만 Makefile 이나 셸 스크립트와 같이 격리환경을 전제하지 않는 경우 여전히 런타임 실행 환경(python 의 실행 경로, python 의 버전 등)을 엄격하게 규정하지 못한다.
소스코드를 작성할 때 가장 간단하게 런타임 환경을 제약하는 방법은 스크립트 최상단에 셔뱅라인을 추가하는 것이다. 스크립트의 셔뱅 줄에 python 를 실행하도록 아래와 같이 명세해 두면 유저가 python main.py 와 같이 커맨드라인에 입력하는 대신 ./main.py 만 입력하면 프로그램을 실행하게 된다.
#!/usr/bin/python
Python
복사
main.py
하지만 아직 많은 시스템에서는 python 실행 파일이 python2 의 심볼릭 링크인 경우도 있고(from4:리눅스에서 프로그램을 실행하는 방법), python3 의 심볼릭 링크인 경우도 있다. python 을 많이 다루어 본 개발자라면 이 문제를 금방 파악할 테지만, 그렇지 않을 가능성은 여전히 높다. 아래와 같이 인터프리터의 버전을 지정하자.
#!/usr/bin/python3
Python
복사
main.py
뿐만 아니라 Makefile은 도커와 달리 일정한 운영체제 환경을 담보하지 않는다. 이말은 곧 python3 실행 파일이 /usr/bin/python3 에 위치해 있는지, /bin/python3 에 위치해 있는지 알 방법이 없다는 말이다. 모든 소스코드는 반드시 훨씬 안정적인 것에 종속적이어야 한다. 이 문제를 회피하기 위한 정답은 환경 변수만이 알고 있다. 아래와 같은 쉬뱅을 사용하여 환경 변수가 python3 에 해당하는 적절한 실행 파일을 들고 오도록 만들자(참고1).
#!/usr/bin/env python3
Python
복사
main.py
이때 셔뱅 라인에서 사용된 /usr/bin/env 는 별다른 것이 아니라 리눅스와 같은(from5) unix-like 시스템(Unix-like)에서 환경 변수를 다룰 때 사용할 수 있는 프로그램이다(참고2).
parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료들.
1.
None
from : 과거의 어떤 생각이 이 생각을 만들었는가?
3.
4.
supplementary : 어떤 새로운 생각이 이 문서에 작성된 생각을 뒷받침하는가?
1.
None
opposite : 어떤 새로운 생각이 이 문서에 작성된 생각과 대조되는가?
1.
None
to : 이 문서에 작성된 생각이 어떤 생각으로 발전되고 이어지는가?
참고 : 레퍼런스