Как понизить версию numpy?

Я получил ошибку

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)

Где код? очень маловероятно, что вы должны понизить рейтинг numpy

blue_note 18.08.2018 22:29

Скорее всего, у вас есть (как минимум) две отдельные копии Python, установленные в вашей системе, и python запускает одну, а pip - для другой. Если вы не хотите учиться справляться с этим беспорядком, самое простое - всегда использовать python -m pip вместо pip. Таким образом, вы знаете, что чем бы ни был python, вы используете прилагаемый к нему pip.

abarnert 18.08.2018 22:43

Один из распространенных способов решить эту проблему в системах Unix - использовать предварительно установленный Python (например, Apple 2.7 или Ubuntu 3.4), который не поставляется с pip, а затем выполнить стороннюю установку второго Python, который делает идут с pip. Теперь python может запускать предварительно установленный Python, потому что он появляется раньше в PATH, но pip будет установлен на ваш второй Python, потому что нет другого pip, который должен быть перед ним в PATH.

abarnert 18.08.2018 22:45

@abarnert, спасибо за ответ, да, у меня есть две версии, но извините, что написанная вами команда не даст версии! я должен попробовать что-нибудь другое?

user8163730 18.08.2018 22:48

Я не знаю, что означает вторая половина этого предложения. Можете ли вы запустить pip --version и python --version и python3 -m pip --version и редактировать результат в свой вопрос?

abarnert 18.08.2018 22:51

@abarnert я отредактировал сообщение

user8163730 19.08.2018 01:22

В чем проблема с постом, проголосовавшим против? !!

user8163730 19.08.2018 02:07
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
9
7
46 632
3

Ответы 3

Я сомневаюсь, что вам действительно делать нужно или вы хотите понизить версию 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 подходят для этой среды.
  • Установите последнюю версию Anaconda с последней версией Python (на сегодняшний день 3.7), затем попросите ее установить среды conda 3.4 и 2.7. Используйте эти среды и никогда не трогайте свою систему 3.4 и 2.7.

Я думаю, вы правы. Учитывая, что он находится в dist-packages, вероятно, он был установлен с использованием apt или yum вместо pip. Очень проницательное наблюдение.

James Lim 19.08.2018 01:54

спасибо за ваше время, я использую jupyter для запуска кода, с python2 или python3 выдает ту же ошибку, поэтому мой вопрос здесь в том, что потому что numpy?

user8163730 19.08.2018 02:08

@prog Как я сказал вверху, и другие говорили в комментариях, ваша ошибка, вероятно, не имеет ничего общего с необходимостью понизить версию numpy. Вероятно, в вашем коде есть ошибка, которую нужно исправить. Если вам нужна помощь с этим, создайте новый вопрос и дайте нам минимальный воспроизводимый пример, который демонстрирует проблему, чтобы мы могли отладить ее для вас.

abarnert 19.08.2018 02:14

код не мой и хорошо работал с другими, но проблема со мной, поэтому я предполагаю, что проблема с версиями, потому что установлены две версии python, и я запутался с ними

user8163730 19.08.2018 02:18

Вероятно, вы запутались между 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.
abarnert 19.08.2018 02:09

используется ли функция round () для преобразования чисел в целые числа?

user8163730 19.08.2018 02:10

@prog попробуйте использовать только int(a), как предложил Питерс в связанном вопросе.

James Lim 19.08.2018 02:12

@prog Это зависит от обстоятельств. Вы хотите, чтобы 2.91 означал 2 или 3? Функция int будет обрезана до 2. Функция round округляет до ближайшего целого числа, то есть 3. (В Python 2.7 это может дать вам float 3.0, поэтому вам, возможно, действительно придется сделать int(round(a)). В 3.x это не проблема.)

abarnert 19.08.2018 02:15
pip install numpy==1.14.5 ... Collecting numpy==1.14.5 ... Successfully installed numpy-1.16.3 Что !?
Apollys supports Monica 19.06.2019 02:30

Вы можете перейти на более раннюю версию, используя флаг --upgrade, он работает в обоих направлениях, например

pip install --upgrade numpy==1.10.1

Другие вопросы по теме