Windows를 실행 중이며 명령 줄에서 프로그램을 실행할 때 셸 / OS가 레지스트리 설정에 따라 Python을 자동으로 실행합니다. 동일한 컴퓨터에 2.x 및 3.x 버전의 Python을 설치하면 문제가 발생합니까?
같은 컴퓨터에서 2.x 스크립트를 계속 실행하면서 Python 3을 가지고 놀고 싶습니다.
답변
공존을위한 공식 솔루션 은 Python 3.3.0 에 포함 된 Windows 용 Python Launcher , PEP 397로 보입니다 . 릴리스 덤프 설치 및 에 발사기 ( 다음과 관련된) 과 각각 스크립트.py.exe
pyw.exe
%SYSTEMROOT%
C:\Windows
py
pyw
새 실행기를 사용하려면 (자신의 연결을 수동으로 설정하지 않고) “확장자 등록”옵션을 활성화 된 상태로 두십시오. 왜 그런지 잘 모르겠지만 내 컴퓨터에서는 Py 2.7을 “기본”(런처의)으로 두었습니다.
명령 행에서 직접 호출하여 스크립트를 실행하면 실행기를 통해 스크립트를 라우팅하고 shebang (있는 경우)을 구문 분석합니다. 런처를 명시 적으로 호출하고 스위치를 사용할 수도 있습니다 py -3 mypy2script.py
.
모든 방식의 세방이 작동하는 것 같습니다
#!C:\Python33\python.exe
#!python3
#!/usr/bin/env python3
원치 않는 학대뿐만 아니라
#! notepad.exe
답변
내 설정은 다음과 같습니다.
- Windows 설치 프로그램으로 Python 2.7 및 3.4를 모두 설치하십시오 .
C:\Python34
(기본 설치 경로)로 이동하여 python.exe를 python3.exe로 변경하십시오.- 포함 할 환경 변수 편집
C:\Python27\;C:\Python27\Scripts\;C:\Python34\;C:\Python34\Scripts\;
이제 명령 행 python
에서 2.7 및 python3
3.4에 사용할 수 있습니다 .
답변
둘 다 설치할 수 있습니다.
스크립트 앞에 이것을 작성해야합니다.
#!/bin/env python2.7
또는 결국 …
#!/bin/env python3.6
최신 정보
내 솔루션은 Google 에서 빠른 검색 후 Unix와 완벽하게 작동 하며 Windows 솔루션은 다음과 같습니다.
#!c:/Python/python3_6.exe -u
같은 것 : 스크립트 앞에서.
답변
버전 3.3부터 Python은 Windows 용 Launcher 유틸리티 https://docs.python.org/3/using/windows.html#python-launcher-for-windows 를 도입했습니다 .
따라서 여러 버전의 Python을 사용할 수 있습니다.
- Python 2.x 설치 (x는 필요한 버전 임)
- Python 3.x를 설치하십시오 (x는 필요한 버전입니다. 3.x> = 3.3 버전이 있어야합니다)
- 명령 프롬프트 열기
- py -2.x 를 입력 하여 Python 2.x를 시작하십시오.
- py -3.x 를 입력 하여 Python 3.x를 시작하십시오.
답변
쉘의 2.5, 2.6 및 3.0을 한 줄 배치 스크립트 형식으로 사용하고 있습니다.
:: The @ symbol at the start turns off the prompt from displaying the command.
:: The % represents an argument, while the * means all of them.
@c:\programs\pythonX.Y\python.exe %*
그것들의 이름을 지정하고 pythonX.Y.bat
PATH 어딘가에 넣으십시오. 선호하는 부 버전 (즉, 최신 버전)의 파일을로 복사하십시오 pythonX.bat
. (예 🙂 어디서나 copy python2.6.bat python2.bat
사용할 수 있습니다 python2 file.py
.
그러나 이것은 Windows 파일 연결 상황에 도움이되지 않거나 심지어 영향을 미치지 않습니다. 이를 위해서는 #!
라인 을 읽고 .py 및 .pyw 파일과 연결 하는 시작 프로그램이 필요 합니다.
답변
환경 변수에 두 가지를 모두 추가하면 두 실행 파일의 이름이 동일하기 때문에 충돌이 발생합니다 python.exe
.
그중 하나의 이름 만 바꾸십시오. 제 경우에는 이름을로 변경했습니다 python3.exe
.
내가 도망 그래서 python
그것을 실행할 python.exe
2.7 인 내가 실행할 때 python3
이 실행됩니다 python3.exe
이는 3.6
답변
여기 있습니다 …
winpylaunch.py
#
# Looks for a directive in the form: #! C:\Python30\python.exe
# The directive must start with #! and contain ".exe".
# This will be assumed to be the correct python interpreter to
# use to run the script ON WINDOWS. If no interpreter is
# found then the script will be run with 'python.exe'.
# ie: whatever one is found on the path.
# For example, in a script which is saved as utf-8 and which
# runs on Linux and Windows and uses the Python 2.6 interpreter...
#
# #!/usr/bin/python
# #!C:\Python26\python.exe
# # -*- coding: utf-8 -*-
#
# When run on Linux, Linux uses the /usr/bin/python. When run
# on Windows using winpylaunch.py it uses C:\Python26\python.exe.
#
# To set up the association add this to the registry...
#
# HKEY_CLASSES_ROOT\Python.File\shell\open\command
# (Default) REG_SZ = "C:\Python30\python.exe" S:\usr\bin\winpylaunch.py "%1" %*
#
# NOTE: winpylaunch.py itself works with either 2.6 and 3.0. Once
# this entry has been added python files can be run on the
# commandline and the use of winpylaunch.py will be transparent.
#
import subprocess
import sys
USAGE = """
USAGE: winpylaunch.py <script.py> [arg1] [arg2...]
"""
if __name__ == "__main__":
if len(sys.argv) > 1:
script = sys.argv[1]
args = sys.argv[2:]
if script.endswith(".py"):
interpreter = "python.exe" # Default to wherever it is found on the path.
lines = open(script).readlines()
for line in lines:
if line.startswith("#!") and line.find(".exe") != -1:
interpreter = line[2:].strip()
break
process = subprocess.Popen([interpreter] + [script] + args)
process.wait()
sys.exit()
print(USAGE)
방금이 스레드를 읽었습니다. (필요한 것이기 때문에). 우분투와 Windows 모두에 Pythons 2.6.1과 3.0.1이 있습니다. 그래도 문제가 해결되지 않으면 여기에 수정 사항을 게시하십시오.