젠투 시스템의 모든 패키지에 하나의 Python3 버전만 사용하고 싶습니다. 그래서 설치된 버전을 찾아보니 3.6, 3.7, 3.8 세 가지 버전이 설치되어 있는 것을 발견했습니다. 모든 패키지를 3.8로 변환하고 이전 버전을 제거하고 싶습니다.
내 계획:
- Python 3.6과 3.7을 병합 해제합니다.
USE
Python을 사용하여 패키지의 플래그를python3_8 -python3_7 -python3_6
.emerge --update --newuse
Python 3.8을 사용하려면 이러한 패키지를 다시 빌드하세요 .
따라서 Python 3.6을 제거한 후:
emerge --ask -C dev-lang/python:3.6
이 줄을 추가했습니다
virtual/python-ipaddress python3_8 -python3_7 -python3_6
그리고 /etc/portage/package.use
달리다
emerge --ask --update --newuse --deep virtual/python-ipaddress
나는 얻다
These are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild NS ] dev-lang/python-3.6.11-r2 [2.7.18-r1, 3.7.8-r2, 3.8.4-r1] USE="(threads%*)"
Would you like to merge these packages? [Yes/No]
나는 이 동작을 이해하지 못합니다: Emergency를 사용해야 한다고 명시되어 python-3.6
있는데 /etc/portage/package.use
왜 Emerging을 설치해야 합니까 3.8
? 이 USE
변수에 Python 사양이 포함되지 않은 이유는 무엇입니까? 이 변수보다 우선순위가 높고 /etc/portage/package.use
이를 재정의하는 다른 프로필이 있습니까 USE
? 내가 읽은 내용을 이해하는 한문서, 이런 일은 일어나서는 안 됩니다.
답변1
그런데 Python은 Gentoo의 일반적인 패키지가 아닙니다. (주로 왜냐하면나르다그 자체는 파이썬에 달려 있습니다. ) => 다른 변수를 설정하는 것도 중요합니다. 그리고 일관성이 있어야 합니다. USE 플래그의 기본 개념은 사용자 기본 설정을 설정하기 위해 예약되어 있다는 것입니다. 최악의 경우 기본 설정으로 인해 특정 패키지가 제대로 작동하지 않을 수 있지만 어떤 식으로든 전체 시스템이 손상되지는 않습니다.
Python 버전은 다음과 같아야 합니다.아니요사용자 기본 설정. 아니요! 사용자는 깨어나서 결정할 수 없습니다: 나는 단지 Python XYZ를 원합니다! 음... 예... 사용자는 자비로... 할 수 있습니다.
귀하의 목표를 달성하기 위해 (내가 아는 한) 나는 절대 계속하지 않을 것입니다 (위험*) 당신이 따르는 방식.
자세한 절차를 밟고 싶습니다.여기에 단락버전 업그레이드.
그런데: 참고하세요전자 선택물건.
관심 때문에 그런 건 아니고... 결국... 도대체 왜 그걸 원하는 걸까요?
Tux ~ $ equery size python-2.7.18-r1
dev-lang/python-2.7.18-r1
Total files : 4177
Total size : 63.28 MiB
Tux ~ $ equery size python-3.7.8-r2
dev-lang/python-3.7.8-r2
Total files : 6616
Total size : 98.74 MiB
총 200MB 미만의 데이터를 복원하면 다른 재미있는 일이 망가질 수 있습니까?
알아채다! : 넌 절대 그럴 수 없어변화, 사용 플래그를 조정하여 한 언어 버전에서 다른 언어 버전으로 프로그램을 이식합니다. 프로그램이 아직 호환되지 않으면 모든 것을 깨뜨리는 다른 라이브러리에 링크하기만 하면 됩니다.
높은 위험(*): 설치된 패키지가 해당 패키지에 엄격하게 의존하지 않는다는 사실을 확인하기 전에는 패키지 병합을 절대로 시도하지 않습니다. Python 2에서 Python 3으로 이식되지 않은 프로그램을 말하는 것입니다. (나는 개인적으로 내 시스템에 python-2.7.18-r1이 존재한다는 긍정적인 증거를 얻었습니다)
그렇지 않습니다. 3.6과 3.7을 성공적으로 제거하면 glib(2.62.6), Wireshark, git보다 거의 확실하게 중단될 것입니다. 내가 아는 한 최신 안정 버전은 아직 3.8과 호환되지 않습니다.. .
이 섹션에서 복구할 가능성이 전혀 없이 포티지 자체를 손상시켰을 수도 있습니다. 백업 덕분에... 거의 확실하게... 생성을 피했습니다...
답변2
이전 답변에서 이미 지적했듯이 패키지를 제거한 다음 더 이상 필요하지 않도록 구성을 변경하는 것은 안전하지 않습니다. 안전한 방법은 그 반대입니다. 구성을 변경하면(USE 플래그 조정, 버전 차단 해제) 시스템 자체가 패키지가 필요하지 않다는 것을 인식하고(이 경우 여러 패키지를 다시 설치해야 할 수도 있음) 시스템이 패키지 자체를 제거합니다. emerge --depclean
.
원래 질문의 경우 Python이 강제로 제거되었으므로 --tree
Emergency update 명령에 옵션을 추가하면 됩니다. 그런 다음 설치할 패키지뿐만 아니라 패키지를 트리로 가져오는 항목도 나열합니다.
.python:3.6
답변3
Python을 업그레이드할 때 수행한 단계는 다음과 같습니다.젠투 위키):
에서 사용하려는 Python 버전(예: 및 )에 및 를
/etc/portage/make.conf
추가하거나 업데이트합니다 . 젠투 위키에서는 다음에서 이 작업을 수행할 것을 권장합니다 . 이는 전역적인 변경이므로 둘 다 작동해야 합니다.PYTHON_TARGETS
PYTHON_SINGLE_TARGET
PYTHON_TARGETS="python3_9 python3_8"
PYTHON_SINGLE_TARGET="python3_9"
package.use
emerge -puvDN --with-bdeps=y @world
변경 사항에 만족하지 않는 패키지가 없는지 확인하려면 실행하세요 .USE
개별 패키지에 대한 Python 플래그를 추가하거나 업데이트합니다.
emerge -C
당신이 아닌 이상 사용하지 않는 것이 좋습니다전적으로이 패키지를 사용하는 패키지가 없는지 확인하세요! 특히 Python의 경우 emerge
전혀 작동하지 않게 만들 수도 있습니다.