pip 동결은 pip를 통해 제거된 다음 Pacman을 통해 다시 설치된 패키지를 나열합니다.

pip 동결은 pip를 통해 제거된 다음 Pacman을 통해 다시 설치된 패키지를 나열합니다.

패키지 관리자를 통하지 않고 패키지를 설치하는 것은 매우 나쁜 생각이라고 들었기 때문에 pip를 통해 설치한 모든 패키지를 찾아보았습니다. 패키지는 pip의 공식 저장소에서도 쉽게 찾을 수 있습니다. 모든 패키지가 이와 같은 것은 아닙니다(AUR을 탐색하거나 직접 패키지할 수 있다는 것을 알고 있지만 지금은 공식 저장소에 머물려고 노력하고 있습니다). 따라서 pacman일부 패키지는 현재 설치된 상태로 유지하고 나머지는 .pippacman

이 작업을 수행하기 위한 내(인정적으로 원시적인) 작업 흐름은 다음과 같습니다.

  1. pip freeze | less;마이그레이션할 패키지 선택(기본적으로 임의)
  2. pacman -Ss python-packagename(찾을 수 없으면 중단하고 다른 패키지로 다시 시도하세요)
  3. sudo pip uninstall packagename
  4. sudo pacman -S python-packagename
  5. pacman파일 충돌이 보고되면 모든 종속 패키지에 대해 2~4단계를 반복한 다음 대상 패키지에서 5단계를 다시 시도합니다 .

pacman이제 올바른 파일을 표시하는 -list를 통해 패키지를 성공적으로 관리했다고 생각하며 , 흥미롭게도 pacman -Ql python-packagename패키지가 업데이트되어 패키지 업데이트 책임을 맡았음을 나타냅니다.pacmanpacman

그러나 문제는 pip freeze이러한 패키지가 pip.

예를 들어, 및 pip freeze | grep pylint둘 다 pacman -Qqe | grep pylint패키지가 설치되었음을 나타냅니다. sudo pacman -Rs python-pylint또는 를 통해 패키지를 성공적으로 제거 할 수 있습니다 sudo pip uninstall pylint.

이렇게 하면 - 패키지를 제거합니다.합격이든 pip합격이든pacman- 패키지가 pip freeze목록에서 사라지고 pacman -Qqe더 이상 아무것도 찾을 수 없습니다. 그런 다음 패키지를 다시 설치하면 pacman -S다시 나타납니다 pip freeze. 패키지를 다시 설치하면 pip해당 패키지가 pacman -Qqe.

pip패키지를 실행하여 제거한 sudo pip uninstall packagename다음 --user플래그(예: pip install --user packagename) 를 사용하여 다시 설치하면 sudo pip freeze패키지가 표시되지 않지만 pip freeze계속 표시됩니다. 패키지를 다시 설치하면 pacman두 목록 모두에 다시 나타납니다.


이 질문이 이전 질문과 중복된 것 같지 않습니다.이 링크에서;이 문제에서는 사용자가 제거를 통해 패키지를 제거할 수 없었 pip freeze으며 문제는 여러 다른 pip바이너리로 추적되었습니다.

이 경우 패키지를 제거하면 패키지 pip도 제거되고 pip freeze동일한 출력이 which pip표시됩니다 . 또한 동일한 출력을 생성합니다 .sudo which pip/usr/bin/pipsudo pip freezepip freeze

그러나 위에 링크된 질문에 대한 답변에 제시된 테스트는 제가 생각하기에 이상한 동작을 보여줍니다. (다음 테스트는 제거 및 재설치를 pylint통해 진행되었습니다 .)pippacman

$ python -c 'import pkg_name' &> /dev/null && echo installed || echo not installed
Using config file /home/[my user name]/.pylintrc
not installed

패키지가 실제로 설치되었습니다. 구성 파일 줄을 인쇄할 뿐만 아니라 패키지를 정상적으로 사용할 수 있습니다( pylint foo.py). 테스트를 인쇄하고 싶지 않습니까 installed?


주제에 대한 실제 질문에 대답하려면 다음을 수행하십시오.

  • pip실제로 어떤 패키지가 및를 통해서만 설치되고 어떤 패키지가 및를 통해 "설치" 되는지 확인하려면 어떻게 해야 합니까 ?pippacman
  • pip설치를 통해 패키지를 추적하는 광범위한 문제를 해결하려면 어떻게 해야 합니까 pacman?

답변1

저는 Python 스크립트를 작성했습니다(글머리기호 링크) 모든 Python 패키지에 pacman.

설치하다

스크립트를 다운로드하고 실행 가능하게 만듭니다.

$ wget https://gist.github.com/hoefling/314565368a66c308b4d7d407a3028cb7/raw/7b81553fa0a84b92a90fbaa0746482d0ec18516c/pip-query -O pip-query
$ chmod +x pip-query

용법

base/archlinux다음은 내가 설치한 Docker 컨테이너에서 이를 호출하는 예입니다 python-pip.python-wheel

$ ./pip-query
Package    Version Owner
---------- ------- -----------------
appdirs    1.4.3   python-appdirs
packaging  17.1    python-packaging
pip        9.0.1   python-pip
pyparsing  2.2.0   python-pyparsing
setuptools 39.2.0  python-setuptools
six        1.11.0  python-six
wheel      0.31.1  python-wheel

출력은 의 출력과 유사 pip list --format=columns하지만 OwnerPython 패키지를 소유하는 시스템 패키지의 이름을 인쇄하는 추가 열이 있습니다.

직접 설치된 패키지를 사용하여 테스트해 보겠습니다 pip.

$ sudo pip install tqdm
...
$ ./pip-query
Package    Version Owner
---------- ------- -----------------
appdirs    1.4.3   python-appdirs
packaging  17.1    python-packaging
pip        9.0.1   python-pip
pyparsing  2.2.0   python-pyparsing
setuptools 39.2.0  python-setuptools
six        1.11.0  python-six
tqdm       4.23.4
wheel      0.31.1  python-wheel

이 열의 Owner행에 빈 셀이 있는데 이는 설치되지 않았 tqdm음을 나타냅니다 . 제거 :tqdmpacmantqdmpip

$ sudo pip uninstall -y tqdm

그것을 설치하십시오 pacman:

$ pacman -S python-tqdm

영구 설치

원하는 경우 적절한 실행 파일이라고 부르는 것처럼 pip-query파일을 PATH, 바람직하게는 로컬 에 넣으십시오.$HOME/.local/bin

$ pip-query

다른 패키지 관리자에 적응

원하는 경우 다른 패키지 관리자와 함께 작동하도록 스크립트를 쉽게 조정할 수 있습니다. 예를 들어, ['pacman', '-Qqo', file]로 변경하면 ['qfile', '-q', file]스크립트는 추가 수정 없이 젠투에서 실행됩니다*. 패키지 관리자가 일반 패키지 이름 인쇄를 지원하지 않는 경우 out정규식이나 다른 방법을 사용하여 문자열에서 관련 정보를 추출하십시오.

일괄 재설치 패키지pacman

이를 수정 pip-query하거나 Unix 철학을 따르고 bash 명령을 작성하여 다시 설치할 수 있습니다. 그러나 pacman아래 예와 같이 여러 가지 권장 사항을 처리하고 권장 사항 없이 상황을 구현해야 합니다. 내 시도는 다음과 같습니다(bash 전문가는 아님).

$ ./pip-query | tail -n +3 | while read line ; do split=(${line}); \
> if [ "${#split[@]}" -eq "2" ]; then pkgname=${split[0]}; \
> echo -e "Suggestion: pip uninstall -y $pkgname && pacman -S $(pacman -Sspq $pkgname | tr '\n' ' ')"; \
> fi; done
Suggestion: pip uninstall -y tqdm && pacman -S python-tqdm python2-tqdm

이를 강화하면 재설치 작업을 위한 자동화된 솔루션을 갖게 됩니다.


*: 가정적인 app-portage/portage-utils발생.

관련 정보