일반적인 헤더는
#!/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
.
참고 : 사용자가 사용자 정의 환경에서 스크립트를 실행하도록 허용하면 잠재적 인 보안 문제 (다중 사용자 환경에서)가 있음을 이해해야합니다. 여기 에서 몇 가지 아이디어를 얻을 수 있습니다 .