Python setup.py desarrollo vs instalación

336

Dos opciones en setup.py developy installme confunden. Según este sitio , el uso developcrea un enlace especial al directorio de paquetes del sitio.

La gente me ha sugerido que lo use python setup.py installpara una instalación nueva y python setup.py developdespués de que se hayan realizado cambios en el archivo de instalación.

¿Alguien puede arrojar algo de luz sobre el uso de estos comandos?

Netro
fuente

Respuestas:

468

python setup.py install se utiliza para instalar paquetes (generalmente de terceros) que no va a desarrollar / modificar / depurar usted mismo.

Para sus propias cosas, primero debe instalar su paquete y luego poder editar el código con frecuencia sin tener que volver a instalar el paquete cada vez, y eso es exactamente lo que python setup.py develophace: instala el paquete (generalmente solo una carpeta de origen) de una manera que le permita editar convenientemente su código después de que se haya instalado en el entorno (virtual) y que los cambios entren en vigencia de inmediato.

Tenga en cuenta que se recomienda encarecidamente usar pip install .(instalar) e pip install -e .(instalación de desarrollador) para instalar paquetes, ya que invocar setup.pydirectamente hará lo incorrecto para muchas dependencias, como lanzamientos previos y versiones de paquetes incompatibles, o dificultará la desinstalación del paquete pip.

Erik Kaplun
fuente
81
Erik tiene razón. También es útil saber que setup.py developviene con una --uninstallopción para cuando hayas terminado de hackear.
philadams
55
El último pensamiento aquí es que otra opción para setup.py developpiratear un paquete de Python es usar "una modificación de ruta simple (pero explícita) para resolver el paquete correctamente" re Kenneth Reitz
philadams
44
Me encontré con problemas al python setup.py developtratar de configurar Ceilometer para el desarrollo local. Terminé usando pip install -e PATH(dentro de un virtualenv) para evitar problemas que surgieron a través deeasy_install .
Joe D'Andrea
1
No estoy seguro de si esto es importante, pero si estoy usando Python 3, etc., ¿hay que ejecutarlo de manera python setup.py developdiferente?
Charlie Parker
1
Funciona con python3, pero no se olvide de eliminar cualquier instalación de pip actual que pueda tener, ya que chocarán entre sí (me sucedió en este momento).
Léo Germond el
124

De la documentación . El developno va a instalar el paquete pero se creará una .egg-linken la parte trasera del directorio de implantación en el directorio de código fuente del proyecto.

Por lo tanto, es como instalar, pero en lugar de copiar site-packages, agrega un enlace simbólico ( .egg-linkactúa como un enlace simbólico multiplataforma).

De esa manera, puede editar el código fuente y ver los cambios directamente sin tener que volver a instalar cada vez que realice un pequeño cambio. Esto es útil cuando eres el desarrollador de ese proyecto, de ahí el nombre develop. Si solo está instalando el paquete de otra persona, debe usarinstall

RubenLaguna
fuente
24

Otra cosa que la gente puede encontrar útil cuando usa el developmétodo es la --useropción de instalar sin sudo. Ex:

python setup.py develop --user

en vez de

sudo python setup.py develop
Taylor
fuente
11
IIUC nunca debe setup.py developen su sistema, esto solo tiene sentido en un virtualenv.
dividebyzero
2
@dividebyzero ¿Quiere decir que uno siempre debe usar python setup.py develop --user, si lo entiendo correctamente? Además, ¿podría decirme dónde está instalado el paquete usando python setup.py develop --user? ¡Gracias!
ROBOT AI
2
Creo que --userse instalará en un directorio en su cuenta de inicio y no afectará a otros usuarios en su sistema. El develophará que los enlaces a su directorio fuente del proyecto en lugar de copiar en realidad todo. develop --userdebería estar bien, y developen un virtualenv también. Solo developpara el sistema real es extraño, porque es posible que otros usuarios usen algo que apunte al proyecto en su copia personal del código fuente del proyecto.
dividebyzero
44
Muchos (?) La mayoría de la gente no se ejecutan en sistemas multiusuario, aunque
patstew
1
@boatcoder, Mac y Linux (y Windows) pueden ser sistemas con capacidad para múltiples usuarios , pero lo más probable es que el desarrollador sea la única cuenta de usuario (real) de su escritorio, y creo que eso es lo que significaba pegar.
MestreLion