L'utilisation pip install
de n'importe quel module apparemment sur mon système Ubuntu 16.04 avec python 2.7.11+ génère cette erreur:
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'
Quel est le problème avec pip? Comment pourrais-je le réinstaller, si nécessaire?
Mise à jour: le suivi complet est ci-dessous
sunny@sunny:~$ pip install requests
Collecting requests
Exception:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 209, in main
status = self.run(options, args)
File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 328, in run
wb.build(autobuilding=True)
File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 748, in build
self.requirement_set.prepare_files(self.finder)
File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 360, in prepare_files
ignore_dependencies=self.ignore_dependencies))
File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 512, in _prepare_file
finder, self.upgrade, require_hashes)
File "/usr/lib/python2.7/dist-packages/pip/req/req_install.py", line 273, in populate_link
self.link = finder.find_requirement(self, upgrade)
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 442, in find_requirement
all_candidates = self.find_all_candidates(req.name)
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 400, in find_all_candidates
for page in self._get_pages(url_locations, project_name):
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 545, in _get_pages
page = self._get_page(location)
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 648, in _get_page
return HTMLPage.get_page(link, session=self.session)
File "/usr/lib/python2.7/dist-packages/pip/index.py", line 757, in get_page
"Cache-Control": "max-age=600",
File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 480, in get
return self.request('GET', url, **kwargs)
File "/usr/lib/python2.7/dist-packages/pip/download.py", line 378, in request
return super(PipSession, self).request(method, url, *args, **kwargs)
File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 468, in request
resp = self.send(prep, **send_kwargs)
File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/sessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "/usr/share/python-wheels/CacheControl-0.11.5-py2.py3-none-any.whl/cachecontrol/adapter.py", line 46, in send
resp = super(CacheControlAdapter, self).send(request, **kw)
File "/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests/adapters.py", line 376, in send
timeout=timeout
File "/usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3/connectionpool.py", line 610, in urlopen
_stacktrace=sys.exc_info()[2])
File "/usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3/util/retry.py", line 228, in increment
total -= 1
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'
pip
utiliserait normalement unrequests
package intégré etrequests
utiliserait normalement unurllib3
package intégré . Ces roues ne sont pas des versions intégrées et sont probablement incompatibles avec lapip
sous - classe de certains de ce code. s'écarter/usr/share/python-wheels
peut-être?pip
à utiliserpip/_vendor/requests/
etpip/_vendor/requests/packages/urllib3/
, pas/usr/share/python-wheels/requests-2.9.1-py2.py3-none-any.whl/requests
ou/usr/share/python-wheels/urllib3-1.13.1-py2.py3-none-any.whl/urllib3
.requests
etpip
incorporer leurs dépendances. Votre traceback montre qu'aucune version intégrée n'est utilisée, mais je ne sais pas pourquoi .Réponses:
Ubuntu est livré avec une version de PIP du précambrien et c'est ainsi que vous devez la mettre à niveau si vous ne voulez pas passer des heures et des heures à déboguer les problèmes liés à pip.
Comme vous l'avez observé, j'ai inclus des informations pour Python 2.x et 3.x
la source
pip
qui n'a pas été corrigé depuis plusieurs versions maintenant: github.com/pypa/pip/issues/4779Si vous êtes derrière un proxy, vous devez effectuer quelques étapes de configuration supplémentaires avant de démarrer l'installation. Vous devez définir la variable d'environnement http_proxy sur l'adresse proxy. En utilisant bash, cela est accompli avec la commande
Vous pouvez également fournir le
paramètre à pip. La
[user:pass@]
portion est facultative.la source
La mise à jour de setuptools a bien fonctionné pour moi.
la source
Tout d'abord, ce problème existe en raison de problèmes de réseau et la désinstallation et la réinstallation de tout ne seront pas d'une grande aide. Vous êtes probablement derrière le proxy, et dans ce cas, vous devez définir un proxy.
Mais dans mon cas, j'étais confronté au problème car je n'étais pas derrière proxy. En général, je travaille derrière un proxy, mais lorsque je travaille à domicile, je règle le proxy sur Aucun dans les paramètres réseau.
Mais j'obtenais toujours les mêmes erreurs même après avoir supprimé les paramètres de proxy.
Alors, quand j'ai tapé
J'ai trouvé quelque chose comme ça:
Et c'était la raison pour laquelle j'obtenais toujours la même erreur, même lorsque je pensais avoir supprimé les paramètres du proxy.
Pour désactiver ce proxy, saisissez
Suivez la même approche pour toutes les autres entrées, telles que https_proxy.
la source
Ce qui se passe ici, c'est que les versions vendues de request / urllib3 s'affrontent lorsqu'elles sont importées à deux endroits différents (même code, mais noms différents). Si vous rencontrez ensuite une erreur réseau, il ne réessaye pas d'obtenir la roue, mais échoue avec l'erreur ci-dessus. Voir ici pour une analyse plus approfondie de cette erreur.
Pour la solution avec système pip, voir ci - dessus .
Si vous rencontrez ce problème dans un virtualenv construit par
python -m venv
(qui copie toujours les roues/usr/share/python-wheels
, même si vous avez installé pip séparément), le moyen le plus simple de le «réparer» semble être:/usr/bin/python3.6 -m venv ...
requests
dans l'environnement (cela peut provoquer l'erreur ci-dessus):<venv>/bin/pip install requests
requests
qui seraient utilisées par pip:rm <venv>/share/python-wheels/{requests,chardet,urllib3}-*.whl
Maintenant, a
<venv>/bin/pip
utilise la version installée derequests
laquelle urllib3 est vendue.la source
/usr/share/python-wheels/urllib3-1.19.1-py2.py3-none-any.whl
et c'est corrigé maintenant (sans virtualenv)./usr/share/python-wheels
,python -m venv
ne créera<venv>/bin/pip
plus de fichier utilisable . Donc, si vous supprimez ces fichiers, vous devez être sûr que vous n'en avez pas besoin. Si vous avez besoin à la fois d'un pip système et d'un pip venv, vous devez installer le système avecget-pip.py
(voir stackoverflow.com/a/37531821/1380673 ) et vous devez supprimer les fichiers whl dans chaque venv.le port 443 n'est pas ouvert, autorisez simplement le port tcp personnalisé 443 si sur AWS sinon ouvrez le port 443 pour les connexions sortantes ...
la source
Juste mettre à jour pip a fonctionné pour moi:
pip install --upgrade pip
la source
J'ai le même problème lors de l'installation d'un RaspberryPI TFT d'Adafruit avec pitft.sh / adafruit-pitft.sh .
Je ne suis pas content des styles de codage avec des erreurs de quelque part à interpréter d'une manière ou d'une autre - comme l'ont montré les réponses précédentes.
Remarque: L'exception d'erreur de type de retry.py est évidemment un bogue, causé par une affectation et un calcul inappropriés d'une instance de la classe Répondre à un int avec la valeur par défaut de 10 - quelque part dans le code ... Doit être corrigé soit en ajoutant un opérateur inplace, ou en corrigeant l'affectation erronée.
J'ai donc essayé d'analyser et de corriger l'erreur elle-même en premier. L'erreur réelle dans mon cas est la même - retry.py appelée par pip .
Le script d'installation adafruit-pitft.sh / pitft.sh essaie d'appliquer urllib3 qui tente lui-même d'installer les dépendances imbriquées par pip , donc la même erreur.
https://github.com/adafruit/Raspberry-Pi-Installer-Scripts/blob/master/adafruit-pitft.sh
https://github.com/adafruit/Raspberry-Pi-Installer-Scripts
Pour la distribution actuelle (basée sur debian-9.6.0 / stretch):
Le patch suivant - dirty * :) - active une trace d'erreur sonore:
La sortie sonore avec le patch temporaire est (affichée deux fois ...?):
Donc, dans mon cas, deux choses provoquent l'erreur, cela peut varier dans d'autres environnements:
Mon environnement d'installation est hors ligne à partir d'un miroir interne Debian + raspbian, donc je ne veux pas définir le proxy ...
J'ai donc procédé à l'installation manuelle du composant manquant evdev :
téléchargez evdev depuis PyPI (ou par exemple depuis github.com):
https://pypi.org/project/evdev/
https://files.pythonhosted.org/packages/7e/53/374b82dd2ccec240b7388c65075391147524255466651a14340615aabb5f/evdev-1.1.2.tar.gz
Décompressez et installez manuellement en tant qu'utilisateur root - pour tous les comptes locaux, ainsi détectés comme installés:
Appelez à nouveau le script d'installation:
Si vous procédez en ligne par accès direct PyPI :
vérifiez votre routage + pare-feu pour accéder à pypi.org
définir un proxy si nécessaire (http_proxy / https_proxy)
Et il fonctionne..
J'espère que cela aidera également dans d'autres cas.
Arno-Can Uestuensoez
----------------------------------------------
Voir aussi: issue - 35334: https://bugs.python.org/issue35334
----------------------------------------------
Voir aussi maintenant: issue - 1486: https://github.com/urllib3/urllib3/issues/1486
pour le fichier: https://github.com/urllib3/urllib3/blob/master/src/urllib3/util/retry.py
la source
vérifier les problèmes de réseau, pour contourner le code de cas d'exception
Dans mon cas, j'utilisais un index personnalisé, cet index n'avait pas de route et cela déclencherait le code de cas d'exception. Le bogue de cas d'exception existe toujours et masque toujours le vrai problème, mais j'ai pu contourner ce problème en testant la connectivité avec d'autres outils tels que
nc -vzw1 myindex.example.org 443
et en réessayant lorsque le réseau était en place.la source
J'étais confronté à un problème similaire en essayant d'installer l'outil awscli sur l'instance ec2. J'ai changé de groupe de sécurité pour autoriser l'accès au port 443 entrant et sortant et cela a résolu le problème pour moi.
la source
J'ai eu cette erreur lorsque j'essayais de créer une
virtualenv
commande withvirtualenv myVirtualEnv
. Je viens d'ajouter unsudo
avant la commande; il a tout résolu.la source
Solution:
1.
sudo apt remove python-pip
2.
pip3 install pip
(ou installez pip par get-pip.py )Pourquoi:
Cette erreur s'est produite sur pip 8.0.1 installé par apt-get. Et cela ne s'est produit que lorsque votre réseau est instable.
Si vous avez un pip installé avec apt, il cache le pip que vous avez installé par d'autres moyens, vous devez donc d'abord supprimer l'apt.
J'ai déconnecté le réseau et testé 8.0.1, 9.0.3, 10.x les 3 versions installées avec pip3 ou get-pip.py, aucune erreur ne s'est produite. Donc, je pense que seule la version apt de pip 8.0.1 a ce bogue, les autres sont ok.
la source
Dans mon cas, j'avais ouvert Pycharm en mode sudo et exécutais pip install nltk dans le terminal pycharm, ce qui montrait cette erreur. l'exécution avec sudo pip install résout l'erreur.
la source
J'ai aussi eu ce problème. Au départ, un proxy a été défini et fonctionne correctement. Ensuite, je me suis connecté à un réseau où il ne passe pas par un proxy. Après avoir désinstallé le proxy pip, recommencez.
la source
Bizarrement, si je supprime le proxy de l'environnement et l'ajoute à la ligne de commande, cela fonctionne pour moi. Par exemple pour se mettre à niveau
pip
:Mon problème était d'avoir le proxy dans l'environnement. Il semble que pip n'honore que celui en discussion.
la source
C'est la solution de travail à ce problème que j'ai trouvé.
la source
Pour moi, il s'avère que wlan0 était en panne, ce qui m'a empêché de me connecter. Donc, en s'assurant que wlan0 était actif, a permis à pip / pip3 de fonctionner sans problème.
la source
J'ai essayé la solution répondue ci-dessus:
Quand j'ai essayé
J'ai ce message
J'ai fait ce qui suit et ça marche
la source