2011-04-07 2 views
9

특정 Python 버전으로 실행될 .py 파일에 대한 연결을 설정해야합니다. 하지만이 연관성은 단일 cmd.exe 세션에만 필요합니다 (병렬 세션은 영향을받지 않아야 함). Windows가 이것을 허용합니까?단일 cmd.exe 세션에 대한 임시 파일 연결

나는 대답이 '아니오'의심하지만 난 virtualenv에 같은 기능을 얻을 수있는 아이디어를 밖으로 던지기 전에 몇 가지 증거를보고 싶습니다.

+0

단순한 해결책은 파일 연결에만 의존하지 않고 명령 줄에서 원하는 이름을 지정하는 것입니다. –

+0

필자는 이미 python32, python27 등으로 명명 된 여러 Python 인터프리터를 가지고있다. 내가 원하는 것은이 virtualenv 세션에 대한 명령 행에서 인터프리터를 지정하지 않는 것이다. –

답변

8

물론 가능합니다. 이 환경 변수 파일 연결을 변경할 수 있습니다 경우

을 - -이 도움이 될 것입니다, 그러나 그것은 가능하지 않는 것 당신은 야콥의 대답에 귀하의 코멘트에 대답 할 뻔했다.

것이 가능하다. 키 값에 REG_EXPAND_SZ 유형의 레지스트리 키와 환경 변수를 사용하기 만하면됩니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Python.File\shell\open\command
키의 (Default) 값으로
%python_home%\python %1 %*
을 넣고 REG_EXPAND_SZ 그 값을 설정하는 예를 들어 파이썬 파이썬 파일이 열립니다을 정의하는 것이 가능합니다. python_home 환경 변수를 설정하여 결정하고 물론 명령 줄 세션 당이 작업을 수행 할 수 있습니다.질문에 대한 내 대답을 한 번보세요. where in the registry does Windows store, with which program to open certain file types?

나는 지금 권장할만한이 문제를 해결하기위한 특별한 도구가 있다고 했으므로. pylauncher이라고합니다. 문서에서 :

Windows에서의 Python 용 PEP 397 호환 실행 프로그램. 당신이 PATHEXT 환경 변수에 추가하는 경우에도 확장을 건너 뛸 수 있습니다 스크린 캐스트

에 대한 PEP에 대한 http://www.python.org/dev/peps/pep-0397/, http://www.red-dove.com/screencasts/launcher/launcher.html를 참조하십시오. 질문보기 What environment variables will be used when calling an EXE from command line?

+2

위대한 작품. 이 방법으로 환경을 설정하는 것이 중요하다고 생각합니다. 그렇지 않으면 잘못된 통역사 파이썬 인스턴스를 알아 차리지 못하고 잘못된 결론을 내릴 수 있기 때문입니다. 이것은 내가 그것을 * 설정 빈 virtaulenv의 ENV *이 VIRTUAL_ENV 시스템 ENV VAR 가리키는 것이 * VIRTUAL_ENV에 따라, 상대적으로 연결을 변경'레지 추가 HKEY_CLASSES_ROOT \ Python.File \ 셸 \ 짓을하는 방법입니다 % \ "% 1 \"% * " " * 환경을 활성화하면 VIRTUAL_ENV의 값이 변경됩니다. – xverges

+1

Nice!/command/ve/t \ ​​REG_EXPAND_SZ/d " +1 This is * answers * 내 질문 [Windows의 virtualenv가 virtualenv의 Python 실행 파일 버전과 .py/.pyw/.pyo/.pyc 파일을 연결하지 않는 이유는 무엇입니까?] (http://stackoverflow.com/questions/4879624/)) –

+0

그러나이 virtual : virtualenv를 생성하지 않아도 좋을 것입니다. 거기에 어떤 방법이 있어야합니다 ... –

0

당신은 임시 연결을 설정하기 위해 창을 설정 명령을 사용할 수 있습니다, 세트는 한 변수 환경적인 시스템에 연결하지 않는 쉘처럼 지속됩니다.

+1

이것이 사실이라면 답안에 예제를 추가하십시오. – martineau

+1

'set'은 환경 변수를 변경하고, 질문은 파일 연관성에 대해 묻습니다. 완전히 다른 것입니다. –

+0

환경 변수와의 파일 연결을 변경할 수 있다면 도움이 될 수 있지만 가능하지는 않습니다. –

3

Windows에서 assocftype 명령을 사용하여 파일 연결을 변경할 수 있습니다 (Windows Command-line Reference 참조).

당신은 현재 assoc 명령을 사용하여 평 파일과 관련된 어떤 파일 형식 볼 수 있습니다 : 당신이 다음 현재 Python.File 파일 형식은 사용과 관련된 어떤 프로그램을 확인할 수있는 정보를 통해

> assoc .py 
.py=Python.File 

ftype 명령을

> ftype Python.File 
Python.File="C:\Python2.6\python.exe" "%1" %* 
또한 관련 프로그램을 변경 ftype을 사용할 수 있습니다

:

> ftype Python.File="C:\Python2.7\python.exe" "%1" %* 
Python.File="C:\Python2.7\python.exe" "%1" %* 

협회는 Windows 레지스트리에 저장되어 있기 때문에이 방법은 영구적입니다 설정합니다. 즉, cmd.exe 세션을 종료하기 전에 원하는대로 세션을 설정하거나 복원해야합니다. 이 목적을 위해 하나 이상의 배치 파일을 사용하는 것이 좋습니다.

cmd.exe/k 매개 변수를 허용합니다.이 매개 변수는 초기에 원하는 파일 연결을 설정하는 시작시 배치 파일을 실행하는 데 사용할 수 있습니다. 그런 다음 cmd 세션을 종료하기 전에 복원 할 사용자 정의 quit.bat을 제공 할 수도 있습니다.

+0

cmd.exe 세션, 즉 병렬 cmd 세션 (다른 python virtualenv와 함께)으로 제한되어야하는 파일 연결의 범위가 필요합니다. 영향을받지 않아야한다. –

+0

@techtonik : Windows 연관에서는 전역 OS 레지스트리의 기능이므로 스크립트를 실행하는 데 사용하려는 Python 인터프리터의 버전을 명시 적으로 지정해야하는 것으로 보입니다. 그것은 당신이 cmd.exe 세션에서 /에 대한 연관을 설정하는 것보다 나쁘지 않을 것으로 보이기 때문에 왜 그렇게 심하게 피하고 싶은지 불분명합니다. – martineau

+0

예를 들어 사용자가 'django-admin.py'를 실행하면 virtualenv에 설치된 Python이 아니라 기본 Python으로 실행되고 스크립트가 실패합니다. 가능한 모든 지침을 다시 작성하고 '파이썬'접두사를 추가하는 것이 가능하지만, 가능하면이 문제를 피하고 싶습니다. –

1

가장 좋은 방법은 아마도 스크립트에서 PATH 변수를 설정하고 python script.py를 작성하여 파이썬을 호출 될 것입니다. 파일 연결은 전역이며 프로세스간에 공유됩니다. 환경 변수는 프로세스에 국한되어 있으므로이 솔루션을 제안합니다.

+0

PATH가 이미 필요에 따라 설정되었습니다. 나는 매번 파이썬을 타이핑하는 것을 피하고 싶다. –

+0

파일 연결은 전역이며 프로세스간에 공유됩니다. –

+0

그럼, 통역사를 PATH에 넣지 않고 스크립트를'python script.py'로 실행하지 않고서도 단일 cmd.exe 세션에서'script.py'를 실행할 방법이 없다는 것을 확인 했습니까? –