2010-11-22 44 views
1

Vendredi dernier, j'ai construit une spécification RPM pour mon projet Django. Le RPM crée un virtualenv, télécharge les dépendances via pip et met tout dans les paquets. Aujourd'hui, j'ai découvert que BeautifulSoup 3.2 a été publié. Heureusement, ma version de BeautifulSoup a été épinglée dans le fichier requirements.txt, donc j'ai découvert que la compilation échouait.Comment utiliser une méthode de déploiement basée sur virtualenv sans mettre à niveau vers chaque version amont?

Maintenant, une question complètement différente est: comment puis-je éviter d'améliorer les choses à l'avenir? BeautifulSoup a supprimé toutes les versions précédentes de PyPI, donc je ne peux pas télécharger une version que j'ai testée. Le cache de téléchargement de pip n'aide pas non plus ici, car pip essaie toujours de vérifier PyPI en premier.

Pouvez-vous recommander quelque chose pour éviter cette situation?

Répondre

2

Tout d'abord, il s'agit d'une situation inhabituelle. Je n'ai jamais vu un autre paquet supprimer toutes les anciennes versions comme le fait BeautifulSoup. Je considère ce comportement plutôt hostile à l'utilisateur, sauf peut-être dans le cas d'une solution de sécurité sérieuse. Cela dit, si vous voulez un processus de construction fiable utilisant pip, vous avez vraiment besoin de mettre en miroir tous les paquets dont vous dépendez localement. Ce n'est pas difficile à faire. vous pouvez utiliser l'option --download de pip (ou votre cache de pip existant) pour obtenir tous les fichiers tar, puis les vider dans un répertoire indexé et web et utiliser --find-links dans votre fichier des exigences pour pointer pip là (plus --no-index pour lui dire de ne pas utiliser PyPI).

+0

Le fera probablement ou peut-être un "éclairage de pip local" - juste en gardant les zips autour. Merci. –