[python] Python 스크립트 헤더

일반적인 헤더는

#!/usr/bin/env python

하지만 아래 스크립트를 실행할 때도 작동한다는 것을 알았습니다. $python ./my_script.py

#!/usr/bin/python
#!python

이 두 헤더의 차이점은 무엇입니까? 두 번째 문제는 무엇일까요? 파이썬 인터프리터가 PATH에 있는지 여부에 대해서도 논의하십시오. 감사.



답변

먼저 인터프리터를 사용하여 명시 적으로 스크립트를 실행할 때마다

$ python ./my_script.py
$ ksh ~/bin/redouble.sh
$ lua5.1 /usr/local/bin/osbf3

#!라인은 항상 무시됩니다. #!라인의 유닉스 기능입니다 실행 스크립트 만, 당신은이에 전체에 설명 볼 수 있습니다 에 대한 man 페이지execve(2) . 다음 단어 #!는 유효한 실행 파일의 경로 이름이어야합니다. 그래서

#!/usr/bin/env python

python사용자에있는 모든 것을 실행 합니다 $PATH. 이 형식은 이동되는 Python 인터프리터에 탄력적이므로 다소 이식성이 높지만 사용자가 .NET Framework에 추가하여 표준 Python 인터프리터를 재정의 할 수 있습니다 $PATH. 목표에 따라이 동작은 정상일 수도 있고 그렇지 않을 수도 있습니다.

다음,

#!/usr/bin/python

파이썬 인터프리터가 /usr/bin. 다른 곳에 설치하면 잃게됩니다. 그러나 이것은 당신이 원하는 버전을 정확히 얻거나 아무것도 얻지 못하도록하는 좋은 방법입니다 ( “fail-stop”동작).

#!/usr/bin/python2.5

드디어,

#!python

python스크립트가 실행될 때 현재 디렉토리에 실행 파일 이있는 경우에만 작동 합니다. 권장하지 않습니다.


답변

스크립트 시작 부분에 3 가지를 제안합니다.

첫째, 이미 말했듯이 사용 환경 :

#!/usr/bin/env python

둘째, 인코딩을 설정하십시오.

# -*- coding: utf-8 -*-

셋째, 문서 문자열을 설정합니다.

"""This is a awesome
    python script!"""

그리고 확실히 나는 " "ident에 (4 공백)을 사용할 것 입니다.
최종 헤더는 다음과 같습니다.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""This is a awesome
        python script!"""

최고의 소원과 행복한 코딩.


답변

Python 실행 파일은 / usr / bin이 아닌 다른 위치에 설치 될 수 있지만 env거의 항상 해당 위치에 있으므로 사용 /usr/bin/env이 더 이식 가능합니다.


답변

env(GNU coreutils 6.10) 맨 페이지에서 :

env - run a program in a modified environment

이론적으로 env는 환경을 재설정 (기존 환경 변수의 대부분 제거)하거나 스크립트 헤더에 추가 환경 변수를 추가 하는 데 사용할 수 있습니다 . 실제로 언급 한 두 버전은 동일합니다. (다른 사람들이 좋은 점을 언급했지만 python통과를 지정 env하면 python경로를 몰라도 추상적으로 지정할 수 있습니다 .)


답변

예, 있습니다-파이썬은에 없을 수 /usr/bin있지만 예를 들어 /usr/local/bin(BSD)에 있습니다.

virtualenv를 사용할 때 다음과 같을 수도 있습니다. ~/projects/env/bin/python


답변

/usr/bin/env python스크립트 예에 의존 스크립트를 사용하기위한 환경 설정에 따라 달라 때 매우 유용하게된다 python virtualenv. 각 virtualenv에는 PYTHONPATH env를 건드리지 않고 virtualenv에 설치된 패키지를 Python 경로에 추가하는 데 필요한 자체 버전의 Python 바이너리가 있습니다.

점점 더 많은 사람들이 파이썬 개발을 위해 virtualenv를 사용하기 시작함에 따라 사람들이 커스텀 파이썬 바이너리를 사용하는 것을 원하지 않는 한 사용을 선호합니다 /usr/bin/env python.

참고 : 사용자가 사용자 정의 환경에서 스크립트를 실행하도록 허용하면 잠재적 인 보안 문제 (다중 사용자 환경에서)가 있음을 이해해야합니다. 여기 에서 몇 가지 아이디어를 얻을 수 있습니다 .


답변