pip install numpy
sur python 2.7 tente d'installer numpy 1.17, qui a abandonné la prise en charge de python 2.7. Ceci est contraire à la fonctionnalité décrite dans NEP 14 , qui stipule :
...
pip install numpy
sur Python 2 continuera à donner la dernière version de travail à perpétuité...
version pip : 19.2.2
python : 2.7.15 |Anaconda, Inc.| (par défaut, 23 octobre 2018, 18:31:10) n[GCC 7.3.0]
Il semble y avoir un bogue dans pip ou setuptools qui cause cela, pouvez-vous essayer de mettre à niveau pip ? (voir aussi gh-13911 dont je pense qu'il s'agit d'un doublon). Vous pouvez probablement mettre à jour pip avec pip lui-même : python -m pip install --upgrade pip
et python -m pip install --upgrade setuptools
?
la vraie question est de savoir pourquoi vous utilisez python 2.7
la vraie question est de savoir pourquoi vous utilisez python 2.7
il y a beaucoup de raisons valables de continuer à utiliser la 2.7, s'il vous plaît ne commencez pas ce débat ici.
Il semble y avoir un bogue dans pip ou setuptools qui cause cela, pouvez-vous essayer de mettre à niveau pip ? (voir aussi gh-13911 dont je pense qu'il s'agit d'un doublon). Vous pouvez probablement mettre à jour pip avec pip lui-même :
python -m pip install --upgrade pip
etpython -m pip install --upgrade setuptools
?
J'exécute les dernières versions des deux - pip 19.2.2 et setuptools 41.1.0.
la vraie question est de savoir pourquoi vous utilisez python 2.7
il y a beaucoup de raisons valables de continuer à utiliser la 2.7, s'il vous plaît ne commencez pas ce débat ici.
En effet il y en a. Dans mon cas, j'essaie d'exécuter un logiciel d'analyse scientifique développé par des universitaires qui n'a pas été porté sur py3.
Mais le point ici n'est pas de savoir si je devrais ou non utiliser python 2.7, c'est que numpy a fait une déclaration formelle de la fonctionnalité attendue, et ce n'est pas la vraie fonctionnalité. C'est, dans mon esprit, le bug.
J'ai remarqué hier que pip n'installerait pas pytest 5.0.1 pour Python 2.7 car 2.7 n'était pas pris en charge, donc pip fonctionne correctement dans certains cas. Je me demande s'il y a des informations quelque part qui doivent être mises à jour pour la 1.17 ?
Vous pouvez essayer python2.7 -mpip
pour vous assurer que pip sait quelle version est en cours d'exécution. Il semble également que vous utilisiez Anaconda, ce qui peut être une complication lorsqu'il est mélangé avec du pip.
Que montre which pip
?
Hmmm, sur ma machine, pip 18.1 et setuptools 41.0.1 fonctionnent correctement (à la fois en mode binaire et sans mode binaire). La mise à niveau vers 19.2.2 et 41.1.0 ne change rien pour moi. La version python est 2.7.16+
(debian).
Comme le note Chuck, je suppose que vous vous assurez d'utiliser python2.7 -mpip
au lieu de pip
pour être certain que vous obtenez la dernière version installée (au cas où vous utilisez --user
ou avez un autre version pip pour une raison quelconque.) ?
Ce serait vraiment bien de comprendre ce qui cause exactement cela.
@IPetrik seriez-vous capable de mettre en place un exemple complètement reproductible ? Vous utilisez Anaconda, donc quelque chose comme :
conda create -n py27-empty
conda activate py27-empty
conda install pip
# Some diagnostics
which pip
pip --version
conda list setuptools
pip install numpy
J'ai essayé plusieurs variantes de cela, mais je ne peux pas reproduire votre problème.
Après avoir essayé de préparer un exemple minimal, j'ai compris le problème : nous utilisons un serveur de cache devpi PyPI local qui se trouvait dans mon pip.conf
tant que extra-index-url
. Si je supprime cela de mon pip.conf
, tout fonctionne correctement... oups.
Hmm, il semble que pip devrait gérer ça. Y a-t-il quelque chose de spécial à propos du cache et de pip.conf
? Je ne connais pas ces choses. @njsmith Des idées ?
Je me demande si le serveur devpi ne transmet pas correctement les méta-informations sur les versions disponibles pour un package donné.
Trouvé une raison pour laquelle un nouveau pip
peut tenter d'installer 1.17.0 pour Python 2.7. Cela se produit lorsqu'un package utilise setup_requires='numpy'
. En effet, cela invoquera easy_install
moins que ce package n'ait un pyproject.toml
(voir https://github.com/pypa/pip/issues/6945#issuecomment-526479930).
Il existe une solution de contournement : faites explicitement pip install numpy
avant pip install package-with-setup-requires
.
Et le correctif est le suivant : ce package doit ajouter un pyproject.toml
, ce qui fera disparaître ce problème pour une nouvelle version de ce package.
Trouvé une raison pour laquelle un nouveau
pip
peut tenter d'installer 1.17.0 pour Python 2.7. Cela se produit lorsqu'un package utilisesetup_requires='numpy'
. C'est parce que cela invoqueraeasy_install
moins que ce package n'ait unpyproject.toml
(voir pypa/pip#6945 (commentaire) ).Il existe une solution de contournement : faites explicitement
pip install numpy
avantpip install package-with-setup-requires
.
Un cas concret de pip install pycuda
, qui échoue comme suit :
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-build-LYaxup/pycuda/setup.py", line 251, in <module>
main()
...
File "/usr/lib/python2.7/dist-packages/setuptools/sandbox.py", line 44, in _execfile
code = compile(script, filename, 'exec')
File "/tmp/easy_install-mp9NYd/numpy-1.19.0rc1/setup.py", line 182
raise ValueError(f'Submodule {p} missing')
^
SyntaxError: invalid syntax
La solution de contournement est simple, comme l' a noté pip install numpy==1.16.6
(pour la dernière version NumPy compatible Python 2.7), puis réessayez pip install pycuda
.
C'est un bogue pip
, et un bogue très sérieux en apparence. Je peux reproduire cela avec pip 20.1.1. pip-2.7 install numpy
installe correctement 1.16.6
, donc les métadonnées pour numpy sur PyPI sont correctes. pip-2.7 install pycuda
essaie d'installer le dernier numpy au lieu de 1.16.6
.
C'est probablement déjà signalé, je n'ai pas le temps de m'y pencher dans les prochains jours. @artob si vous regardez s'il y a un problème Pip pour cela et ouvrez-en un sinon, ce serait très apprécié.
Commentaire le plus utile
il y a beaucoup de raisons valables de continuer à utiliser la 2.7, s'il vous plaît ne commencez pas ce débat ici.