J'ai une erreur
TypeError: slice indices must be integers or None or have an __index__
method
et j'ai cherché une solution et j'ai obtenu que je devrais rétrograder la version de numpy, puis j'ai essayé d'utiliser cette commande
python
import numpy
numpy.__version__
et j'ai
>>> numpy.__version__
'1.14.5'
mais quand j'ai utilisé
pip show numpy
Name: numpy
Version: 1.11.0
Summary: NumPy: array processing for numbers, strings, records, and
objects.
Home-page: http://www.numpy.org
Author: NumPy Developers
Author-email: [email protected]
License: BSD
Location: /usr/local/lib/python3.4/dist-packages
Requires:
Required-by:
maintenant quelle est la version utilisée python?
Commandes
$ python3 -m pip --version
$ pip --version
pip 18.0 from /usr/local/lib/python3.4/dist-packages/pip (python 3.4)
et
$ python -m pip --version
pip 18.0 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
Vous êtes probablement confus entre python2, python3 et différents python environnements virtuels .
C'est la source la plus fiable, dans votre cas
$ python
>>> import numpy
>>> numpy.__version__
'1.14.5'
Pour mettre à niveau/rétrograder numpy, vous devez utiliser pip
qui correspond au python
que vous utilisez. Je pense que vous utilisez python 2.7. Recherchez un exécutable pip
qui correspond au package installé sur /usr/local/lib/python2.7/dist-packages/pip
.
Ce n'est pas la "bonne" façon, mais ça marchera
python -m pip install numpy==x.y.z
python
correspondra juste à python interprète que vous utilisez-m pip
trouvera le bon pip qui correspond à votre installation de python 2.7numpy==x.y.z
forcera la rétrogradationMaintenant, vous rencontrerez probablement des problèmes d'autorisations qui vous tenteront d'utiliser Sudo
. À ce stade, vous pouvez soit essayer d'ajouter le --user
flag ... mais si vous devez vraiment utiliser Sudo, pensez à créer un virtualenv. (S'il vous plaît.)
D'autres ont commenté ceci: peut-être que vos indices ne sont en fait pas des entiers.
(Connexes: Les indices de tranche doivent être des entiers ou Aucun ou avoir la méthode __index__ )
Recherchez les emplacements de votre code qui sont indexés dans une liste et assurez-vous qu'il s'agit bien d'entiers.
assert isinstance(a, int), 'a must be an int'
assert isinstance(b, int), 'b must be an int'
x = y[a:b]
Continuez à ajouter ces assertions de type jusqu'à ce que vous trouviez le bogue.
Je doute que vous do ayez vraiment besoin, ou voulez, de rétrograder NumPy.
Mais ce n'est pas vraiment votre question. Vous voulez savoir pourquoi pip
montre une chose et python
en montre une autre, et ce que vous pouvez faire à ce sujet.
La raison pour laquelle vous voyez des choses différentes est que votre pip
ne va pas avec votre python
.
Lorsque vous exécutez python
, c'est votre Python 2.7, et les packages que vous import
y proviennent de votre bibliothèque 2.7, à /usr/local/lib/python2.7/
.
Lorsque vous exécutez pip
, il utilise votre Python 3.4, et installe et recherche des éléments dans votre bibliothèque Python 3.4, qui se trouve à /usr/local/lib/python3.4/
.
Alors, pip show numpy
vous montre la version de NumPy que votre Python 3.4 a, qui est complètement indépendante de la version de NumPy votre Python 2.7 l'a).
Si vous n'aviez pas l'intention d'utiliser Python 2.7, la solution consiste à exécuter Python 3.4 à la place, généralement en utilisant simplement python3
au lieu de python
.
Si vous avez l'intention d'utiliser Python 2.7, la solution consiste à utiliser le pip
qui l'accompagne. Vous pouvez avoir une commande nommée pip2
ou pip2.7
pour cela, mais le moyen le plus sûr est d'utiliser python -m pip
au lieu de pip
.
En remarque, étant donné où votre 3.4 NumPy est installé, il semble que vous ayez fait quelque chose comme apt-get python3-numpy
ou yum python-numpy
ou similaire pour l'installer, pas pip install numpy
. Et probablement quelque chose comme apt-get python2-numpy
pour obtenir également la version 2.7. Si c'est le cas, vous voudrez peut-être le rétrograder ou le mettre à niveau de la même manière que vous l'avez installé en premier lieu, en utilisant le gestionnaire de packages de votre distribution, au lieu d'utiliser pip
. Sinon… alors ignorez ce paragraphe.
Si tout cela semble trop compliqué, mais que vous avez vraiment besoin d'avoir les deux Python 2.7 et Python 3.4 autour, il y a deux choses que vous devez considérer:
python
et pip
seront tous les deux pour cet environnement.Vous pouvez rétrograder à l'aide de l'indicateur --upgrade, cela fonctionne dans les deux sens, par exemple
pip install --upgrade numpy==1.10.1