기본 및 적절한 패키지 종속성으로 Python 설치 복원


14

나는 파이썬 설치 (2와 3)로 많은 것을 해왔고 일부 패키지는을 사용 apt-get하지만 대부분은을 사용 하여 많은 패키지를 설치했습니다 pip. 또한 많은 설치된 apt패키지를 pip최신 버전으로 업그레이드했습니다.

내 질문은 :
어떻게 모든 변경 사항을 되돌리고 모든 pip설치된 Python 패키지를 제거 하고 기본 사전 설치된 패키지 세트를 기본 저장소 버전에 유지하고 apt-get다른 소프트웨어의 종속성으로 만 설치 한 패키지를 항상 저장소로 다운 그레이드하는 방법 필요한 경우 버전.

시스템에 깔끔한 Python 환경을 만들고 virtualenvs에서만 수정하고 싶습니다.

시스템을 다시 설치하지 않고도 가능합니까? 어떻게 접근할까요?


답변:


5

필자는 관리하는 Python 패키지를 나열하는 것으로 시작합니다 apt-get(다음 1- 라이너는 실행하는 데 몇 초가 걸리며 참을성 있음).

$ for pyfile in `ls /usr/lib/python2.7/dist-packages`; do dpkg -S "/usr/lib/python2.7/dist-packages/${pyfile}" | sed 's/:.*//g'; done | sort -u

참고 : 필요한 경우 2.7을 원하는 Python 버전으로 바꾸십시오.

그런 다음 수동으로 설치 한 패키지를 제거하십시오. 어떤 패키지를 설치했는지 확실하지 않은 경우 다음 명령을 사용하여 모든 패키지 목록을 수동으로 설치할 수 있습니다 ( 이 질문 참조 ).

$ comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

그런 다음 수동으로 설치 한 Python 패키지를 제거하십시오 (예 :

$ sudo apt-get remove python-tk python-scipy

다음으로, pip를 사용하여 설치 한 패키지를 알고 싶습니다.

$ ls -ltd /usr/local/lib/python2.7/dist-packages/*

이 명령은 마지막 수정 날짜별로 정렬 된 pip 설치 디렉토리의 내용을 나열하므로 직접 설치 한 패키지를 쉽게 찾을 수 있습니다. 예를 들어 gcloud제거하고 싶지 않은 많은 pip 패키지를 설치하는 Google 도구를 설치했지만 목록을 살펴보면 동일한 시간에 모두 설치되었는지 쉽게 알 수 있으므로 어떤 패키지를 사용해야하는지 알고 있습니다 남겨두고 어떤 것을 제거 할 수 있습니까? pip 패키지를 제거하기 전에 설치된 패키지 목록의 스냅 샷을 작성해야합니다.

$ sudo pip freeze > $HOME/pip_freeze_snapshot.txt

그런 다음 원하는 패키지를 제거하십시오. 예를 들면 다음과 같습니다.

$ sudo pip uninstall py pytest

마지막으로, 일부 pip 패키지가 사용자 디렉토리에 설치되었을 수 있습니다. 아마도 당신은 그걸로 괜찮을지 모르지만 그렇지 않다면 그것들을 나열 할 수 있습니다 :

$ ls -ltd $HOME/.local/lib/python2.7/site-packages/*

이러한 모든 패키지를 제거하려면이 디렉토리를 삭제하면됩니다. 그렇지 않으면 다음과 같이 개별 패키지를 제거하십시오.

$ pip uninstall tensorflow

다른 파이썬 버전 (예 : 3.5)을 확인하는 것을 잊지 마십시오.


너무 많은 패키지를 제거하면 시스템이 손상 될 수 있다는 공공 안전 발표를 권장하지만 그렇지 않은 경우 이는 훌륭한 안내서입니다. (예를 들어, 나는 기꺼이 내가 한이었다 mv보다는 rm내에서 /usr/local/lib/python3.6내가 매우 기본적인 시스템 기능 거기에 몇 가지 필요한 것을 나중에 몇 분을 발견하기 때문이다.
craq
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.