Обновление апгрейда в 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
Есть ли способ правильно управлять пипсом?
Ответы
Ответ 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
.