Following system colour scheme Selected dark colour scheme Selected light colour scheme

Python 개선 제안 한국어 번역

PEP 486 – Python 런처가 가상 환경을 인식하도록 만들기

Author:
Paul Moore <p.f.moore at gmail.com>
Status:
Final
Type:
Standards Track
Created:
12-Feb-2015
Python-Version:
3.5
Post-History:
12-Feb-2015
Resolution:
Python-Dev message

Table of Contents

번역·라이선스 안내

이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판

개요

Python용 Windows 설치 프로그램에는 실행할 올바른 Python 인터프리터를 찾아주는 런처가 포함되어 있습니다(PEP 397 참조). 하지만 이 런처는 가상 환경(virtualenv [1] 또는 PEP 405 기반)을 인식하지 못하므로, 활성화된 virtualenv에서 명령을 실행하는 데 사용할 수 없습니다.

이 PEP는 런처를 “virtualenv 인식형”으로 만들 것을 제안합니다. 즉, 사용할 명시적인 Python 인터프리터를 지정하지 않고 실행할 경우, 런처는 설정된 기본 Python으로 넘어가기 전에 현재 활성화된 virtualenv가 있다면 이를 사용한다는 의미입니다.

근거

Python이 여러 개 설치된 Windows 사용자는 그중 어느 것을 사용할지 선택할 수단이 필요합니다. Python 런처는 py명령을 통해 이 기능을 제공하며, 명령줄 인자를 이용해 설정된 “기본” Python이나 특정 인터프리터 중 하나를 실행하는 데 사용할 수 있습니다. 따라서 일반적인 사용법은 다음과 같습니다:

# Run the Python interactive interpreter
py

# Execute an installed module
py -m pip install pytest
py -m pytest

가상 환경을 사용할 때, py런처는 virtualenv가 활성화되어 있다는 것을 인식하지 못하고 계속 시스템 Python을 사용합니다. 따라서 virtualenv에서 동일한 명령을 실행하려면 서로 다른 명령 호출이 필요합니다:

# Run the Python interactive interpreter
python

# Execute an installed module (these could use python -m,
# which is longer to type but is a little more similar to the
# launcher approach)
pip install pytest
py.test

서로 다른 명령을 사용해야 하는 것은 오류가 발생하기 쉬우며, 많은 경우 그 오류를 즉시 알아차리기 어렵습니다. 이 PEP는 py명령을 가상 환경에서도 사용할 수 있도록 만들 것을 제안하여, 모든 경우에 첫 번째 형태의 명령을 사용할 수 있도록 합니다.

구현

virtualenv와 코어 venv 모듈은 모두 가상 환경을 활성화할 때 환경 변수 VIRTUAL_ENV를 설정합니다. 이 PEP는 런처가 시스템의 “기본” 파이썬 인터프리터를 실행하려 할 때마다(즉, py -2.7과 같은 특정 버전 플래그가 사용되지 않을 때) VIRTUAL_ENV 환경 변수를 확인하고, 만약 존재한다면 기본 시스템 파이썬 대신 가상 환경의 파이썬 인터프리터를 실행할 것을 제안합니다.

위에서 언급한 “기본” 파이썬 인터프리터는 (PEP 397에 따르면) 시스템에 설치된 최신 버전의 파이썬이거나, py.ini 설정 파일을 통해 구성된 버전입니다. 사용자가 명령줄에서 명시적으로 파이썬 버전을 지정하면, 이 버전이 (현재와 마찬가지로) 항상 사용됩니다.

스크립트 실행에 미치는 영향

대화형 사용뿐만 아니라, 런처는 파이썬 스크립트에 대한 윈도우 파일 연결 프로그램으로도 사용됩니다. 이 경우, 실행할 인터프리터를 식별하기 위해 스크립트 시작 부분의 “셔뱅”(#!) 줄이 사용됩니다. 완전한 경로를 사용할 수도 있고, 버전별 파이썬(python3이나 python2, 심지어 python3.5)을 사용할 수도 있으며, 기본 인터프리터를 사용함을 의미하는 일반적인 python을 사용할 수도 있습니다.

런처는 또한 특정 셔뱅 줄인 #!/usr/bin/env python도 찾습니다. 유닉스에서 env 프로그램은 $PATH에서 명령을 검색하여 그렇게 찾은 명령을 실행합니다. 마찬가지로, 이 셔뱅 줄을 사용하면 런처는 사용자의 현재 %PATH%에서 python.exe의 사본을 찾아 그 사본을 실행합니다.

가상 환경을 활성화한다는 것은 그것이 PATH에 추가된다는 것을 의미하므로, 활성화된 가상 환경으로 스크립트를 실행하는 데 특별한 처리가 필요하지 않습니다 - 유닉스에서와 정확히 마찬가지로 #!/usr/bin/env python 셔뱅 줄만 사용하면 됩니다. (활성화된 가상 환경이 없고 PATHpython.exe도 없다면, 런처는 셔뱅 줄이 #!python이라고 되어 있는 것처럼 기본 파이썬을 찾습니다.)

제외 사항

이 PEP는 Windows에서 Python을 실행할 때 런처(launcher) 사용을 장려하려는 시도를 하지 않습니다. 기존 문서 대부분은 Python을 실행하는 명령으로 python을, (예를 들어) 설치된 Python 명령을 실행하는 데는 pip를 사용하는 것을 전제로 합니다. 이 문서는 변경될 것으로 예상되지 않으며, PATH 환경 변수를 직접 관리하기로 선택한 사용자는 계속해서 이 형식을 사용할 수 있습니다. 이 PEP의 초점은 오로지, 시스템 Python 설치를 다룰 때 런처를 사용하는 것을 선호하는 사용자가 가상 환경을 사용할 때도 계속 그렇게 할 수 있도록 허용하는 데에 있습니다.

참조 구현

제안된 동작을 구현한 패치는 http://bugs.python.org/issue23465 에서 확인할 수 있습니다.

참고 문헌