[python] #을 넣어야합니까! (shebang) Python 스크립트에서 어떤 형식을 사용해야합니까?

Shebang을 Python 스크립트에 넣어야합니까? 어떤 형태로?

#!/usr/bin/env python 

또는

#!/usr/local/bin/python

이것들은 이식성이 있습니까? 어떤 형태가 가장 많이 사용됩니까?

참고 : 토네이도 프로젝트는 오두막을 사용합니다. 반면에 Django 프로젝트는 그렇지 않습니다.



답변

스크립트의 shebang 행 python은 터미널에 미리 입력하지 않거나 파일 관리자에서 스크립트를 두 번 클릭 할 때 (올바로 구성된 경우) 독립 실행 형 실행 파일처럼 스크립트를 실행할 수있는 능력을 결정합니다 . 반드시 필요한 것은 아니지만 일반적으로 편집기에서 파일을 연 사람이보고있는 것을 즉시 알 수 있습니다. 그러나, 당신이 사용하는 오두막 라인 입니다 중요합니다.

Python 3 스크립트의 올바른 사용법은 다음과 같습니다.

#!/usr/bin/env python3

기본값은 3.latest입니다. Python 2.7.latest python2대신에 사용하십시오 python3.

다음 은 사용하지 않아야합니다 (Python 2.x 및 3.x와 호환되는 코드를 작성하는 드문 경우 제외) :

#!/usr/bin/env python

에 주어진 이러한 권장 사항에 대한 이유, PEP 394 , 즉 python하려면 다음 중 하나를 참조 할 수 있습니다 python2또는 python3다른 시스템에. 현재 python2대부분의 배포판에서 언급 되지만 언젠가는 변경 될 수 있습니다.

또한 다음을 사용하지 마십시오 :

#!/usr/local/bin/python

“이 경우 / usr / bin / python 또는 / bin / python에 Python을 설치할 수 있습니다. 위의 #!는 실패합니다.”

“#! / usr / bin / env python”vs “#! / usr / local / bin / python”


답변

정말 맛의 문제 일뿐입니다. shebang을 추가하면 사람들이 원하는 경우 스크립트를 직접 호출 할 수 있습니다 (실행 파일로 표시되어 있다고 가정). 생략하면 python수동으로 호출해야합니다.

프로그램 실행의 최종 결과는 어느 쪽에도 영향을 미치지 않습니다. 수단의 옵션 일뿐입니다.


답변

Shebang을 Python 스크립트에 넣어야합니까?

shebang을 Python 스크립트에 넣어서 다음을 표시하십시오.

  • 이 모듈은 스크립트로 실행할 수 있습니다
  • python2, python3에서만 실행할 수 있는지 아니면 Python 2/3과 호환되는지 여부
  • POSIX에서는 python실행 파일을 명시 적으로 호출하지 않고 스크립트를 직접 실행하려는 경우에 필요합니다

이것들은 이식성이 있습니까? 어떤 형태가 가장 많이 사용됩니까?

shebang을 수동으로 작성하는 경우 #!/usr/bin/env python특별한 이유가없는 한 항상 사용하십시오. 이 형식은 Windows (Python Launcher)에서도 이해됩니다.

참고 : 설치된 스크립트는 특정 python 실행 파일을 사용해야합니다 (예 : /usr/bin/python또는) /home/me/.virtualenvs/project/bin/python. 셸에서 virtualenv를 활성화하면 일부 도구가 작동하지 않으면 나빠집니다. 운 좋게도, 올바른 shebang은 대부분의 경우 setuptools또는 배포 패키지 도구에 의해 자동으로 만들어 집니다 (Windows에서는 setuptools래퍼 .exe스크립트를 자동으로 생성 할 수 있음 ).

즉, 스크립트가 소스 체크 아웃 상태 인 경우을 볼 수 #!/usr/bin/env python있습니다. 그것이 설치된 경우 shebang은 #!/usr/local/bin/python ( 예 : 후자의 범주에서 경로를 수동으로 작성해서는 안됩니다) 와 같은 특정 Python 실행 파일 의 경로입니다.

사용할지 여부를 선택합니다 python, python2또는 python3오두막에서 참조 PEP 394 – 유닉스 계열 시스템에 “파이썬”명령을 :

  • pythonPython 2 및 3과 소스 호환되는 스크립트에만 shebang 행에서 사용해야합니다.

  • 기본 버전의 Python에서 최종 변경을 준비하기 위해 Python 2 전용 스크립트는 Python 3과 소스 호환 가능하거나 python2shebang 라인에서 사용할 수 있도록 업데이트되어야합니다 .


답변

둘 이상의 Python 버전이 있고 특정 버전에서 스크립트를 실행해야하는 경우 she-bang은 스크립트가 직접 실행될 때 올바른 버전이 사용되도록 할 수 있습니다. 예를 들면 다음과 같습니다.

#!/usr/bin/python2.7

스크립트는 완전한 Python 명령 행 또는 가져 오기를 통해 계속 실행될 수 있습니다.이 경우 she-bang은 무시됩니다. 그러나 스크립트가 직접 실행되기 때문에 이것이 그녀를 사용하는 적절한 이유입니다.

#!/usr/bin/env python 일반적으로 더 나은 접근 방법이지만 특수한 경우에 도움이됩니다.

일반적으로 Python 가상 환경을 설정하는 것이 좋습니다.이 경우 제네릭 #!/usr/bin/env python은 virtualenv에 대한 올바른 Python 인스턴스를 식별합니다.


답변

스크립트가 실행 가능한 경우 shebang을 추가해야합니다. 대상 플랫폼에서 작동하도록 shebang을 올바른 것으로 수정하는 설치 소프트웨어로 스크립트를 설치해야합니다. 이에 대한 예는 distutils 및 Distribute입니다.


답변

shebang의 목적은 쉘에서 스크립트를 실행하려고 할 때 스크립트가 인터프리터 유형을 인식하는 것입니다. 대부분은 아니지만 항상 통역사를 외부에 제공하여 스크립트를 실행합니다. 사용법 예 :python-x.x script.py

shebang 선언자가없는 경우에도 작동합니다.

첫 번째가 더 “이동식”인 이유는 시스템 실행 파일이있는 모든 대상을 설명하는 선언을 /usr/bin/env포함하기 때문 PATH입니다.

참고 : 토네이도는 세방을 엄격하게 사용하지 않으며 장고는 엄격하게 사용하지 않습니다. 응용 프로그램의 주요 기능을 실행하는 방법에 따라 다릅니다.

또한 : 파이썬에 따라 다르지 않습니다.


답변

때로는 대답이 명확하지 않은 경우 (예 또는 아니오로 결정할 수 없음을 의미) 너무 중요하지 않으며 대답 명확 해질 때까지 문제를 무시할 수 있습니다 .

#!유일한 목적은 스크립트를 실행하기위한 것입니다. 장고는 자체적으로 소스를로드하여 사용합니다. 어떤 인터프리터를 사용해야하는지 결정할 필요가 없습니다. 이런 식으로, #!실제로 여기서는 의미가 없습니다.

일반적으로 모듈이고 스크립트로 사용할 수없는 경우을 사용할 필요가 없습니다 #!. 다른 한편으로, 모듈 소스는 종종 if __name__ == '__main__': ...최소한의 기능 테스트를 포함합니다. 그런 다음 #!다시 의미가 있습니다.

사용하는 좋은 이유 중 하나 #!는 Python 2와 Python 3 스크립트를 모두 사용하는 것입니다. 서로 다른 버전의 Python으로 해석해야합니다. 이런 식 python으로 스크립트를 수동으로 시작할 때 ( #!내부 없이 ) 사용해야 하는 것을 기억해야 합니다 . 이러한 스크립트가 혼합되어 있으면 #!내부 를 사용하여 실행 가능하게 만들고 실행 파일로 실행 하는 것이 좋습니다 (chmod …).

MS-Windows를 사용할 #!때 최근까지도 말이되지 않았습니다. Python 3.3에는 #!줄 을 읽고 설치된 Python 버전을 감지하며 정확하거나 명시 적으로 원하는 Python 버전을 사용 하는 Windows Python Launcher (py.exe 및 pyw.exe)가 도입되었습니다 . 확장 프로그램과 프로그램을 연결할 수 있으므로 Windows에서 유닉스 기반 시스템의 실행 플래그와 유사한 동작을 얻을 수 있습니다.