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:
yolk3k
es una bifurcación del originalyolk
que dejó de desarrollarse en 2012 . Aunqueyolk
ya no se mantiene (como se indica en los comentarios a continuación),yolk3k
parece 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
blork
puede 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 -n
Actualización: a
partir de septiembre de 2017, este método ya no funciona:
--no-install
se 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.4
daDEPRECATION: --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-install
No 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 encp26
ningún lado, pero algunos paquetes sí,cp27
así 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,3n
ValueError
excepció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
curl
al trabajo, posiblemente debido a errores de certificado.wget --no-check-certificate
funciona, pero inclusocurl -k --insecure
no produce nada. La advertencia que recibowget
diceERROR: certificate common name `www.python.org´ doesn´t match requested host name `pypi.python.org´.
sort -V
no funciona en OSX con la versión de homebrew dejq
Podrí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 attest
Attest 0.5.3
Despué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
PackageFinder
clase enpip.index
. Su métodofind_requirement
busca 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.2rc1
ouwsgi
' 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
gsort
que debe estar instalado (en OSX) para analizar las versiones. Puedes instalarlo conbrew install coreutils
fuente
Mi proyecto
luddite
tiene esta característica.Ejemplo de uso:
Enumera todas las versiones de un paquete disponibles, consultando la API json de https://pypi.org/
fuente
requirements.txt
archivos para paquetes obsoletos. Es más que un par de líneas de código. Para verificar unrequirements.txt
archivo, 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
,yolk3k
opip install -v
así que terminé usando esto (adaptado a Python 3 de la respuesta de Eric Chiang):fuente
StrictVersion
no va a funcionar para muchos paquetes (django
,uwsgi
,psycopg2
por 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
bash
Script simple que se basa solo enpython
sí mismo (supongo que en el contexto de la pregunta debe instalarse) y uno decurl
owget
. Se supone que tiene unsetuptools
paquete instalado para ordenar las versiones (casi siempre instalado). No depende de dependencias externas como:jq
que puede no estar presente;grep
yawk
eso 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