Подтвердить что ты не робот

Обновление апгрейда в Amazon Linux

Я хотел развернуть мое приложение Python на Amazon Linux AMI 2015.09.1, которое имеет Python2.7 (по умолчанию) и pip (6.1.1). Затем я обновил пип с помощью команды:

sudo pip install -U pip

Однако, он был сломан и показал сообщение, когда я пытался установить пакеты:

pkg_resources.DistributionNotFound: pip==6.1.1

Я узнал, что pip удаляет предыдущие файлы, расположенные в /usr/bin/, и устанавливает новый в /usr/local/bin. Таким образом, я попытался указать местоположение с помощью команды:

sudo pip install -U --install-option="--prefix='/usr/bin'" pip

Тем не менее, он все еще установил новый в /usr/local/bin. В дополнение к этому, pip не смог работать с sudo, хотя он был успешно установлен. Сообщение об ошибке:

sudo: pip2.7: command not found

Есть ли способ правильно управлять пипсом?

4b9b3361

Ответ 1

Try:

sudo which pip

Это может показать что-то вроде "no pip in ($ PATH)".

Если это так, вы можете сделать следующее:

which pip

Что даст вам путь, как /usr/local/bin/pip.

Скопируйте + вставьте путь к папке в папку sbin, запустив: sudo cp /usr/local/bin/pip /usr/sbin/

Это позволит вам запускать sudo pip без каких-либо ошибок.

Ответ 2

В течение некоторого времени боролся с этим. Вот что я нашел:

  • ec2_user находит исполняемый файл pip, но имеет ошибку импорта модуля из-за other, не имеющего прав на чтение/выполнение в папках pip в папке /usr/local/lib/python2.7/site-packages. На самом деле это нормально, так как в большинстве случаев pip устанавливает сбой, если не запускается как root.
  • sudo не может найти pip.
  • Ввод root с помощью sudo su - позволяет pip запускаться без проблем.

Причина sudo pip перестает работать после обновления, потому что исполняемый файл (или символическая ссылка) удаляется из /usr/bin. Однако остается файл с именем pip-27, который содержит следующее:

#!/usr/bin/python2.7
# EASY-INSTALL-ENTRY-SCRIPT: 'pip==6.1.1','console_scripts','pip2.7'
__requires__ = 'pip==6.1.1'
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.exit(
        load_entry_point('pip==6.1.1', 'console_scripts', 'pip2.7')()
    )

Итак, что происходит с нашей ошибкой, так как обновление явно не очищает этот файл. Не совсем ясно, где происходит преобразование имени от pip до pip-2.7.

Как уже упоминалось в другом ответе, pip теперь существует в /usr/local/bin после обновления, который больше не находится в защищенном пути sudo. Вы можете добавить этот путь к переменной secure_path, запустив sudo visudo. Другой вариант, если вы не хотите добавлять этот путь к вашему secure_path, - это сделать символическую ссылку на новый исполняемый файл pip в /usr/bin.

Ответ 3

Проблема частично ответила на ваш вопрос. AMI Amazon не считает, что /usr/local/bin является частью учетной записи root PATH. Вы можете исправить это, обновив корневую учетную запись ~/.bashrc, чтобы включить ее.

Что-то вроде этого...

export PATH=$PATH:/usr/local/bin

Ответ 4

После битвы с этим в течение нескольких часов и чтения комментариев

which pip дал /usr/bin/pip, но фактический пип находился в /usr/local/bin/pip из-за обновления апгрейда и очистки не было завершено

Итак, удалив пип в /usr/bin/

sudo rm/usr/bin/pip

а также добавление нового пункта в путь экспорта

vim ~/.bash_profile

PATH = $PATH: $HOME/бен:/USR/локальные/бен

и войдите в систему

which pip должен предоставить /usr/local/bin/pip

pip install --upgrade pip

Ответ 5

Это работает для меня

sudo /usr/local/bin/pip install --upgrade pip

Ответ 6

Я думаю, что вы не установили пакет pythonXX-pip.

Я обновил свою версию до Python3.4, эти команды работают для меня.

sudo su
yum install python34
yum install python34-pip

Ответ 7

Я думаю, что лучшей стратегией в этом случае является управление pip как часть виртуальной среды с использованием virtualenv, а не возиться с версией на системном уровне.

Если вы в порядке с этим, вот основная идея:

  • Установите версию virtualenv, упакованную с версией pip, которую вы хотите обновить до системного уровня pip (например, virtualenv==15.1.0 поставляется с pip==9.0.1):

    $ sudo pip install -U virtualenv==15.1.0
    You are using pip version 6.1.1, however version 9.0.1 is available.
    You should consider upgrading via the 'pip install --upgrade pip' command.
    Collecting virtualenv==15.1.0
      Downloading virtualenv-15.1.0-py2.py3-none-any.whl (1.8MB)
        100% |████████████████████████████████| 1.8MB 135kB/s
    Installing collected packages: virtualenv
      Found existing installation: virtualenv 12.0.7
        Uninstalling virtualenv-12.0.7:
          Successfully uninstalled virtualenv-12.0.7
    Successfully installed virtualenv-15.1.0
    

    Я использовал virtualenv примечания к выпуску, чтобы узнать, какая версия pip соответствует той версии virtualenv.

  • Создайте виртуальную среду:

    $ virtualenv myenv
    New python executable in /home/ec2-user/myenv/bin/python2.7
    Also creating executable in /home/ec2-user/myenv/bin/python
    Installing setuptools, pip, wheel...done.
    
  • Активируйте виртуальную среду и подтвердите версию и расположение обновленного pip:

    $ source myenv/bin/activate
    (myenv) $ pip -V
    pip 9.0.1 from /home/ec2-user/myenv/local/lib/python2.7/dist-packages (python 2.7)
    (myenv) $ which pip
    ~/myenv/bin/pip
    

Это должно позволить вам устанавливать пакеты на этот virtualenv с помощью pip по вашему выбору без необходимости sudo.