젠투에서 패키지가 Python 버전을 사용하도록 강제하는 방법은 무엇입니까?

젠투에서 패키지가 Python 버전을 사용하도록 강제하는 방법은 무엇입니까?

젠투 시스템의 모든 패키지에 하나의 Python3 버전만 사용하고 싶습니다. 그래서 설치된 버전을 찾아보니 3.6, 3.7, 3.8 세 가지 버전이 설치되어 있는 것을 알게 되었습니다. 모든 패키지를 3.8로 변환하고 이전 버전을 삭제하고 싶습니다.

내 계획:

  • Python 3.6과 3.7을 병합 해제합니다.
  • USEPython을 사용하는 패키지의 플래그 를 python3_8 -python3_7 -python3_6.
  • emerge --update --newusePython 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]

나는 이 동작을 이해하지 못합니다: 를 사용해야 한다고 명시되어 python-3.6있는데 왜 이머전이 설치를 하려고 합니까 ? 그리고 변수에 Python 사양이 포함되지 않은 이유는 무엇입니까? 변수보다 우선순위가 높고 재정의 하는 다른 구성 파일이 있습니까 ? 읽으면서 이해한 바에 따르면/etc/portage/package.use3.8USE/etc/portage/package.useUSE문서, 이런 일이 일어나서는 안 됩니다.


답변1

그런데 Python은 젠투의 일반적인 패키지가 아닙니다. (대부분 때문에운반자체는 Python에 따라 다릅니다.) => 다른 변수도 설정하는 것이 중요합니다. 그리고 일관성이 있어야 합니다. USE 플래그의 기본 개념은 사용자 기본 설정을 설정하기 위해 예약되어 있다는 것입니다. 더 나쁘게는 하나의 패키지가 작동하지 않게 만들 수 있지만 어떤 경우에도 전체 시스템을 손상시키지 않는 기본 설정입니다.

Python 버전은 확실히아니다사용자 기본 설정. 아니요! 사용자는 깨어나 결정할 수 없습니다. 나는 Phython XYZ만을 원합니다! 음... 예... 사용자는... 자신의 비용으로 할 수 있습니다.


귀하의 목표를 달성하기 위해 (제가 이해한 바에 따르면) 저는 절대로 다음 작업을 진행하지 않았을 것입니다(매우 위험하다*) 당신이 따라온 방식.

차라리 자세한 절차를 따랐으면 좋았을 텐데여기 단락 아래에버전 업그레이드.

그런데: 또한 다음 사항에도 주의하세요.e선택물건.

말할 것도 없고 관심도 없어서... 결국... 대체 왜 그걸 원하는 거죠?

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업데이트 명령을 시작하는 옵션을 추가하기만 하면 됩니다. 그런 다음 설치할 패키지뿐만 아니라 패키지를 트리에 가져온 패키지도 나열합니다.

.python:3.6

답변3

Python을 업그레이드할 때 수행하는 단계는 다음과 같습니다.젠투 위키):

  1. 에서 내가 사용하고 싶은 Python 버전(예: 및 )에 및 를 /etc/portage/make.conf추가하거나 업데이트합니다. 젠투 위키에서는 다음에서 이 작업을 수행하도록 권장합니다 . 이는 전역 변경이므로 둘 중 하나가 작동해야 합니다.PYTHON_TARGETSPYTHON_SINGLE_TARGETPYTHON_TARGETS="python3_9 python3_8"PYTHON_SINGLE_TARGET="python3_9"package.use

  2. emerge -puvDN --with-bdeps=y @world변경 사항에 만족하지 않는 패키지가 없는지 확인하려면 실행하세요 .

  3. USE개별 패키지에 대한 Python 플래그를 추가하거나 업데이트합니다 .

emerge -C나는 당신이 그렇지 않은 경우를 제외하고 는 사용하지 말 것을 강력히 권합니다.전적으로해당 패키지를 사용하는 패키지가 없는지 확인하세요! 특히 Python의 경우 emerge전혀 작동하지 않도록 만들 수도 있습니다 .

관련 정보