python == python2 또는 python == python3? 파이썬 py2k 스크립트를 패키징하고 배포하는 방법은 무엇입니까? python == python3입니다. (예를 들어 ArchLinux python

시스템에 따라 python== python2python== python3.

실행 가능한 Python 스크립트는 다음으로 시작합니다.

#!/usr/bin/env python
#!/usr/bin/env python2
#!/usr/bin/env python3...

python py3k의 경우 문서에서 제공되며 버전 번호와 함께 사용해야합니다 .

#!/usr/bin/env python3

그러나 py2k 스크립트에서 문제를 발견했습니다.

에있는 동안 py2k 문서 그것은 사용에 기록됩니다 #! /usr/bin/env python,

일부 * nix-es python에서는 py3k가 기본값이므로 python == python3입니다. (예를 들어 ArchLinux python package , 여기서 python package files ).

배포를 위해 파이썬 스크립트를 패키징 (구성, 구성) 및 / 또는 준비하는 방법은?

사용자가 환경을 수정하지 않고 쉽게 실행할 수있는 소프트웨어 패키지를 만드는 방법에 대해 문의합니다.

python py2k 스크립트와 python py3k 스크립트와 동일한 트릭을 수행하고 다음과 같이 설정할 수 #!/usr/bin/env python2있습니까? 각 python py2k 배포에 python2파일이 포함되어 있는지 확인할 수 있습니까 #!/usr/bin/env python2?

그렇다면 왜 파이썬 py2k 문서 와 같이 표준으로 제안되지 않습니까?



답변

스크립트는 Python 버전을 확인하고, Python 3 인 경우 Python 2를 사용하여 다시 시작합니다. 스크립트 헤드 근처에 다음을 추가하십시오.

if sys.version > '3':
  python2 = os.popen('which python2 2> /dev/null').read().rstrip()
  if python2:
    args = sys.argv[:]
    args.insert(0,python2)
    os.execv(python2,args)
  else:
    sys.exit("%s requires Python Version 2 (python2 not in PATH)" % os.path.basename(__file__))

이것은 시스템의 which명령을 사용하여 python2환경의 위치를 찾습니다 PATH. 그런 다음 다시 시작합니다 (또는 찾을 수없는 경우 중단됨).

Python 3에서 시작하려면 스크립트가 유효한 Python 3 구문이어야합니다.

또한 모든 출력은 execv호출 전에 플러시되어야합니다 . 그렇지 않으면 출력이 손실됩니다. 예를 들어 sys.stdout.flush()호출 직전에 추가하면 명령문 execv이 플러시됩니다 print.


답변

이전 버전에서는 python대신 대신 있을 수 있습니다 python2. sheebang 라인을보다 명확하게하기 위해 링크를 만들어 python2 -> python사용할 수 있습니다 #!/usr/bin/env python2.


답변

“표준”은 https://www.python.org/dev/peps/pep-0394/에 정의되어 있다고 생각합니다.

이 PEP는 Python 인터프리터의 기본 버전 (python 명령에 의해 호출 된 버전)에 관계없이 * nix 시스템에서 Python 스크립트를 계속 이식 할 수 있도록하는 규칙을 제공합니다.

  • python2는 일부 버전의 Python 2.x를 나타냅니다.
  • python3은 일부 버전의 Python 3.x를 참조합니다.
  • 당분간 모든 배포판은 파이썬이 python2와 동일한 대상을 참조하도록해야합니다.
  • 그러나 최종 사용자는 python이 적어도 Arch Linux에서 python3을 참조한다는 것을 알고 있어야합니다 (이 변경 사항은이 PEP의 생성을 자극했습니다) 파이썬 2는 Python 2와 소스 호환되는 스크립트에만 shebang 라인에서 사용해야합니다 그리고 3.
  • 기본 버전의 Python에서 최종 변경을 준비하기 위해 Python 2 전용 스크립트는 Python 3과 소스 호환되거나 shebang 행에서 python2를 사용하도록 업데이트되어야합니다.

답변