Я получил ошибку
TypeError: slice indices must be integers or None or have an __index__
method
и искал решение и понял, что мне нужно понизить версию numpy, затем попытался использовать эту команду
python
import numpy
numpy.__version__
и получил
>>> numpy.__version__
'1.14.5'
но когда я использовал
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:
теперь какая версия используется python?
Команды
$ python3 -m pip --version
$ pip --version
pip 18.0 from /usr/local/lib/python3.4/dist-packages/pip (python 3.4)
и
$ python -m pip --version
pip 18.0 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
Скорее всего, у вас есть (как минимум) две отдельные копии Python, установленные в вашей системе, и python запускает одну, а pip - для другой. Если вы не хотите учиться справляться с этим беспорядком, самое простое - всегда использовать python -m pip вместо pip. Таким образом, вы знаете, что чем бы ни был python, вы используете прилагаемый к нему pip.
Один из распространенных способов решить эту проблему в системах Unix - использовать предварительно установленный Python (например, Apple 2.7 или Ubuntu 3.4), который не поставляется с pip, а затем выполнить стороннюю установку второго Python, который делает идут с pip. Теперь python может запускать предварительно установленный Python, потому что он появляется раньше в PATH, но pip будет установлен на ваш второй Python, потому что нет другого pip, который должен быть перед ним в PATH.
@abarnert, спасибо за ответ, да, у меня есть две версии, но извините, что написанная вами команда не даст версии! я должен попробовать что-нибудь другое?
Я не знаю, что означает вторая половина этого предложения. Можете ли вы запустить pip --version и python --version и python3 -m pip --version и редактировать результат в свой вопрос?
@abarnert я отредактировал сообщение
В чем проблема с постом, проголосовавшим против? !!






Я сомневаюсь, что вам действительно делать нужно или вы хотите понизить версию NumPy.
Но на самом деле ваш вопрос не об этом. Вы хотите знать, почему pip показывает одно, а python другое, и что вы можете с этим сделать.
Причина, по которой вы видите разные вещи, заключается в том, что ваш pip не подходит к вашему python.
Когда вы запускаете python, это ваш Python 2.7, а пакеты import идут из вашей библиотеки 2.7 с /usr/local/lib/python2.7/.
Когда вы запускаете pip, он использует ваш Python 3.4, а также устанавливает и ищет вещи в вашей библиотеке Python 3.4, которая находится по адресу /usr/local/lib/python3.4/.
Итак, pip show numpy показывает вам версию NumPy вашего Python 3.4, которая полностью не зависит от версии NumPy вашего Python 2.7.
Если вы не собирались использовать Python 2.7, решение состоит в том, чтобы вместо этого запустить Python 3.4, обычно просто используя python3 вместо python.
Если вы сделал намереваетесь использовать Python 2.7, решение состоит в использовании идущего к нему pip. Для этого у вас может быть команда с именем pip2 или pip2.7, но самый безопасный способ - использовать python -m pip вместо pip.
В качестве побочного примечания, учитывая, где установлен ваш 3.4 NumPy, похоже, что вы, возможно, сделали что-то вроде apt-get python3-numpy или yum python-numpy или подобное, чтобы установить его, а не pip install numpy. И, вероятно, что-то вроде apt-get python2-numpy, чтобы получить версию 2.7. Если это так, вы можете захотеть понизить или обновить его так же, как вы установили его в первую очередь, используя диспетчер пакетов вашего дистрибутива вместо использования pip. Если нет… тогда игнорируйте этот абзац.
Если все это кажется слишком сложным, но вам действительно нужно иметь как Python 2.7, так и Python 3.4, вам следует учесть две вещи:
python и pip подходят для этой среды.Я думаю, вы правы. Учитывая, что он находится в dist-packages, вероятно, он был установлен с использованием apt или yum вместо pip. Очень проницательное наблюдение.
спасибо за ваше время, я использую jupyter для запуска кода, с python2 или python3 выдает ту же ошибку, поэтому мой вопрос здесь в том, что потому что numpy?
@prog Как я сказал вверху, и другие говорили в комментариях, ваша ошибка, вероятно, не имеет ничего общего с необходимостью понизить версию numpy. Вероятно, в вашем коде есть ошибка, которую нужно исправить. Если вам нужна помощь с этим, создайте новый вопрос и дайте нам минимальный воспроизводимый пример, который демонстрирует проблему, чтобы мы могли отладить ее для вас.
код не мой и хорошо работал с другими, но проблема со мной, поэтому я предполагаю, что проблема с версиями, потому что установлены две версии python, и я запутался с ними
Вероятно, вы запутались между python2, python3 и другим python виртуальные среды.
Это самый надежный источник в вашем случае
$ python
>>> import numpy
>>> numpy.__version__
'1.14.5'
Чтобы обновить / понизить версию numpy, вам необходимо использовать pip, который соответствует используемому вами python. Я думаю, вы используете Python 2.7. Найдите исполняемый файл pip, который соответствует установленному пакету на /usr/local/lib/python2.7/dist-packages/pip.
Это не "правильный" способ, но он будет работать
python -m pip install numpy==x.y.z
python будет просто соответствовать интерпретатору Python, который вы используете.-m pip найдет правильный пип, соответствующий вашей установке python 2.7.numpy==x.y.z приведет к понижению версииТеперь вы, вероятно, столкнетесь с проблемами с разрешениями, которые соблазнят вас использовать sudo. На этом этапе вы можете попробовать добавить флаг --user ... но если вам действительно нужно использовать sudo, подумайте о создании virtualenv. (Пожалуйста.)
Другие прокомментировали это: возможно, ваши индексы на самом деле не целые.
(Связано: Индексы среза должны быть целыми числами или None или иметь метод __index__.)
Найдите в коде места, которые индексируются в списке, и убедитесь, что это целые числа.
assert isinstance(a, int), 'a must be an int'
assert isinstance(b, int), 'b must be an int'
x = y[a:b]
Продолжайте добавлять эти утверждения типа, пока не найдете ошибку.
python -m pip на самом деле правильный путь. Документы PyPA в какой-то момент предложили, чтобы вы всегда запускали pip таким образом, если у вас более одного Python и вы не используете виртуальные среды. Похоже, они отказались от этого, чтобы вместо этого просто подтолкнуть вас всегда использовать виртуальные среды, когда у вас более одного Python, и упомянуть -m pip только как запасной вариант для пользователей, которые не могут или не хотят этого делать. Но это все же лучше, чем пытаться выяснить, какой исполняемый файл pip подходит к какому python.
используется ли функция round () для преобразования чисел в целые числа?
@prog попробуйте использовать только int(a), как предложил Питерс в связанном вопросе.
@prog Это зависит от обстоятельств. Вы хотите, чтобы 2.91 означал 2 или 3? Функция int будет обрезана до 2. Функция round округляет до ближайшего целого числа, то есть 3. (В Python 2.7 это может дать вам float 3.0, поэтому вам, возможно, действительно придется сделать int(round(a)). В 3.x это не проблема.)
pip install numpy==1.14.5 ... Collecting numpy==1.14.5 ... Successfully installed numpy-1.16.3 Что !?
Вы можете перейти на более раннюю версию, используя флаг --upgrade, он работает в обоих направлениях, например
pip install --upgrade numpy==1.10.1
Где код? очень маловероятно, что вы должны понизить рейтинг numpy