나는 일반적으로 다음을 사용하여 이전 버전(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/bin
PATH
python3.12
/usr/local/bin/
python3
답변1
Python을 사용하고 있으므로 Python의 기본 버전은 env python3
변수의 첫 번째 버전에 따라 결정됩니다. 따라서 변수를 적절하게 구성하여 사용할 버전을 선택할 수 있습니다. 시스템 기본값을 원하면 포함된 다른 디렉터리 앞에 나타나도록 하고, 자신만의 Python 빌드를 원한다면 해당 버전이 포함된 디렉터리가 나타나는지 확인하세요. 전에.python3
PATH
PATH
/usr/bin
python3
python3
/usr/bin
당신이 제안하는 솔루션은 현재 적용할 수 있는 최악의 솔루션 중 하나입니다. 스크린샷에 표시된 내용을 보면 아직 시스템이 손상되지 않았습니다. #!/usr/bin/python3
shebang에 지정된 시스템 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
예상되는 다른 스크립트가 중단될 수 있습니다 .python3
python3
답변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
자세한 내용 및 기타 옵션은 리소스를 참조하세요 .