desinstalar python setup.py

787

He instalado un paquete de Python con python setup.py install.

¿Cómo lo desinstalo?

flybywire
fuente
52
La respuesta aceptada está desactualizada. Uso pip uninstall <your_package>. Ver stackoverflow.com/questions/1231688/… .
Joachim W
21
la desinstalación de pip ya no es una respuesta válida. Aquí está la prueba. [sri @ localhost python] $ pip desinstalar foo DEPRECACIÓN: La desinstalación de un proyecto instalado distutils (foo) ha quedado en desuso y se eliminará en una versión futura. Esto se debe al hecho de que desinstalar un proyecto distutils solo lo desinstalará parcialmente.
musaraña
@shrewmouse que ya no se muestra.
JC Rocamonde
@JCRocamonde Con un paquete que he creado, se muestra la última versión de 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.por lo que esto sigue siendo un problema.
Josh
@ Josh en la parte superior de su archivo setup.py haga "desde setuptools import setup" en lugar de "from distutils.core import setup".
bigjake

Respuestas:

977

Nota: Evite python setup.py installusarpip install .

Debe eliminar todos los archivos manualmente y también deshacer cualquier otra cosa que la instalación haya hecho manualmente.

Si no conoce la lista de todos los archivos, puede reinstalarla con la --recordopción, y eche un vistazo a la lista que esto produce.

Para grabar una lista de archivos instalados, puede usar:

python setup.py install --record files.txt

Una vez que desee desinstalar, puede usar xargs para hacer la eliminación:

xargs rm -rf < files.txt

O si está ejecutando Windows, use Powershell:

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

Luego elimine también el directorio que lo contiene, por ejemplo, /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/my_module-0.1.egg/en macOS. No tiene archivos, pero Python seguirá importando un módulo vacío:

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

Una vez eliminado, Python muestra:

>>> import my_module
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'my_module'
Martin v. Löwis
fuente
66
Si esto no funciona, sudo add de la siguiente manera:cat files.txt | xargs sudo rm -rf
saroele
21
Esto arruinará los archivos con espacios. Vea mi respuesta a continuación: stackoverflow.com/a/25209129/14456
Ian Kelling
1
¿Cómo puedo volver a instalar el paquete del que tengo el código fuente de setup.py?
ア レ ッ ク ス
55
Esto también deja directorios vacíos en su lugar.
Dilawar
3
Hola, probé tu sugerencia para algunos de los archivos cuando intento cat files.txt | xargs rm -rf dice permiso denegado, incluso en modo sudo, por ejemplo, para / usr / local / bin / pydoc o / usr / local / bin / idle ¿Alguna idea de por qué?
212

Para mí, lo siguiente funciona principalmente:

tener pip instalado, por ejemplo:

$ easy_install pip

Comprueba cómo se nombra tu paquete instalado desde el punto de vista de pip:

$ pip freeze

Esto enumerará los nombres de todos los paquetes que haya instalado (y que fueron detectados por pip) El nombre puede ser largo, luego use solo el nombre del paquete que se muestra en y después #egg=. En la mayoría de los casos, también puede ignorar la parte de la versión (lo que sigue ==o -).

Luego desinstale el paquete:

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

Si solicita confirmación sobre la eliminación del paquete, entonces eres un tipo con suerte y se eliminará.

pip detectará todos los paquetes que fueron instalados por pip. También detectará la mayoría de los paquetes instalados a través de easy_install o setup.py, pero esto puede fallar en algunos casos.

Aquí hay una muestra real de mi prueba local con el paquete nombrado ttr.rdstmcen MS 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

Editar 2015-05-20

Todo lo que está escrito arriba todavía se aplica, de todos modos, hay pequeñas modificaciones disponibles ahora.

Instalar pip en python 2.7.9 y python 3.4

Las versiones recientes de Python vienen con un paquete que ensurepippermite instalar pip incluso cuando está fuera de línea:

$ python -m surepip --upgrade

En algunos sistemas (como Debian Jessie) esto no está disponible (para evitar que se rompa la instalación de Python).

Usando grepofind

Los ejemplos anteriores suponen que ha grepinstalado. Tenía (en el momento en que tenía MS Windows en mi máquina) un conjunto de utilidades de Linux instalado (incluido grep). Alternativamente, use MS Windows nativo findo simplemente ignore ese filtrado y busque el nombre en una lista un poco más larga de paquetes python detectados.

Jan Vlcinsky
fuente
1
¿Qué herramienta / versión de empaque está utilizando para que esto funcione? ( distutils, distribute, Etc ...)
Ciro Santilli郝海东冠状病六四事件法轮功
1
Yo uso setuptools. Puede consultar bitbucket.org/vlcinsky/ttr.aws.utils.s3 (que no es perfecto). De todos modos, estoy bastante descontento con el uso de paquetes de espacio de nombres, a veces la importación se rompe sin razón visible. Pero es otra historia.
Jan Vlcinsky
1
corrigiéndome a mí mismo. Aunque importo setuptools, de hecho lo uso distribute. Otra lección: cuando instale mi propio paquete desde pypi y planee desarrollar otro que comparta localmente el mismo espacio de nombres, no use $ pip install <the package> , use $ easy_install <the package>, de lo contrario, se encontrará con conflictos al importar su paquete de desarrollo.
Jan Vlcinsky
1
Para ayudar a otros: como no soy root, instalo todo en mi casa. Aquí está lo que hice easy_install --user --prefix=$HOME pip. Luego añade lo siguiente en mi camino: ln -s /home/tflutre/.local/bin/pip ~/bin, ln -s /home/tflutre/.local/bin/pip2.7 ~/biny ln -s /home/tflutre/.local/bin/pip2 ~/bin.
tflutre
3
Esta debería ser una respuesta aceptada, ya que es mucho más fácil y pip generalmente viene con Python de todos modos. Es fácil de usar en el símbolo del sistema / terminal, pip uninstall moduleo python -m pip uninstall moduledebería funcionar. También debe ser multiplataforma, como es parte de Python.
Edward
81

La respuesta n. ° 1 tiene problemas:

  • No funcionará en mac.
  • Si se instala un archivo que incluye espacios u otros caracteres especiales, el xargscomando fallará y eliminará cualquier archivo / directorio que coincida con las palabras individuales.
  • el -ren rm -rfes innecesario y en el peor, podría eliminar cosas que no desea.

En cambio, para unix-like:

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 --

Y para ventanas:

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

También hay problemas irresolubles con la desinstalación de la setup.pyinstalación que no te molestarán en un caso típico. Para una respuesta más completa, vea esta página wiki:

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

Ian Kelling
fuente
3
¿Por qué simplemente no dejas una sugerencia debajo de la votada? Tenga en cuenta que estos "problemas graves" se refieren a casos de esquina.
lpapp
17
Dejé un comentario debajo del votado. Mi comentario está enterrado bajo el enlace "cargar más comentarios" en el que muy pocas personas hacen clic. También hice mi propia respuesta porque tenía mucho más que decir, es decir. El enlace en mi respuesta. Además, el caso de la esquina no sería el primer término que me viene a la mente cuando un archivo tiene un espacio en él.
Ian Kelling
Por lo que vale, creo que esto fallará en los nombres de archivo que contengan nuevas líneas :) Ya sea que los mantenedores de paquetes sean tan malvados, espero nunca saberlo.
Jack O'Connor
2
En OS X Mavericks, al menos, xargs no tiene la opción -d. ¿Por qué? Porque Apple te ama. De todos modos, esto tiene los mismos efectos que el anterior, y es seguro con espacios y demás. Sin embargo, es específico de Bash. Después de ejecutar la instalación con --record to files.txt:OIFS=$IFS; IFS=$'\n'; FILES=( $( cat files.txt ) ); IFS=$OIFS; sudo rm -rf "${FILES[@]}"
Joseph Sikorski el
2
@IanKelling Las variables de incrustación dentro printfde la cadena de formato fallarán si la cadena contiene, por ejemplo, %o \caracteres. Siempre proporcione una cadena de formato: printf '%s\0' "$line"(también evita el eco). Aunque puede evitar aún más el bucle simplemente usandotr '\n' '\0' < files.txt | xargs -0 rm -f
geirha
39

Primero grabe los archivos que ha instalado. Puede repetir este comando, incluso si ya ha ejecutado setup.py install:

python setup.py install --record files.txt

Cuando desee desinstalar puede simplemente:

sudo rm $(cat files.txt)

Esto funciona porque el comando rm toma una lista de archivos separados por espacios en blanco para eliminar y su registro de instalación es solo una lista.

Nathan
fuente
¿Hay alguna manera de verificar no solo si fue mi programa el que lo instaló sino también si desde entonces, ninguna otra aplicación utilizó este recurso? Por ejemplo, instalé una herramienta, para hacerlo, tuve que instalar varias bibliotecas, tal vez algunas de ellas ya estaban instaladas (lo que significa que no puedo eliminar en el proceso de desinstalación) pero tampoco puedo eliminar nada que otras aplicaciones no se instaló porque mi biblioteca se había instalado primero ..
Gabrielle
19

Ahora python le da la opción de instalar pipdurante la instalación (estoy en Windows, ¡y al menos python lo hace para Windows!). Teniendo en cuenta que había elegido instalar pipdurante la instalación de python (en realidad no tiene que elegir porque es el predeterminado), pipya está instalado para usted. Luego, escriba en el pipsímbolo del sistema, debería ver una ayuda. Puede encontrar las instrucciones de uso necesarias allí. Por ejemplo, le pip listmuestra la lista de paquetes instalados. Puedes usar

pip uninstall package_name

para desinstalar cualquier paquete que ya no quieras. Lea más aquí (documentación de pip) .

Sнаđошƒаӽ
fuente
8

La manera perezosa: simplemente desinstale desde el menú de instalación de Windows (si está utilizando Windows), o desde el comando rpm, siempre que primero lo reinstale después de crear un paquete de distribución.

Por ejemplo,

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

("foo" es un ejemplo, por supuesto).

Glifo rojo
fuente
44
No sé si me gusta, pero obtienes un punto para el pensamiento ortogal. :)
Lennart Regebro
Para ser honesto, tampoco estoy seguro, por lo tanto, "la manera perezosa" ;-) Pero pensé en mencionar que era posible crear más instaladores "estándar". Sin embargo, es extraño que setup.py no proporcione una forma limpia de eliminar paquetes.
RedGlyph
1
Las desinstalaciones requieren registros centralizados de paquetes instalados y sus archivos, y no hay ninguno. Hay discusiones en curso sobre cómo mejorar esta historia y podría resolverse en Python 2.7 / 3.2 o 2.8 / 3.3 más o menos.
Lennart Regebro
1
@Lennart: no habrá Python 2.8, al menos esa es la declaración oficial actual
Piotr Owsiak
2
@PiotrOwsiak: Sí, pero esa no era la declaración entonces. 2.8 todavía era una posibilidad en ese momento y se mantuvo así hasta que se aprobó PEP 404, a fines del año pasado, creo.
Lennart Regebro
6

Vaya a su directorio de paquetes de python y elimine su archivo .egg, por ejemplo: En python 2.5 (ubuntu): /usr/lib/python2.5/site-packages/

En python 2.6 (ubuntu): /usr/local/lib/python2.6/dist-packages/

usuario149513
fuente
1
Funciona, a menos que la instalación instale archivos fuera del paquete, lo que algunos hacen, como setuptools que instala y el comando easy_install.
Lennart Regebro
3
Normalmente, si un paquete se instaló usando python setup.py como lo especifica el OP, no habría un huevo. OTOH, si hay uno porque se usó easy_install, la forma documentada de desinstalar paquetes es usar easy_install -m antes de eliminar el archivo egg; de lo contrario, las cáscaras de huevo pueden quedar atrás en el archivo easy-install.pth.
Ned Deily
5

No responde exactamente la pregunta, pero es algo que me ayuda todos los días:

Instala tus paquetes con

pip install .

Esto pone el paquete en $HOME/.local. Desinstalar con

pip uninstall <package_name>
Nico Schlömer
fuente
1
pip unistall .no funcionó para mí, pero lo pip uninstall <package_name>hizo, ¡gracias!
Danijel
4

Probablemente pueda hacer esto como alternativa: -

1) Obtenga la versión de Python -

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

-> El comando anterior te da la versión actual de Python que es 2.4.3

2) Obtenga el directorio de instalación de python -

[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

-> Desde el comando anterior puede obtener el directorio de instalación que es - /usr/lib/python2.4/site-packages

3) Desde aquí puede eliminar los paquetes y los archivos de huevo de Python

[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

Esto funcionó para mí ... Y pude desinstalar el paquete que me estaba molestando :)

COD3R
fuente
3

Creo que puede abrir el archivo setup.py, ubicar el nombre del paquete y luego pedirle a pip que lo desinstale.

Suponiendo que el nombre esté disponible en una variable 'METADATA':

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

Extender lo que dijo Martin, grabar el resultado de la instalación y un pequeño script de bash hace el truco bastante bien. Esto es lo que hago ...

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

Y listo. Desinstalado

lubina
fuente
2
Mucho más fácil escribir esto como sudo xargs rm -v < install.record.
Poolie
1

Si todavía tiene archivos que se supone que deben eliminarse después de volver a instalar un paquete, asegúrese de que la carpeta buildtambién esté eliminada. Por lo tanto, suponiendo que ese pkges el paquete que desea eliminar:

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

Obove trabaja para python3 y elimina el paquete y su archivo * .egg-info

Ulises Rosas-Puchuri
fuente
1

En {virtualenv}/lib/python2.7/site-packages/(si no usa virtualenv entonces {system_dir}/lib/python2.7/dist-packages/)

  • Eliminar el archivo de huevo (por ejemplo distribute-0.6.34-py2.7.egg)
  • Si hay alguno del archivo easy-install.pth, elimine la línea correspondiente (debe ser una ruta al directorio de origen o de un archivo de huevo).
Bhindi
fuente
0

Había ejecutado "python setup.py install" en algún momento del pasado accidentalmente en mi entorno global, y tuve muchas dificultades para desinstalarlo. Estas soluciones no ayudaron. La "desinstalación de pip" no funcionó con "No se puede desinstalar 'splunk-appinspect'. No se encontraron archivos para desinstalar". "la desinstalación de sudo pip" no funcionó "No se puede desinstalar el requisito splunk-appinspect, no instalado". Intenté desinstalar pip, eliminar el caché de pip, buscar el paquete en mi disco duro, etc.

"pip show" eventualmente me llevó a la solución, la "Ubicación:" apuntaba a un directorio, y al cambiar el nombre de ese directorio se eliminó el paquete de la lista de pip. Cambié el nombre del directorio, y no volvió a aparecer en la lista de pip, y ahora puedo reinstalar mi paquete en un virtualenv.

mmacvicar
fuente
0

Había corrido python setup.py installuna vez en mi PyCharm, instala todos los paquetes en mi entorno base conda. Más tarde, cuando quiero eliminar todos estos paquetes, pip uninstallno funciona. Tuve que eliminarlos de /anaconda3/lib/python3.7/site-packages manualmente :(

Así que no veo la razón por la que usan setup.py en lugar de escribir el archivo require.txt. El archivo de requisitos se puede usar para instalar paquetes en un entorno virtual y no interferirá con los paquetes de Python del sistema.

Yossarian42
fuente
-1

Puede ser mejor eliminar archivos relacionados utilizando bash para leer comandos, como los siguientes:

sudo python setup.py install --record files.txt
sudo bash -c "cat files.txt | xargs rm -rf"
Mark Peng
fuente
Esta es una copia de una respuesta anterior existente.
Karl Richter