파이썬 코드를 보면 가끔 이런 형식의 코드가 있을 것입니다.
#!/usr/bin/python print "Hello, world!"
위와 같이 맨 윗줄에 주석으로 #!/usr/bin/python
이렇게 있을 것입니다. 이는 리눅스에서 파이썬 스크립트를 실행하는 프로그램의 경로를 지정하는 것입니다. 이 예제에서는 파이썬이 설치된 경로가 /usr/bin이라고 가정하고 작성한 것입니다. 이 파일 이름을 hello.py라고 저장한 후 아래와 같이 chmod 명령어를 이용하여 실행 가능하게 퍼미션을 설정하고 그 파일 이름을 쳐서 실행합니다. (윈도우즈의 cmd와는 다르게 앞에 ‘./
‘ 표시를 붙여야 합니다.)
$ chmod +x hello.py $ ./hello.py Hello, world! $
이와 같이 /usr/bin 디렉터리에 있는 파이썬 2로 프로그램이 실행됩니다.
그런데 이번에는 프로그램을 다음과 같이 수정하면 어떻게 될까요?
#!/usr/bin/python3 print "Hello, world!"
python 대신 python3으로 바꾸었습니다. 최근 나오는 리눅스 배포판에서는 파이썬 2와 파이썬 3이 동시에 설치되어 있는 경우가 많은데 대개는 기본적으로 python
이라고만 하면 파이썬 2를 실행하고 파이썬 3을 실행시키려면 python3
이라고 입력해서 실행합니다. 어쨌든 이렇게 바꿔서 실행을 시도하면,
$ ./hello.py File "./hello.py", line 2 print "Hello, world!" ^ SyntaxError: Missing parentheses in call to 'print' $
이번에는 이와 같이 오류를 발생시킵니다. 왜냐하면, #!/usr/bin/python3
이렇게 수정하면 /usr/bin 경로에 있는 파이썬 3로 실행시키라는 뜻으로 받아들이고 파이썬 3 기반에서 코드가 돌아갑니다. 그런데 파이썬에서 Hello, world! 출력하기 포스트에서도 서술한 바와 같이 print 문은 파이썬 2.7까지는 print "Hello, world!"
와 같이 괄호 없이 쓸 수도 있고 print("Hello, world!")
와 같이 괄호를 넣고 쓸 수도 있었지만 파이썬 3에서는 후자의 방법만 인정되기 때문에 위와 같은 오류를 일으키게 됩니다.