내 컴퓨터에 두 가지 버전의 Python3(예: 3.11.2 및 3.12)이 설치되어 있는 경우 Python 스크립트를 실행할 때 사용할 기본 버전을 어떻게 설정합니까?

내 컴퓨터에 두 가지 버전의 Python3(예: 3.11.2 및 3.12)이 설치되어 있는 경우 Python 스크립트를 실행할 때 사용할 기본 버전을 어떻게 설정합니까?

나는 일반적으로 다음을 사용하여 이전 버전(3.11.2)을 설치했습니다.쉬운패키지 관리자 이상(3.12)은 소스에서 수동으로 수행됩니다. 다음과 같이 Python 스크립트를 실행할 때:

./python_script.py

스크립트는 최신 버전 대신 이전 버전을 사용합니다. 이식성의 이유로 #!/usr/bin/env python3스크립트 시작 부분에 기본 shebang 줄을 그대로 두고 싶습니다 .

다음은 샘플 테스트 스크립트입니다.

#!/usr/bin/env python3

import sys

def main():
  print(sys.version)

main()

여기에 이미지 설명을 입력하세요.

편집: 위 구성을 사용하면 현 시점에서 가장 빠른 해결책은(향후 결과로 인해 최선이 아닐 수도 있습니다. 자세한 설명은 아래 커뮤니티의 답변과 의견을 참조하세요) python3 심볼릭 링크의 대상을 변경하는 것입니다./etc/대안도착하다/usr/local/bin/python3.12내 python3.12 바이너리는 어디에 저장되어 있나요?

여기에 이미지 설명을 입력하세요.

편집 2: 두 번째 스크린샷에 표시된 대로 ./myscript.py디렉터리가 환경 변수의 디렉터리 앞에 있는지 확인 /usr/local/bin하고 바이너리 이름을 ./usr/binPATHpython3.12/usr/local/bin/python3

답변1

Python을 사용하고 있으므로 Python의 기본 버전은 env python3변수의 첫 번째 버전에 따라 결정됩니다. 따라서 변수를 적절하게 구성하여 사용할 버전을 선택할 수 있습니다. 시스템 기본값을 원하면 포함된 다른 디렉터리 앞에 나타나도록 하고, 자신만의 Python 빌드를 원한다면 해당 버전이 포함된 디렉터리가 나타나는지 확인하세요. 전에.python3PATHPATH/usr/binpython3python3/usr/bin

당신이 제안하는 솔루션은 현재 적용할 수 있는 최악의 솔루션 중 하나입니다. 스크린샷에 표시된 내용을 보면 아직 시스템이 손상되지 않았습니다. #!/usr/bin/python3shebang에 지정된 시스템 Python 스크립트는 여전히 예상한 모듈을 찾을 수 있습니다. Python 3.12를 가리키도록 변경하면 /usr/bin/python3이러한 스크립트는 특히 시스템에 설치된 3.11 모듈에 액세스할 수 없습니다 python3-apt. 이는 불행한 결과를 초래할 수 있습니다.

당신이 그것을 자신의 스크립트에 지정하기 때문에 #!/usr/bin/env python3그것에 의존할 수 있지만 PATH, 나는 여전히 PATH기반 접근 방식이 당신의 경우에 더 적합하다고 생각합니다. 시스템 Python 스크립트를 손상시키지 않고 첫 번째 스크립트를 PATH가리키도록 어디에서나 변경할 수도 있습니다 .python3아니요Python을 사용하세요 PATH.)

답변2

보충하다@StephenKitt의 훌륭한 답변, Debian 기반 시스템에서는 여러 버전의 Python 패키지를 동시에 설치할 수 있습니다. 예를 들어 Ubuntu 22.04에서는 3.10과 3.11을 설치했습니다.

$ aptitude search -F%p '~i ~n "^python[0-9.]*$"'
python3
python3.10
python3.11

패키지 python3는 에 의존 python3.10하며 python3실행 파일은 에 대한 심볼릭 링크입니다 python3.10.

$ zstat +link --  ${(v)commands[(I)python[0-9.]#]}
/usr/bin/python3 python3.10
/usr/bin/python3.10
/usr/bin/python3.11

원하지 않는다심볼릭 링크를 수동으로 변경하십시오. 버전 간에는 종종 비호환성이 있으며 Python 모듈은 Python 버전 간에 공유되지 않으므로 python3 심볼릭 링크를 변경하면 python또는(또는 요즘에는 일반적으로 심볼릭 링크)이 있고 python3이 3.10이 될 것으로 예상하고 3.10에 액세스할 수 있는 스크립트가 중단됩니다. 설치된 Python 모듈 .#! /usr/bin/env python3#! /usr/bin/python3#! /bin/python3/bin/usr/bin

따라서 설치된 다른 Python 버전이 필요한 스크립트를 호출해야 하고 shebang을 로 변경할 수 없는 경우 다음 #! /usr/bin/python3.12과 같이 호출하면 됩니다.

python3.12 /path/to/that-file.py

또는 하나를 만드세요:

mkdir ~/.python3-is-python3.12
ln -s /usr/bin/python3.12 ~/.python3-is-python3.12/python3

그리고 그것을 ~/.python3-is-python3.12네 앞에 놓아라.$PATH 하지만 스크립트를 호출하는 경우에만, 전역적으로 설정하면 시스템 기본값이 될 것으로 #! /usr/bin/env python3예상되는 다른 스크립트가 중단될 수 있습니다 .python3python3

답변3

나는 이 질문이 패키지 관리자에 대해서만 묻는다는 것을 알고 있으며 apt다른 답변은 이 측면을 잘 다루고 있습니다.

그러나 서로 다른 Python 버전 및/또는 서로 다른 종속성이 필요한 여러 개의 서로 다른 Python 프로젝트에서 작업하는 경우 가상 환경(가상 환경 venv)을 사용하여 프로젝트의 Python 버전 및 종속성을 관리하는 것이 좋습니다.

3.11과 같은 프로젝트에 대한 가상 환경을 설치하려면 다음을 실행하십시오.

python3.11 -m venv venv

venv그러면 가상 환경을 포함하는 디렉터리가 생성됩니다 .

그런 다음 환경을 사용하려면 다음을 입력하십시오.

. venv/bin/activate

python그 시점부터 현재 셸에서는 버전 번호 없이 실행할 수 pip있으며 올바른 환경이 사용됩니다. 이 환경을 종료하려면 를 입력하십시오 deactivate.

새 환경에서는 pip종속성만 설치되므로 프로젝트 간에 종속성 불일치가 발생하지 않습니다. 종속성이 설치되면 requirements.txt프로젝트용 파일을 쉽게 만들 수도 있습니다.pip freeze > requirements.txt

답변4

당신은 데비안(또는 그 파생물 중 하나)을 사용하고 있으므로 이 update-alternatives유틸리티를 사용하는 것을 고려할 수 있습니다.

예를 들어 기본값을 /usr/local/bin/에 있는 버전 3.12로 설정하려면 다음을 수행하십시오.

sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.12 10

응답은 다음과 같아야 합니다(실제로 Python 3.12가 설치되어 있지 않습니다).

update-alternatives: using /usr/local/bin/python3.12 to provide /usr/bin/python3 (python3) in auto mode

man update-alternatives자세한 내용 및 기타 옵션은 리소스를 참조하세요 .

관련 정보