젠투에서 패키지가 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]

나는 이 동작을 이해하지 못합니다: 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이 강제로 제거되었으므로 --treeEmergency update 명령에 옵션을 추가하면 됩니다. 그런 다음 설치할 패키지뿐만 아니라 패키지를 트리로 가져오는 항목도 나열합니다.

.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전혀 작동하지 않게 만들 수도 있습니다.

관련 정보