파이썬 setup.py 제거


785

에 python 패키지를 설치했습니다 python setup.py install.

제거하려면 어떻게합니까?


52
허용 된 답변이 구식입니다. 사용하십시오 pip uninstall <your_package>. stackoverflow.com/questions/1231688/…를 참조하십시오 .
Joachim W

21
pip 제거는 더 이상 올바른 대답이 아닙니다. 여기 증거가 있습니다. [sri @ localhost python] $ pip uninstall foo DEPRECATION : distutils가 설치된 프로젝트 (foo)를 제거하는 것은 더 이상 사용되지 않으며 향후 버전에서 제거 될 예정입니다. distutils 프로젝트를 제거하면 프로젝트가 부분적으로 만 제거되기 때문입니다.
shrewmouse

더 이상 표시되지 않는 @shrewmouse.
JC Rocamonde

@JCRocamonde 내가 만든 패키지로 최신 버전의 pip가 표시 It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.되므로 여전히 문제입니다.
Josh

setup.py 파일의 상단에있는 @Josh는 "distutils.core import setup에서"대신 "setuptools import setup에서"를 수행합니다.
bigjake 2016 년

답변:


976

참고 : 사용하지 마십시오 python setup.py install사용pip install .

모든 파일을 수동으로 제거하고 설치에서 수동으로 수행 한 다른 작업을 실행 취소해야합니다.

모든 파일 목록을 모르는 경우 --record옵션을 사용하여 다시 설치하고 생성 된 목록을 살펴볼 수 있습니다.

설치된 파일 목록을 기록하려면 다음을 사용하십시오.

python setup.py install --record files.txt

설치 제거를 원하면 xargs를 사용하여 제거를 수행 할 수 있습니다.

xargs rm -rf < files.txt

또는 Windows를 실행중인 경우 Powershell을 사용하십시오.

Get-Content files.txt | ForEach-Object {Remove-Item $_ -Recurse -Force}

그런 다음 포함 디렉토리도 삭제하십시오 (예 : /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/my_module-0.1.egg/on) macOS. 파일이 없지만 파이썬은 여전히 ​​빈 모듈을 가져옵니다.

>>> import my_module
>>> my_module.__file__
None

일단 삭제되면 파이썬은 다음을 보여줍니다.

>>> import my_module
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'my_module'

6
이것이 작동하지 않으면 다음과 같이 sudo를 추가하십시오.cat files.txt | xargs sudo rm -rf
saroele

21
공백이있는 파일을 엉망으로 만듭니다. 아래 답변을 참조하십시오 : stackoverflow.com/a/25209129/14456
Ian Kelling

1
setup.py를 사용하는 소스 코드가있는 패키지를 어떻게 다시 설치할 수 있습니까?
쿠스

5
이것은 또한 빈 디렉토리를 그대로 둡니다.
Dilawar

3
안녕하세요, cat files.txt를 시도 할 때 일부 파일에 대한 제안을 시도했습니다. | xargs rm -rf 그것은 / usr / local / bin / pydoc 또는 / usr / local / bin / idle과 같이 sudo 모드에서도 권한이 거부되었다고 말합니다.

212

나를 위해 다음이 대부분 작동합니다.

핍을 설치하십시오. 예 :

$ easy_install pip

설치된 패키지의 이름이 pip 관점에서 어떻게 지정되어 있는지 확인하십시오.

$ pip freeze

여기에는 설치 한 모든 패키지의 이름이 표시되고 pip에서 감지 한 패키지가 표시됩니다. 이름은 언젠가는 길고 이후에 표시되는 패키지 이름 만 사용하십시오 #egg=. 대부분의 경우 버전 부분 ( ==또는 뒤에 오는 것)을 무시할 수도 있습니다 -.

그런 다음 패키지를 제거하십시오.

$ pip uninstall package.name.you.have.found

패키지 제거에 대한 확인을 요청하면 운이 좋은 사람이며 제거됩니다.

pip는 pip에 의해 설치된 모든 패키지를 감지합니다. 또한 easy_install 또는 setup.py를 통해 설치된 대부분의 패키지를 감지해야하지만 드물게 실패 할 수 있습니다.

다음은 ttr.rdstmcMS Windows에서 이름이 지정된 패키지를 사용한 로컬 테스트의 실제 샘플입니다 .

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev

$ python setup.py develop
.....
.....
Finished processing dependencies for ttr.rdstmc==0.0.1dev

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
-e hg+https://vlcinsky@bitbucket.org/vlcinsky/ttr.rdstmc@d61a9922920c508862602f7f39e496f7b99315f0#egg=ttr.rdstmc-dev
ttr.utcutils==0.1.1dev

$ pip uninstall ttr.rdstmc
Uninstalling ttr.rdstmc:
  c:\python27\lib\site-packages\ttr.rdstmc.egg-link
Proceed (y/n)? y
  Successfully uninstalled ttr.rdstmc

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev

2015 년 5 월 20 일 수정

위에 쓰여진 모든 내용이 여전히 적용됩니다. 어쨌든 지금은 약간의 수정이 가능합니다.

Python 2.7.9 및 Python 3.4에서 pip 설치

최신 Python 버전에는 ensurepip오프라인 상태에서도 pip를 설치할 수 있는 패키지 가 제공됩니다.

$ python -m ensurepip-업그레이드

데비안 제시와 같은 일부 시스템에서는 시스템 파이썬 설치가 중단되는 것을 막기 위해 사용할 수 없습니다.

grep또는 사용find

위의 예에서는 grep설치 한 것으로 가정합니다 . (내 컴퓨터에 MS Windows가있을 때) Linux 유틸리티 세트 (grep 포함)를 설치했습니다. 또는 기본 MS Windows를 사용 find하거나 해당 필터링을 무시하고 감지 된 Python 패키지의 더 긴 목록에서 이름을 찾으십시오.


1
이것이 작동하기 위해 어떤 포장 도구 / 버전을 사용하고 있습니까? ( distutils, distribute등 ...)
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

1
사용 setuptools합니다. bitbucket.org/vlcinsky/ttr.aws.utils.s3 (완벽하지는 않음)을 확인할 수 있습니다 . 어쨌든, 네임 스페이스 패키지를 사용하는 것에 상당히 만족하지 못합니다. 때로는 가져 오기가 눈에 띄는 이유없이 깨졌습니다. 그러나 또 다른 이야기입니다.
Jan Vlcinsky

1
나 자신을 교정. 가져 오기하더라도 setuptools실제로 사용 distribute합니다. 또 다른 교훈 : pypi에서 내 자신의 패키지를 설치하고 동일한 네임 스페이스를 로컬로 공유하는 다른 패키지를 개발하려고 할 때 사용 하지 말고 $ pip install <the package> 사용하십시오 $ easy_install <the package>. 그렇지 않으면 개발 패키지를 가져올 때 충돌이 발생합니다.
Jan Vlcinsky

1
다른 사람들을 돕기 위해 : 나는 뿌리가 아니기 때문에 집에 모든 것을 설치합니다. 여기 내가 한 일이 easy_install --user --prefix=$HOME pip있습니다. 그럼 난 내 PATH에 다음을 추가 : ln -s /home/tflutre/.local/bin/pip ~/bin, ln -s /home/tflutre/.local/bin/pip2.7 ~/binln -s /home/tflutre/.local/bin/pip2 ~/bin.
tflutre

3
대답은 훨씬 쉬우 며 pip는 일반적으로 Python과 함께 제공됩니다. 명령 프롬프트 / 터미널에서 사용하는 것이 간단 pip uninstall module하거나 python -m pip uninstall module작동해야합니다. 또한 파이썬의 일부인 크로스 플랫폼이어야합니다.
Edward

81

# 1 답변에는 문제가 있습니다 :

  • Mac에서는 작동하지 않습니다.
  • 공백이나 다른 특수 문자가 포함 된 파일이 설치되면 xargs명령이 실패하고 개별 단어와 일치하는 모든 파일 / 디렉토리가 삭제됩니다.
  • -r인은 rm -rf당신이 원하지 않는 일을 삭제할 수 있습니다 불필요하고 최악이다.

대신 유닉스 계열의 경우 :

sudo python setup.py install --record files.txt
# inspect files.txt to make sure it looks ok. Then:
tr '\n' '\0' < files.txt | xargs -0 sudo rm -f --

그리고 창문의 경우 :

python setup.py bdist_wininst
dist/foo-1.0.win32.exe

setup.py설치 제거와 관련하여 해결할 수없는 문제가 있어서 일반적인 경우에는 방해가되지 않습니다. 더 완전한 대답을 보려면 다음 위키 페이지를 참조하십시오.

https://ofswiki.org/wiki/Uninstalling_setup.py_install


3
왜 공감 된 제안 아래에 제안을 남기지 않습니까? 이러한 "심각한 문제"는 코너 사례에 관한 것입니다.
lpapp

17
나는 upvoted 아래에 의견을 남겼습니다. 내 의견은 "추가 의견로드"링크 아래에 묻혀 있으며, 그 중 몇 명만 클릭하면됩니다. 또한 말할 것이 더 많기 때문에 나 자신도 대답했다. 내 답변의 링크. 또한 코너 케이스는 파일에 공백이있을 때 내 마음에 오는 첫 번째 용어가 아닙니다.
Ian Kelling

가치있는 것에 대해서는, 이것이 줄 바꿈이 포함 된 파일 이름에서 실패 할 것이라고 생각합니다.
잭 오코너

2
OS X Mavericks에서 최소한 xargs에는 -d 옵션이 없습니다. 왜? 애플이 당신을 사랑하기 때문입니다. 어쨌든 이것은 위와 동일한 효과를 가지며 공백 등으로 안전합니다. 그러나 Bash에만 해당됩니다. --record to files.txt로 설치를 실행 한 후 :OIFS=$IFS; IFS=$'\n'; FILES=( $( cat files.txt ) ); IFS=$OIFS; sudo rm -rf "${FILES[@]}"
Joseph Sikorski

2
@IanKelling printf문자열에 예를 들어 %또는 \문자 가 포함 된 경우의 형식 문자열에 변수를 포함 시키지 못합니다 . 항상 형식 문자열을 제공하십시오 printf '%s\0' "$line"(반향을 피하십시오). tr '\n' '\0' < files.txt | xargs -0 rm -f
geirha

39

먼저 설치 한 파일을 기록하십시오. 이전에 실행 한 경우에도이 명령을 반복 할 수 있습니다 setup.py install.

python setup.py install --record files.txt

제거하려는 경우 다음을 수행 할 수 있습니다.

sudo rm $(cat files.txt)

rm 명령은 공백으로 구분 된 파일 목록을 삭제하고 설치 레코드가 그러한 목록이기 때문에 작동합니다.


프로그램을 설치 한 프로그램 일뿐만 아니라 그 이후로 다른 응용 프로그램에서이 리소스를 사용하지 않았는지 확인할 수있는 방법이 있습니까? 예를 들어, 도구를 설치했습니다. 그렇게하려면 여러 라이브러리를 설치해야했습니다. 일부 라이브러리는 이미 설치되어 있습니다 (즉, 제거 프로세스에서 제거 할 수 없음을 의미 함). 그러나 다른 응용 프로그램에서 제거 할 수없는 것도 있습니다. 내 라이브러리가 처음 설치 되었기 때문에 설치되지 않았습니다.
Gabrielle

19

이제 python은 설치 pip중에 설치할 수있는 옵션을 제공 합니다 (Windows에는 있고 최소한 Windows에는 python이 있습니다!). pip파이썬 설치 중에 설치 하기로 선택한 것을 고려하면 (실제로 기본값을 선택할 필요는 없습니다) pip이미 설치되어 있습니다. 그런 다음 pip명령 프롬프트에 입력 하면 도움말이 나타납니다. 필요한 사용법 지침을 찾을 수 있습니다. 예를 들어 pip list설치된 패키지 목록이 표시됩니다. 당신이 사용할 수있는

pip uninstall package_name

더 이상 원하지 않는 패키지를 제거합니다. 자세한 내용은 여기 (pip documentation)를 참조 하십시오 .


8

게으른 방법 : 배포 패키지를 만든 후 먼저 다시 설치하면 Windows 설치 메뉴 (Windows를 사용하는 경우) 또는 rpm 명령에서 간단히 제거하십시오.

예를 들어

python setup.py bdist_wininst
dist/foo-1.0.win32.exe

( "foo"는 물론 예입니다).


4
나는 그것을 좋아하는지 모르겠지만, 당신은 직교 사고의 요점을 얻습니다. :)
Lennart Regebro 09 년

솔직히 말해서 "게으른 방법"이 확실하지 않습니다. ;-)하지만 더 "표준"인스톨러를 만들 수 있다고 언급했습니다. setup.py가 패키지를 제거하는 명확한 방법을 제공하지 않는 것은 이상합니다.
RedGlyph

1
설치 제거에는 설치된 패키지 및 해당 파일의 중앙 레지스트리가 필요하며 파일은 없습니다. 이 이야기를 개선하는 방법에 대한 토론이 진행 중이며 Python 2.7 / 3.2 또는 2.8 / 3.3 정도에서 해결 될 수 있습니다.
Lennart Regebro 09 년

1
@Lennart : 파이썬 2.8은 없을 것입니다. 그것은 현재 공식적인 진술입니다
Piotr Owsiak

2
@PiotrOwsiak : 그렇습니다. 그러나 그것은 진술이 아닙니다. 2.8은 그 당시에도 여전히 가능성이 있었으며 작년 말 PEP 404가 승인 될 때까지 계속 유지되었습니다.
Lennart Regebro

6

python 패키지 디렉토리로 이동하여 .egg 파일을 제거하십시오 (예 : python 2.5 (ubuntu) : /usr/lib/python2.5/site-packages/

파이썬 2.6 (우분투) : /usr/local/lib/python2.6/dist-packages/


1
설치 프로그램이 설치 프로그램과 easy_install 명령과 같이 설치 한 파일을 패키지 외부에 설치하지 않는 한 작동합니다.
Lennart Regebro

3
일반적으로 OP에서 지정한대로 python setup.py를 사용하여 패키지를 설치 한 경우 알이 없습니다. OTOH, easy_install이 사용 되었기 때문에 하나가 있다면, 패키지를 제거하는 문서화 된 방법은 egg 파일을 삭제하기 전에 easy_install -m을 사용하는 것입니다. 그렇지 않으면 easy-install.pth 파일에 달걀 껍질이 남을 수 있습니다.
네드 데이 리

5

질문에 정확하게 대답하는 것이 아니라 매일 도움이되는 것 :

패키지를 설치하십시오

pip install .

패키지를에 넣습니다 $HOME/.local. 로 제거

pip uninstall <package_name>

1
pip unistall .나를 위해 일하지 않았지만 pip uninstall <package_name>감사했습니다!
Danijel

4

아마 당신은 대안으로 이것을 할 수 있습니다 :-

1) 파이썬 버전을 얻으십시오-

[linux machine]# python
Python 2.4.3 (#1, Jun 18 2012, 14:38:55) 

-> 위 명령은 현재 파이썬 버전 인 2.4.3을 제공합니다.

2) 파이썬의 설치 디렉토리를 얻으십시오-

[linux machine]# whereis python
python: /usr/bin/python /usr/bin/python2.4 /usr/lib/python2.4 /usr/local/bin/python2.5 /usr/include/python2.4 /usr/share/man/man1/python.1.gz

-> 위 명령에서 설치 디렉토리를 얻을 수 있습니다-/ usr / lib / python2.4 / site - packages

3) 여기에서 패키지와 python egg 파일을 제거 할 수 있습니다

[linux machine]# cd /usr/lib/python2.4/site-packages
[linux machine]# rm -rf paramiko-1.12.0-py2.4.egg paramiko-1.7.7.1-py2.4.egg paramiko-1.9.0-py2.4.egg

이것은 나를 위해 일했다.


3

setup.py를 열고 패키지 이름을 찾은 다음 pip에게 제거를 요청할 수 있다고 생각합니다.

이름이 'METADATA'변수에서 사용 가능하다고 가정하십시오.

pip uninstall $(python -c "from setup import METADATA; print METADATA['name']")

1

Martin이 말한 것을 확장하여 설치 출력과 작은 bash 스크립팅을 기록하면 꽤 트릭합니다. 여기 내가하는 일이 있습니다 ...

for i in $(less install.record);
sudo rm $i;
done;

그리고 프레스토. 제거되었습니다.


2
로 작성하는 것이 훨씬 쉽습니다 sudo xargs rm -v < install.record.
poolie

1

패키지를 다시 설치 한 후에 삭제해야 할 파일이 여전히 있으면 폴더 build도 삭제 해야합니다 . 따라서 pkg삭제하려는 패키지 라고 가정합니다 .

rm -r $(python3 -c "import pkg; print(pkg.__path__[0] + '*' )") 
rm -rf build

python3을 해결하고 패키지와 * .egg-info 파일을 삭제하십시오.


1

At {virtualenv}/lib/python2.7/site-packages/(virtuenv를 사용하지 않는 경우 {system_dir}/lib/python2.7/dist-packages/)

  • (예를 들면 계란 파일을 제거 distribute-0.6.34-py2.7.egg)
  • file에서 파일이 있으면 easy-install.pth해당 행을 제거하십시오 (소스 디렉토리 또는 달걀 파일의 경로 여야 함).

0

글로벌 환경에서 실수로 과거 어느 시점에서 "python setup.py install"을 실행했으며 제거에 많은 어려움이있었습니다. 이러한 솔루션은 도움이되지 않았습니다. "pip uninstall"이 (가) " 'splunk-appinspect'를 제거 할 수 없습니다. 제거 할 파일이 없습니다." "sudo pip uninstall"이 작동하지 않습니다. "요구 된 splunk-appinspect를 제거 할 수 없습니다. 설치되지 않았습니다." pip 제거, pip 캐시 삭제, 패키지에 대한 하드 드라이브 검색 등을 시도했습니다.

"pip show"는 결국 해결책으로 이끌었습니다. "Location :"은 디렉토리를 가리키고 있으며, 그 디렉토리의 이름을 바꾸면 패키지가 pip의 목록에서 제거되었습니다. 디렉토리 이름을 바꾸어 pip의 목록에 다시 나타나지 않았으므로 이제 virtualenv에 패키지를 다시 설치할 수 있습니다.


0

python setup.py installPyCharm에서 한 번 실행 하면 모든 패키지가 내 conda 기본 환경에 설치됩니다. 나중에이 모든 패키지를 제거하려고하면 pip uninstall작동하지 않습니다. /anaconda3/lib/python3.7/site-packages에서 수동으로 삭제해야했습니다.

따라서 requirements.txt 파일을 작성하는 대신 setup.py를 사용하는 이유를 알 수 없습니다. 요구 사항 파일은 가상 환경에 패키지를 설치하는 데 사용될 수 있으며 시스템 파이썬 패키지를 망칠 수 없습니다.


-1

bash를 사용하여 다음과 같은 명령을 읽으면 관련 파일을 제거하는 것이 좋습니다.

sudo python setup.py install --record files.txt
sudo bash -c "cat files.txt | xargs rm -rf"

이것은 기존의 이전 답변의 사본입니다.
Karl Richter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.