Eliminando el módulo de Python instalado en modo de desarrollo

93

Hola, estaba probando el empaquetado de Python usando setuptools y para probar instalé el módulo en modo de desarrollo. es decir

python setup.py develop

Esto ha agregado mi directorio de módulos a sys.path. Ahora quiero eliminar el módulo, ¿hay alguna forma de hacer esto?

Gracias por adelantado

copyninja
fuente
4
Comience a usar pipu otro administrador con capacidad de desinstalación para administrar paquetes de Python.
Tomasz Wysocki
1
@Tomasz ¿Cómo haces el equivalente de python setup.py developcon pip?
akaihola
7
pip install -e.
Tomasz Wysocki
11
'pip' no es la respuesta correcta a esta pregunta. Instalar un proyecto que está desarrollando usando 'pip' para ejecutarlo o usarlo significa que tendrá que reinstalar cada vez que modifique el código fuente. La forma correcta es el uso 'setup.py desarrollar' como dice la pregunta original.
Jonathan Hartley
6
@JonathanHartley Eso es simplemente falso; pip tiene un argumento --editable(o -e) que se comporta aproximadamente dedevelop manera equivalente a setuptools ' . Pensé que tal vez --editableera más nuevo que tu comentario, pero no, una búsqueda rápida del repositorio de pip en GitHub muestra referencias a editables en confirmaciones en 2009. Además, veo que esto ya lo señaló Tomasz Wysocki antes de que comentaras !
Mark Amery

Respuestas:

225

Utilice la opción --uninstallo -upara develop, es decir:

python setup.py develop --uninstall

Esto lo eliminará de easy-install.pth y eliminará el .egg-link. Lo único que no hace es eliminar los scripts (todavía).

PJ Eby
fuente
3
Tenga en cuenta que si su versión de desarrollo instaló algunos ejecutables y los cambió en su setup.py, debe eliminarlos manualmente.
norok2
1
Lo ejecuto tal como se explicó, sin errores en la salida, pero aún puedo importar mi paquete de desarrollo a nivel mundial, parece que no se ha eliminado. EDITAR: Sé por qué, tuve que ejecutarlo con la --useropción como lo hice durante la instalación:python setup.py develop --uninstall --user
Marek
No creo que esto sea seguro ya que las cosas pueden cambiar en el desarrollo (por ejemplo) cambiando el nombre del módulo. Necesitas eliminar todo manualmente.
mathtick
@ norok2 ¿Cuáles son los comandos manuales que se deben ejecutar para eliminar esos ejecutables? Por lo que sé, lo anterior funciona para cierta versión de python / pip, aunque no estoy seguro de cuáles.
Charlie Parker
1
@CharlieParker rmo deldependiendo de su sistema operativo. Lo que quise decir es que si tenías algunos ejecutables en el momento en que los instalaste y luego cambiaste sus nombres (o los eliminaste) en tu setup.py, entonces setup.pyno sabrás más sobre ellos (no importa tu pip/ pythonversión y debes cuidarlos manualmente. Por lo general, se encuentran en algún bindirectorio en sistemas POSIX (lea Linux, BSD, MacOS X), no recuerdo nada de Win.
norok2
16

Edite easy-install.pth en su directorio de paquetes de sitio y elimine la línea que apunta a su versión de desarrollo de ese paquete.

Zooko
fuente
Sí, hice exactamente esto y había un archivo más con el nombre package-egg-link o algo que
eliminé
10
"setup.py development --uninstall" hace esto por usted, vea la respuesta de @ pjeby
Jonathan Hartley
3
Esto funcionó para mí cuando develop --uninstallfalló porque había dividido un proyecto en dos y el incorrecto permanecía en el directorio original.
Wesley Baugh
1

He tenido un problema similar a este antes. Lo que hice fue cargar el shell de Python, importar el módulo y luego imprimir su __file__atributo. Desde allí, simplemente eliminaría la carpeta o el archivo que se estaba asociando.

Es posible que desee analizar el uso de virtualenv, este sistema le permite crear una instancia de Python separada de su sistema. Cualquier módulo que instale o utilice en esta instancia es autónomo, incluida la versión del módulo.

Ahora guardo todos mis proyectos dentro de su propio virtualenv contenido, lo que me permite instalar y usar los módulos que quiera sin preocuparme por arruinar los módulos de otros proyectos.

Tanerax
fuente
Bueno, la próxima vez que juegue con paquetes, usaré esto para no arruinar mi sistema Python. Gracias por la información
copyninja