Cuando necesito trabajar en uno de mis proyectos favoritos, simplemente clono el repositorio como de costumbre ( git clone <url> ), edito lo que necesito, ejecuto las pruebas, actualizo la versión setup.py , confirmo, envío, construyo los paquetes. y subirlos a PyPI.
¿Cuál es la ventaja de usar pip install -e ? ¿Debería usarlo? ¿Cómo mejoraría mi flujo de trabajo?
Encuentro pip install -e extremadamente útil cuando desarrollo simultáneamente un producto y una dependencia, lo cual hago mucho.
Ejemplo:
Construye sitios web utilizando Django para numerosos clientes y también ha desarrollado una aplicación interna de Django llamada ubicaciones que reutiliza en muchos proyectos, por lo que la pone a disposición en pip y la versiona.
Cuando trabaja en un proyecto, instala los requisitos como de costumbre, lo que instala las ubicaciones en los paquetes del sitio.
Pero pronto descubre que a las ubicaciones les vendrían bien algunas mejoras.
Entonces toma una copia del repositorio de ubicaciones y comienza a hacer cambios. Por supuesto, debe probar estos cambios en el contexto de un proyecto de Django.
Simplemente vaya a su proyecto y escriba:
pip install -e /path/to/locations/repo
Esto sobrescribirá el directorio en los paquetes del sitio con un enlace simbólico al repositorio de ubicaciones , lo que significa que cualquier cambio en el código allí se reflejará automáticamente; simplemente vuelva a cargar la página (siempre que esté usando el servidor de desarrollo).
El enlace simbólico mira los archivos actuales en el directorio, lo que significa que puede cambiar de rama para ver cambios o probar cosas diferentes, etc.
La alternativa sería crear una nueva versión, empujarla a pip y esperar que no hayas olvidado nada. Si tiene muchas aplicaciones internas de este tipo, esto rápidamente se vuelve insostenible.
Para los que no tienen tiempo:
Si instala su proyecto con un indicador -e (por ejemplo, pip install -e mynumpy ) y lo usa en su código (por ejemplo from mynumpy import some_function ), cuando realiza algún cambio en some_function , debería poder usar la función actualizada sin reinstalándolo.
pip install -e es cómo se manejan las dependencias de setuptools a través de pip . Lo que normalmente hace es instalar las dependencias:
git clone URLcd projectpip install -e . o pip install -e .[dev] *Y ahora todas las dependencias deberían estar instaladas.
* [dev] es el nombre del grupo de requisitos de setup.py
Además de las herramientas de configuración (egg), también hay un sistema de rueda de instalación de python . Ambos sistemas se basan en la promesa de que no se realiza ninguna construcción ni compilación.