developer tip

Python 스크립트 헤더

copycodes 2020. 10. 24. 10:35
반응형

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

#!라인은 항상 무시됩니다. #!행은 실행 가능한 스크립트 의 Unix 기능이며 .NET매뉴얼 페이지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


The /usr/bin/env python becomes very useful when your scripts depend on environment settings for example using scripts which rely on python virtualenv. Each virtualenv has its own version of python binary which is required for adding packages installed in virtualenv to python path (without touching PYTHONPATH env).

As more and more people have started to used virtualenv for python development prefer to use /usr/bin/env python unless you don't want people to use their custom python binary.

Note: You should also understand that there are potential security issues (in multiuser environments) when you let people run your scripts in their custom environments. You can get some ideas from here.

참고URL : https://stackoverflow.com/questions/3128669/python-script-header

반응형