Étant donné le nom d'un package Python qui peut être installé avec pip , existe-t-il un moyen de trouver une liste de toutes les versions possibles de celui-ci que pip pourrait installer? En ce moment, c'est un essai et une erreur.
J'essaie d'installer une version pour une bibliothèque tierce, mais la dernière version est trop nouvelle, des modifications incompatibles ont été apportées. J'aimerais donc avoir en quelque sorte une liste de toutes les versions connues de pip, afin de pouvoir les tester.
pip install pylibmc==
est parfaite.Réponses:
(mise à jour: en mars 2020, de nombreuses personnes ont signalé que le jaune, installé via
pip install yolk3k
, ne renvoyait que la dernière version. La réponse de Chris semble avoir le plus de votes positifs et a fonctionné pour moi)Le script de pastebin fonctionne. Cependant, ce n'est pas très pratique si vous travaillez avec plusieurs environnements / hôtes car vous devrez le copier / créer à chaque fois.
Une meilleure solution globale serait d'utiliser yolk3k , qui est disponible pour l'installation avec pip. Par exemple, pour voir quelles versions de Django sont disponibles:
yolk3k
est une fourche de l'originalyolk
qui a cessé son développement en 2012 . Bien qu'ilyolk
ne soit plus maintenu (comme indiqué dans les commentaires ci-dessous), ilyolk3k
semble être et prend en charge Python 3.Remarque: je ne suis pas impliqué dans le développement de yolk3k. Si quelque chose ne semble pas fonctionner comme il se doit, laisser un commentaire ici ne devrait pas faire beaucoup de différence. Utilisez plutôt le traqueur de problèmes yolk3k et envisagez de soumettre un correctif, si possible.
la source
Pour pip> = 9,0 utiliser
- toutes les versions disponibles seront imprimées sans réellement télécharger ou installer de packages supplémentaires.
Pour pip <9.0 utilisation
où
blork
peut être n'importe quelle chaîne qui n'est pas un numéro de version valide .la source
pip install --only-binary :all: pylibmc
, répertoriera toutes les versions de pylibmc disponibles sous forme de packages binaires.pip install pylibmc==9999999 | tr ', ' "\n" | sort -n
Mise à jour: depuis
septembre 2017, cette méthode ne fonctionne plus: a
--no-install
été supprimée dans le pip 7Utilisez
pip install -v
, vous pouvez voir toutes les versions disponiblesPour ne pas installer de package, utilisez l'une des solutions suivantes:
ou
Testé avec pip 1.0
la source
pip 1.5.4
donneDEPRECATION: --no-install, --no-download, --build, and --no-clean are deprecated. See https://github.com/pypa/pip/issues/906.
et n'affiche pas les versions disponibles pour les packages déjà installés.-v
. Le reste de ma réponse est pour éviter l'effet d'ajout (installation / téléchargement). Pour le paquet installé, ajoutez simplement --upgrade. Anw, vous pouvez créer un virtualenv séparé pour tout simplifier.no such option: --no-install
Vous n'avez pas besoin d'un package tiers pour obtenir ces informations. pypi fournit des flux JSON simples pour tous les packages sous
Voici du code Python utilisant uniquement la bibliothèque standard qui obtient toutes les versions.
Ce code s'imprime (au 23 février 2015):
la source
versions = [x for x in data["releases"] if any([y["python_version"] in ['cp26', '2.6'] for y in data["releases"][x]])]
de trouver des versions compatibles avec Python 2.6. (Je n'ai vucp26
nulle part, mais certains packages l'avaientcp27
donc je suppose que cela pourrait exister dans d'autres packages.)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
exception pour certains packages qui suivent des schémas de version pas si stricts. Pour le corriger pour ces packages, consultez cet essentiel .Je suis venu avec un script bash mort-simple. Merci à l' auteur de jq .
la source
curl
au travail, peut-être à cause d'erreurs de certificat.wget --no-check-certificate
fonctionne, mais necurl -k --insecure
produit même rien. L'avertissement que je reçoiswget
ditERROR: certificate common name `www.python.org´ doesn´t match requested host name `pypi.python.org´.
sort -V
ne fonctionne pas sur OSX avec la version homebrew dejq
Vous pouvez utiliser le package yolk3k au lieu de yolk. yolk3k est une fourchette du jaune d'origine et prend en charge à la fois python2 et 3.
https://github.com/myint/yolk
la source
yolk -V attest
Attest 0.5.3
Après avoir regardé le code de pip pendant un moment, il semble que le code responsable de la localisation des packages se trouve dans la
PackageFinder
classe depip.index
. Sa méthodefind_requirement
recherche les versions de aInstallRequirement
, mais ne renvoie malheureusement que la version la plus récente.Le code ci-dessous est presque une copie 1: 1 de la fonction d'origine, avec le retour à la ligne 114 modifié pour renvoyer toutes les versions.
Le script attend un nom de package comme premier et seul argument et renvoie toutes les versions.
http://pastebin.com/axzdUQhZ
Je ne peux pas garantir l'exactitude, car je ne connais pas le code de pip.Mais j'espère que cela aide.
Exemple de sortie
Le code:
la source
Vous pouvez utiliser ce petit script Python 3 (en utilisant uniquement des modules de bibliothèque standard) pour récupérer la liste des versions disponibles pour un package de PyPI à l'aide de l' API JSON et les imprimer dans l'ordre chronologique inverse. Contrairement à certaines autres solutions Python publiées ici, cela ne casse pas sur les versions lâches comme
django
'2.2rc1
ouuwsgi
'2.0.17.1
:Enregistrez le script et exécutez-le avec le nom du package comme argument, par exemple:
la source
https://pypi.python.org/pypi/Django/ - fonctionne pour les packages dont les responsables choisissent d'afficher tous les packages https://pypi.python.org/simple/pip/ - devrait faire l'affaire quand même (liste tous les liens)
la source
Cela fonctionne pour moi sur OSX:
Il renvoie la liste une par ligne:
Ou pour obtenir la dernière version disponible:
Gardez à l'esprit
gsort
qu'il faut installer (sur OSX) pour analyser les versions. Vous pouvez l'installer avecbrew install coreutils
la source
Mon projet
luddite
a cette fonctionnalité.Exemple d'utilisation:
Il répertorie toutes les versions d'un package disponibles, en interrogeant l'API json de https://pypi.org/
la source
requirements.txt
fichiers pour les packages obsolètes. C'est plus que quelques lignes de code. Afin de vérifier unrequirements.txt
fichier, vous avez besoin de la fonctionnalité pour répertorier toutes les versions de package. Cette partie est intentionnellement découplée et fait partie de l'API publique de luddite. Et c'est la source Apache License 2.0, je pense qu'il n'est pas vraiment juste d'appeler cela un progiciel "boîte noire".Je n'ai pas eu de chance avec
yolk
,yolk3k
ou ,pip install -v
mais si je me suis retrouvé à l' aide de ce (adapté à Python 3 de la réponse de eric chiang):la source
StrictVersion
ne fonctionnera pas pour de nombreux paquets (django
,uwsgi
,psycopg2
pour ne citer que quelques - uns). Vous pouvez utiliser àparse_version()
partir desetuptools
(voir ma réponse pour un exemple).La solution alternative consiste à utiliser les API d'entrepôt:
https://warehouse.readthedocs.io/api-reference/json/#release
Par exemple pour Flask:
imprimera:
la source
Facile
bash
Script qui ne repose que surpython
lui-même (je suppose que dans le contexte de la question il doit être installé) et l'uncurl
ouwget
. Il suppose que vous avezsetuptools
installé un package pour trier les versions (presque toujours installé). Il ne repose pas sur des dépendances externes telles que:jq
qui peut ne pas être présent;grep
etawk
qui peuvent se comporter différemment sous Linux et macOS.Version un peu plus longue avec commentaires.
Mettez le nom du package dans une variable:
Obtenir des versions (en utilisant
curl
):Obtenir des versions (en utilisant
wget
):Imprimer les versions triées:
la source
Ma prise est une combinaison de quelques réponses publiées, avec quelques modifications pour les rendre plus faciles à utiliser dans un environnement python en cours d'exécution.
L'idée est de fournir une toute nouvelle commande (modélisée d'après la commande d'installation) qui vous donne une instance de l'outil de recherche de package à utiliser. L'avantage est qu'il fonctionne avec et utilise tous les index que pip prend en charge et lit vos fichiers de configuration de pip locaux, de sorte que vous obtenez les résultats corrects comme vous le feriez avec une installation de pip normale.
J'ai essayé de le rendre compatible avec pip v 9.x et 10.x .. mais je ne l'ai essayé que sur 9.x
https://gist.github.com/kaos/68511bd013fcdebe766c981f50b473d4
Exemple de sortie
la source