Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

354
Vistas
Resolviendo el nuevo problema de tiempo de ejecución de seguimiento de pip

El nuevo solucionador de dependencias de pip que se lanzó con la versión 20.3 tarda demasiado tiempo en instalar un paquete. En nuestra canalización de CI ayer, una compilación de ventana acoplable que solía demorar ~ 10 minutos se agotó después de 1 hora de mensajes de instalación de pip como este (casi para cada biblioteca instalada por cualquier dependencia hay una salida de registro similar):

 INFO: pip is looking at multiple versions of setuptools to determine which version is compatible with other requirements. This could take a while. Downloading setuptools-50.0.0-py3-none-any.whl (783 kB) Downloading setuptools-49.6.0-py3-none-any.whl (803 kB) Downloading setuptools-49.5.0-py3-none-any.whl (803 kB) Downloading setuptools-49.4.0-py3-none-any.whl (803 kB) Downloading setuptools-49.3.2-py3-none-any.whl (790 kB) INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. If you want to abort this run, you can press Ctrl + C to do so. To improve how pip performs, tell us what happened here: https://pip.pypa.io/surveys/backtracking Downloading setuptools-49.3.1-py3-none-any.whl (790 kB) Downloading setuptools-49.3.0-py3-none-any.whl (790 kB) Downloading setuptools-49.2.1-py3-none-any.whl (789 kB) Downloading setuptools-49.2.0-py3-none-any.whl (789 kB) Downloading setuptools-49.1.3-py3-none-any.whl (789 kB) Downloading setuptools-49.1.2-py3-none-any.whl (789 kB) Downloading setuptools-49.1.1-py3-none-any.whl (789 kB) Downloading setuptools-49.1.0-py3-none-any.whl (789 kB) Downloading setuptools-49.0.1-py3-none-any.whl (789 kB) Downloading setuptools-49.0.0-py3-none-any.whl (789 kB) Downloading setuptools-48.0.0-py3-none-any.whl (786 kB) Downloading setuptools-47.3.2-py3-none-any.whl (582 kB) Downloading setuptools-47.3.1-py3-none-any.whl (582 kB) Downloading setuptools-47.3.0-py3-none-any.whl (583 kB) Downloading setuptools-47.2.0-py3-none-any.whl (583 kB) Downloading setuptools-47.1.1-py3-none-any.whl (583 kB) Downloading setuptools-47.1.0-py3-none-any.whl (583 kB) Downloading setuptools-47.0.0-py3-none-any.whl (583 kB) Downloading setuptools-46.4.0-py3-none-any.whl (583 kB) Downloading setuptools-46.3.1-py3-none-any.whl (582 kB) Downloading setuptools-46.3.0-py3-none-any.whl (582 kB) Downloading setuptools-46.2.0-py3-none-any.whl (582 kB) Downloading setuptools-46.1.3-py3-none-any.whl (582 kB) Downloading setuptools-46.1.2-py3-none-any.whl (582 kB) Downloading setuptools-46.1.1-py3-none-any.whl (582 kB) Downloading setuptools-46.1.0-py3-none-any.whl (582 kB) Downloading setuptools-46.0.0-py3-none-any.whl (582 kB) Downloading setuptools-45.3.0-py3-none-any.whl (585 kB) Downloading setuptools-45.2.0-py3-none-any.whl (584 kB) Downloading setuptools-45.1.0-py3-none-any.whl (583 kB) Downloading setuptools-45.0.0-py2.py3-none-any.whl (583 kB) Downloading setuptools-44.1.1-py2.py3-none-any.whl (583 kB) Downloading setuptools-44.1.0-py2.py3-none-any.whl (583 kB) Downloading setuptools-44.0.0-py2.py3-none-any.whl (583 kB) Downloading setuptools-43.0.0-py2.py3-none-any.whl (583 kB) Downloading setuptools-42.0.2-py2.py3-none-any.whl (583 kB) Downloading setuptools-42.0.1-py2.py3-none-any.whl (582 kB) Downloading setuptools-42.0.0-py2.py3-none-any.whl (582 kB) Downloading setuptools-41.6.0-py2.py3-none-any.whl (582 kB) Downloading setuptools-41.5.1-py2.py3-none-any.whl (581 kB) Downloading setuptools-41.5.0-py2.py3-none-any.whl (581 kB) Downloading setuptools-41.4.0-py2.py3-none-any.whl (580 kB) Downloading setuptools-41.3.0-py2.py3-none-any.whl (580 kB) Downloading setuptools-41.2.0-py2.py3-none-any.whl (576 kB) Downloading setuptools-41.1.0-py2.py3-none-any.whl (576 kB) Downloading setuptools-41.0.1-py2.py3-none-any.whl (575 kB) Downloading setuptools-41.0.0-py2.py3-none-any.whl (575 kB) Downloading setuptools-40.9.0-py2.py3-none-any.whl (575 kB) Downloading setuptools-40.8.0-py2.py3-none-any.whl (575 kB) Downloading setuptools-40.7.3-py2.py3-none-any.whl (574 kB) Downloading setuptools-40.7.2-py2.py3-none-any.whl (574 kB) Downloading setuptools-40.7.1-py2.py3-none-any.whl (574 kB) Downloading setuptools-40.7.0-py2.py3-none-any.whl (573 kB) Downloading setuptools-40.6.3-py2.py3-none-any.whl (573 kB) Downloading setuptools-40.6.2-py2.py3-none-any.whl (573 kB) Downloading setuptools-40.6.1-py2.py3-none-any.whl (573 kB) Downloading setuptools-40.6.0-py2.py3-none-any.whl (573 kB) Downloading setuptools-40.5.0-py2.py3-none-any.whl (569 kB) Downloading setuptools-40.4.3-py2.py3-none-any.whl (569 kB) Downloading setuptools-40.4.2-py2.py3-none-any.whl (569 kB) Downloading setuptools-40.4.1-py2.py3-none-any.whl (569 kB) Downloading setuptools-40.4.0-py2.py3-none-any.whl (568 kB) Downloading setuptools-40.3.0-py2.py3-none-any.whl (568 kB)

Estoy bastante confundido sobre si estamos usando el nuevo solucionador de pip correctamente, especialmente porque

 - Substantial improvements in new resolver for performance, output and error messages, avoiding infinite loops, and support for constraints files.

El comportamiento observado se describe como retroceso en las notas de la versión. Entiendo por qué está ahí. Especifica que puedo usar un archivo de restricciones (parece un requirements.txt) que corrige la versión de las dependencias para reducir el tiempo de ejecución usando pip install -c constraints.txt setup.py .

¿Cuál es la mejor manera de producir este archivo de restricciones? Actualmente, la mejor manera que se me ocurre es ejecutar pip install setup.py localmente en un nuevo entorno virtual y luego usar pip freeze > constraints.txt . Sin embargo, esto todavía lleva mucho tiempo para la instalación local (ha estado atascado durante unos 10 minutos ahora). Las notas mencionan que This means the “work” is done once during development process, and so will save users this work during deployment.

Con el antiguo solucionador de dependencias, pude instalar este paquete en menos de un minuto localmente.

¿Cuál es el proceso recomendado aquí?

Editar: acabo de descubrir que algunas de las dependencias apuntan directamente al servidor interno de gitlab. Si, en cambio, instalo directamente desde nuestro registro interno de paquetes, vuelve a funcionar en un par de minutos.

over 4 years ago · Hanz Gallego
7 Respuestas
Responde la pregunta

0

En mi caso nunca terminó. El motivo fue actualizar djangorestframework a una versión incompatible con django . Quería que instalara djangorestframework-3.12.4 , que depende de django >= 2.2 , y también tenía django==2.0.2 en requirements.txt .

over 4 years ago · Hanz Gallego Denunciar

0

Rebaje su pip a la versión 20.x, este es el problema que enfrentará en la versión 21.x de pip

over 4 years ago · Hanz Gallego Denunciar

0

Tuve un problema similar y quería informar la solución que funcionó para mí. Tuve que actualizar la versión pip usando

 pip install --upgrade pip

En realidad, estaba creando una imagen acoplable, así que agregué la línea

 RUN pip install --upgrade pip

Justo antes de instalar los requisitos. En el momento de escribir esta respuesta, la versión pip instalada es 22.0.3 . Hacerlo solucionó el problema.

over 4 years ago · Hanz Gallego Denunciar

0

A pesar de que todos mis paquetes en requirements.txt tenían una versión corregida, el problema seguía presente. Simplemente los actualicé a sus últimas versiones en su lugar. Por supuesto, esto trae un esfuerzo adicional para garantizar que nada se rompa, pero pareció resolver el problema para mí.

over 4 years ago · Hanz Gallego Denunciar

0

Entonces están cambiando el resolver, esto parece ser un error. Lo que funcionó fue usar el viejo resolver, usando la bandera

 --use-deprecated=legacy-resolver

Esto funcionará hasta pip 21.0 aparentemente.

fuente https://github.com/pypa/pip/issues/9215

over 4 years ago · Hanz Gallego Denunciar

0

He fijado todas mis dependencias. Tendrás que fijarlos más tarde o ahora, así que es mejor hacerlo ahora. estoy en pip 20.3.1

Si no fijamos ninguna de nuestras dependencias, el nuevo algoritmo de resolución de dependencias comprueba todas las versiones disponibles con cada dependencia, desde la última hasta las etiquetas de la versión inicial.

over 4 years ago · Hanz Gallego Denunciar

0

Última actualización (2022-02)

Parece que hay una actualización importante en pip solo unos días (versión 22.0 , notas de la versión + problema relevante en github ).

No lo he probado con más detalle, pero realmente me parece que optimizaron el cálculo del orden de instalación en casos complejos de tal manera que resuelve muchos problemas que todos encontramos anteriormente. Pero necesitaré más tiempo para comprobarlo.

De todos modos, el resto de esta respuesta sigue siendo válida y la fijación de requisitos inteligentes adecuada para un proyecto en particular es una buena práctica, en mi opinión.


Dado que encontré un problema similar, estoy de acuerdo en que esto es bastante molesto. El retroceso puede ser una función útil, pero no desea esperar horas para completar con un éxito incierto.

Encontré varias opciones que podrían ayudar:

  • Use el antiguo resolver ( --use-deprecated=legacy-resolver ) propuesto en la respuesta por @Daniel Davee , pero esto es más una solución temporal que una adecuada.
  • Omita la resolución de dependencias con --no-deps . No recomendaría esto en general, pero en algunos casos puede tener un conjunto funcional de versiones de paquetes, aunque existen algunos conflictos.
  • Reduzca la cantidad de versiones que pip intentará dar marcha atrás y sea más estricto con las dependencias de los paquetes. Esto significa que en lugar de poner, por ejemplo numpy en mis requisitos.txt, podría probar numpy >= 1.18.0 o ser aún más estricto con numpy == 1.18.0 . El rigor puede ayudar mucho.

Consulta las siguientes fuentes:

  • Arreglando conflictos
  • Discusión de pip de Github
  • Reducir el retroceso

Todavía no tengo una respuesta adecuada que siempre ayude, pero la mejor práctica para los requisitos.txt parece "fijar" las versiones del paquete. Encontré pip-tools que podrían ayudarlo a manejar esto incluso con constrains.txt (pero estoy en una fase experimental, así que no puedo contarles más).

Actualización (2021-04)

Parece que el autor de la pregunta pudo solucionar el problema (algo con el servidor gitlab personalizado), pero me gustaría ampliar esta respuesta, ya que podría ser útil para otros.

Después de leer y probar, terminé anclando todas las versiones de mi paquete a una específica. Esto realmente debería ser la forma correcta. Aunque todo aún puede funcionar sin él, puede haber casos en los que si no fija sus dependencias, su administrador de paquetes instalará silenciosamente una nueva versión (cuando se publique) con posibles errores o incompatibilidad (esto me sucede con dask last this año).

Hay varias herramientas que pueden ayudarlo, recomendaría uno de estos enfoques:

El más fácil con pipreqs

  • pipreqs es una biblioteca que genera un archivo pip requirements.txt basado en las importaciones de cualquier proyecto
  • puede comenzar con pip install pipreqs y ejecutar solo pipreqs en la raíz de su proyecto (o eventualmente con --force flag si sus requisitos ya existen)
  • creará fácilmente requirements.txt con versiones ancladas basadas en importaciones en su proyecto y versiones tomadas de su entorno
  • entonces puede crear un nuevo entorno en cualquier momento basado en estos requirements.txt

Esta es una herramienta realmente simple (incluso no necesita escribir sus requisitos.txt). No te permite crear algo complejo (puede que no sea una buena opción para proyectos más grandes), la semana pasada encontré un comportamiento extraño (ver esto ) pero en general estoy contento con esta herramienta ya que suele funcionar perfectamente.

Usando pip-tools

Hay varias otras herramientas de uso común como pip-tools , Pipenv o Poetry . Puede leer más en Compilaciones más rápidas de Docker con pipenv, poesía o pip-tools o Python Application Dependency Management en 2018 (más antiguo pero aún me parece válido). Y todavía me parece que la mejor opción (aunque depende de su proyecto/caso de uso) es pip-tools .

Puede (esta es una opción, vea más en los documentos ):

  • cree requirements.in (el mismo formato que requirements.txt , depende de usted si fija alguna dependencia del paquete o no)
  • luego puede usarlo pip install pip-tools y ejecutar pip-compile requirements.in
  • esto generará un nuevo archivo requirements.txt donde se fijan todas las versiones, está claro cuál es el origen
  • (Opcionalmente) puede ejecutarlo con la opción --generate-hashes
  • entonces puede (como con pipreqs ) en cualquier momento crear un nuevo entorno basado en estos requirements.txt
  • pip-tools le ofrece la opción --upgrade para actualizar los requisitos finales
  • admite requisitos en capas (por ejemplo, tener versiones de desarrollo y producción)
  • hay integración con compromiso previo
  • ofrece una herramienta pip-sync para actualizar su entorno según los requisitos.txt

Hay algunas cosas más que puedes hacer con él y realmente me encanta la integración con pre-commit . Esto le permite usar los mismos requisitos que antes (solo con el sufijo .in ) y agregar un gancho de confirmación previa que actualiza automáticamente los requirements.txt (por lo que nunca experimentará tener un entorno local diferente al de los requirements.txt generados, lo que podría suceder fácilmente cuando ejecutas algo manualmente).

over 4 years ago · Hanz Gallego Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda