2011년 7월 12일 화요일

Windows용 파이썬 실행기

원문: A Python Launcher For Windows (날짜: 2011-07-11, 작성자: Paul Moore)

pywin32의 저자이자 오랫동안 Windows에서 파이썬 지원을 위해 노력해오신 Mark Hammond 님이 새로운 Windows용 파이썬 실행기를 주제로 한 PEP 397을 작성해 주셨습니다. 표준 라이브러리 logging 모듈의 저자인 Vinay Sanjip 님은 최근 이 실행기에 대한 구현을 작성해 주셨습니다. 구현은 https://bitbucket.org/vinay.sajip/pylauncher/downloads에서 다운로드 하실 수 있습니다.

새로운 실행기는 Windows에서 파이썬 스크립트(.py.pyw 파일)에 사용하려는 파이썬 버전을 지정할 수 있어서 파이썬 2와 3을 동시에 사용할 수 있도록 해줍니다.

Windows 사용자께서는 새 실행기를 다운로드하고 테스트해 주셔서 파이썬 개발자가 남은 문제를 해결하는데 도움을 주셨으면 합니다. 실행기는 독립 프로그램으로 패키징되어 있고 현재 나와있는 파이썬 버전들을 지원합니다. 실행기가 최종적으로 완성되면 파이썬 3.3에 포함될 것입니다. (독립 패키지도 이전 버전 파이썬 사용자를 위해 계속 제공됩니다.)

실행기는 두 가지 버전으로 제공됩니다. - launcher.msi는 실행기를 Program Files 디렉터리에 설치하고 launchsys.msiSystem32 디렉터리에 설치합니다. (64비트 Windows용으로 64비트 버전도 제공됩니다.)

실행기에 대한 자세한 설명

실행기 동작에 대한 전체 명세는 PEP 397에 있습니다. 기본 원리를 요약하자면:

  • 실행기는 두 가지 실행 파일을 제공합니다. - py.exe(콘솔 버전)과 pyw.exe(GUI 버전)
  • 실행기는 .py(콘솔)과 .pyw(GUI) 파일 확장자에 대한 핸들러로 등록됩니다.
  • 스크립트가 실행되면 실행기는 스크립트에서 Unix 스타일의 #!(쉬뱅) 행을 찾아봅니다. 실행 파일 이름으로 python (시스템 기본 파이썬), python2 (기본 파이썬 2 릴리스), python3 (기본 파이썬 3 릴리스)을 인식합니다. 이것은 사용자 별, 컴퓨터 별로 자세히 설정할 수 있습니다.
  • py.exe 명령이 독립적으로 실행될 때에는 파이썬 대화식 인터프리터를 실행시킵니다. 명령 행 스위치가 지원되어서 py -2는 파이썬 2를, py -3은 파이썬 3을, py는 기본 버전을 실행합니다.

간단 사용 설명서

실행기는 설치가 되면 자신을 .py.pyw 스크립트에 연결시킵니다. 다른 조작을 하지 않았다면 스크립트는 컴퓨터에 설치된 기본 파이썬을 사용하여 실행될 것입니다. 그러므로 전과 차이는 없을 것입니다. 콘솔을 자주 사용한다면 .pyPATHEXT 변수에 추가해서 스크립트가 별도의 콘솔에서 실행되지 않도록 하면 좋습니다.

파이썬 2를 사용해야 하는 스크립트에는 첫 행에 다음을 추가합니다.

#!/usr/bin/env python2

(이는 Unix와 호환되는 형식입니다. Unix 호환성이 필요 없다면 #!python2라고 해도 됩니다.)

반대로 파이썬 3을 사용해야 하는 스크립트에는:

#!/usr/bin/env python3

을 첫 행에 추가합니다.

파이썬 인터프리터를 다음과 같은 명령을 통하여 시작할 수 있습니다.:

# 기본 파이썬 버전
py
# 파이썬 2
py -2
# 파이썬 3
py -3

위와 같이 사용하려면 py.exe 실행 파일이 실행 경로 상에 있어야 하는데 launchsys 버전의 설치 프로그램을 사용했다면 자동으로 됩니다. launcher.msi 버전은 설치 디렉터리 (C:\Program Files\Python Launcher)를 수동으로 PATH에 추가해야 합니다.

더 읽을거리

다음 python-dev 메일 스레드들은 핵심 논의 사항을 다룹니다:

2011년 7월 8일 금요일

3.2.1 릴리스 후보 2가 나왔습니다

원문: 3.2.1 Release Candidate 2 Released (날짜: 2011-07-06, 작성자: Brian Curtin)

6월의 릴리스에 이어 3.2.1의 두 번째 릴리스 후보가 지금 막 나왔습니다. 5월 15일에 있었던 첫 번째 릴리스 후보 이후로 40가지가 넘는 문제를 고쳐졌습니다. 여러분 모두 3.2.1 최종 릴리스 전의 마지막 모습을 확인하신다는 차원에서 각자의 프로젝트에 이 릴리스 후보를 테스트해 보시기를 바랍니다.

무엇이 고쳐졌을까?

I/O

#1195는 고쳐지지 않은 채로 몇 년이 지났습니다. 그러나 fgets을 호출하기 전에 오류 상태를 초기화하는 간단한 수정만으로 input() 내에서 CTRL-D가 sys.stdin.read()를 중단시키는 문제를 해결하였습니다. io 시스템은 #12175에서 read()None을 반환하면 readall() 메소드도 None을 반환하도록 하였고, 파일을 열지 못할 때에는 ValueError를 발생하도록 했습니다.

RC2에서 등장한 것은 아니지만 3.2.1의 중요한 수정 사항인 #11272는 Windows에서 input()의 끝에 붙어 오는 \r 문제를 고친 것입니다. 이 문제는 수차례 보고된 바 있고 여러 사람이 겪고 있는 문제이므로(distutils의 upload 명령 등?) 3.2.1이 해결책이 될 수 있기를 희망합니다.

Windows

3.2.0은 Windows에 os.symlinks 지원이라는 새 기능을 추가하였는데 덕분에 #12084가 문제가 되었습니다. os.stat가 Windows 심볼릭 링크를 잘못 계산하고 있었던 것으로 밝혀져 stat 함수의 여러 가지 내부 동작을 수정했었습니다.

한 사용자가 os.path.isdir이 느리다는 것을 밝혀냈는데, 그 원인은 os.stat로 특히 심볼릭 링크를 계산할 때가 문제가 됩니다. (일반적으로 보통 파일보다 두 배는 느려짐) 누구에게도 os.path.isdir이 성능상의 병목이 되지는 않지만, 인터프리터가 시작될 때 여러 차례 호출되므로 #11583에서 GetFileAttributes를 사용하도록 하여 기동 시 속도를 조금 높였습니다.

subprocess

Popen 객체를 생성할 때 올바르지 않은 인자를 넘기면 AttributeError가 발생했습니다. 이것은 #12085로 보고되었고 보고한 사람이 고쳐주었습니다. 3.2.0에서 변경된 것 때문에 Popen에서 환경 변수가 비어있을 때, 특히 env 인자를 제대로 처리하지 못하였습니다. 이 문제는 #12383으로 올라와 바로 고쳐졌습니다.

...그 밖에!

3.2.1 RC2의 전체 변경 사항을 보려면 변경 로그를 확인하시고 지금 바로 다운로드 해보십시오!

늘 그렇듯이 문제를 발견하시면 http://bugs.python.org로 알려주세요. 고품질의 파이썬 릴리스를 제작할 수 있도록 도움을 주셔서 고맙습니다.