Dado el nombre de un paquete de Python que se puede instalar con pip , ¿hay alguna forma de encontrar una lista de todas las versiones posibles que pip podría instalar? En este momento es prueba y error.
Estoy tratando de instalar una versión para una biblioteca de terceros, pero la versión más nueva es demasiado nueva, se realizaron cambios incompatibles con versiones anteriores. Entonces, de alguna manera, me gustaría tener una lista de todas las versiones que Pip conoce, para poder probarlas.

pip install pylibmc==es perfecta.Respuestas:
(actualización: a partir de marzo de 2020, muchas personas han informado que la yema, instalada a través de
pip install yolk3k, solo devuelve la última versión. La respuesta de Chris parece tener más votos positivos y funcionó para mí)El script en pastebin funciona. Sin embargo, no es muy conveniente si está trabajando con múltiples entornos / hosts porque tendrá que copiarlo / crearlo cada vez.
Una mejor solución integral sería usar yolk3k , que está disponible para instalar con pip. Por ejemplo, para ver qué versiones de Django están disponibles:
yolk3kes una bifurcación del originalyolkque dejó de desarrollarse en 2012 . Aunqueyolkya no se mantiene (como se indica en los comentarios a continuación),yolk3kparece ser y es compatible con Python 3.Nota: no estoy involucrado en el desarrollo de yolk3k. Si algo no parece funcionar como debería, dejar un comentario aquí no debería hacer mucha diferencia. Utilice el rastreador de problemas yolk3k en su lugar y considere enviar una solución, si es posible.
fuente
Para pip> = 9.0 use
- todas las versiones disponibles se imprimirán sin descargar o instalar ningún paquete adicional.
Para pip <9.0 use
donde
blorkpuede haber cualquier cadena que no sea un número de versión válido .fuente
pip install --only-binary :all: pylibmc, enumerará todas las versiones de pylibmc disponibles como paquetes binarios.pip install pylibmc==9999999 | tr ', ' "\n" | sort -nActualización: a
partir de septiembre de 2017, este método ya no funciona:
--no-installse eliminó en el pip 7Use
pip install -v, puede ver todas las versiones disponiblesPara no instalar ningún paquete, use una de las siguientes soluciones:
o
Probado con pip 1.0
fuente
pip 1.5.4daDEPRECATION: --no-install, --no-download, --build, and --no-clean are deprecated. See https://github.com/pypa/pip/issues/906.y no muestra versiones disponibles para paquetes que ya están instalados.-v. El resto de mi respuesta es para evitar el efecto de suma (instalación / descarga). Para el paquete instalado, simplemente agregue --upgrade. De nuevo, puede crear un virtualenv separado para simplificar todo.no such option: --no-installNo necesita un paquete de terceros para obtener esta información. pypi proporciona feeds JSON simples para todos los paquetes bajo
Aquí hay un código de Python que usa solo la biblioteca estándar que obtiene todas las versiones.
Ese código se imprime (a partir del 23 de febrero de 2015):
fuente
versions = [x for x in data["releases"] if any([y["python_version"] in ['cp26', '2.6'] for y in data["releases"][x]])]encontrar versiones compatibles con Python 2.6. (No vi encp26ningún lado, pero algunos paquetes sí,cp27así que especulo que esto podría existir en otros paquetes.)curl -s https://pypi.python.org/pypi/{PKG_NAME}/json | jq -r '.releases | keys[]' | sort -t. -k 1,1n -k 2,2n -k 3,3nValueErrorexcepción para algunos paquetes que siguen esquemas de versiones no tan estrictos. Para arreglarlo para estos paquetes, vea esta esencia .Se me ocurrió un script bash muy simple. Gracias al autor de jq .
fuente
curlal trabajo, posiblemente debido a errores de certificado.wget --no-check-certificatefunciona, pero inclusocurl -k --insecureno produce nada. La advertencia que recibowgetdiceERROR: certificate common name `www.python.org´ doesn´t match requested host name `pypi.python.org´.sort -Vno funciona en OSX con la versión de homebrew dejqPodría usar el paquete yolk3k en lugar de la yema. yolk3k es una bifurcación de la yema original y es compatible con python2 y 3.
https://github.com/myint/yolk
fuente
yolk -V attestAttest 0.5.3Después de mirar el código de pip por un tiempo, parece que el código responsable de localizar paquetes se puede encontrar en la
PackageFinderclase enpip.index. Su métodofind_requirementbusca las versiones de aInstallRequirement, pero desafortunadamente solo devuelve la versión más reciente.El siguiente código es casi una copia 1: 1 de la función original, con el retorno en la línea 114 cambiado para devolver todas las versiones.
El script espera un nombre de paquete como primer y único argumento y devuelve todas las versiones.
http://pastebin.com/axzdUQhZ
No puedo garantizar la corrección, ya que no estoy familiarizado con el código de pip. Pero espero que esto ayude.
Salida de muestra
El código:
fuente
Puede usar este pequeño script Python 3 (usando solo módulos de biblioteca estándar) para obtener la lista de versiones disponibles para un paquete de PyPI usando la API JSON e imprimirlas en orden cronológico inverso. A diferencia de otras soluciones de Python publicadas aquí, esto no se rompe en versiones sueltas como
django's2.2rc1ouwsgi' s2.0.17.1:Guarde el script y ejecútelo con el nombre del paquete como argumento, por ejemplo:
fuente
https://pypi.python.org/pypi/Django/ - funciona para paquetes cuyos mantenedores eligen mostrar todos los paquetes https://pypi.python.org/simple/pip/ - deberían hacer el truco de todos modos (enumera todos los enlaces)
fuente
Esto funciona para mí en OSX:
Devuelve la lista una por línea:
O para obtener la última versión disponible:
Tenga en cuenta
gsortque debe estar instalado (en OSX) para analizar las versiones. Puedes instalarlo conbrew install coreutilsfuente
Mi proyecto
ludditetiene esta característica.Ejemplo de uso:
Enumera todas las versiones de un paquete disponibles, consultando la API json de https://pypi.org/
fuente
requirements.txtarchivos para paquetes obsoletos. Es más que un par de líneas de código. Para verificar unrequirements.txtarchivo, necesita la funcionalidad para enumerar todas las versiones del paquete. Esta parte está desacoplada intencionalmente y es parte de la API pública de luddite. Y es la fuente Apache License 2.0, creo que no es justo llamarlo un paquete de software "caja negra".No tuve suerte con
yolk,yolk3kopip install -vasí que terminé usando esto (adaptado a Python 3 de la respuesta de Eric Chiang):fuente
StrictVersionno va a funcionar para muchos paquetes (django,uwsgi,psycopg2por nombrar algunos). Puede usarparse_version()desdesetuptools(vea mi respuesta para ver un ejemplo).La solución alternativa es usar las API de Warehouse:
https://warehouse.readthedocs.io/api-reference/json/#release
Por ejemplo para Flask:
imprimirá:
fuente
bashScript simple que se basa solo enpythonsí mismo (supongo que en el contexto de la pregunta debe instalarse) y uno decurlowget. Se supone que tiene unsetuptoolspaquete instalado para ordenar las versiones (casi siempre instalado). No depende de dependencias externas como:jqque puede no estar presente;grepyawkeso puede comportarse de manera diferente en Linux y macOS.Una versión un poco más larga con comentarios.
Ponga el nombre del paquete en una variable:
Obtener versiones (usando
curl):Obtener versiones (usando
wget):Imprimir versiones ordenadas:
fuente
Mi opinión es una combinación de un par de respuestas publicadas, con algunas modificaciones para que sean más fáciles de usar desde un entorno de Python en ejecución.
La idea es proporcionar un comando completamente nuevo (modelado a partir del comando de instalación) que le brinde una instancia del buscador de paquetes para usar. La ventaja es que funciona y utiliza cualquier índice que pip admita y lea sus archivos de configuración de pip locales, de modo que obtenga los resultados correctos como lo haría con una instalación de pip normal.
Intenté hacer que sea compatible con pip v 9.xy 10.x, pero solo lo probé en 9.x
https://gist.github.com/kaos/68511bd013fcdebe766c981f50b473d4
Salida de ejemplo
fuente