Удаление пакета с «pip» также удаляет зависимые пакеты?
153
Когда вы используете pipдля установки пакета, все необходимые пакеты также будут установлены вместе с ним (зависимости). Удаление этого пакета также удаляет зависимые пакеты?
Почему ты не можешь просто попробовать и посмотреть? Я бы сделал именно это, чтобы ответить на ваш вопрос, но по какой-то причине pip не может получить индекс пакета здесь прямо сейчас.
Томас Вандер Стичеле
1
В новостной группе pip я обнаружил, что люди pip не хотят эту функциональность, по крайней мере сейчас. Как жаль!
Мишель Самия
4
@ThomasVanderStichele, потому что тогда ответ не будет доступен онлайн для будущих гуглеров :)
Марк
1
@ Отметьте, вы просто запишите ответ на свой вопрос здесь.
Томас Вандер Стичеле
5
@ThomasVanderStichele: Я не OP, но вот почему это очень законный Q & A для SO: pipа) заведомо хрупкий и зависит от версии, а также б) в некоторых клиентских установках, с которыми мне приходилось работать, он был установлен с Права администратора (хотя пакетов не было), поэтому его нарушение или удаление было огромным горем, и у вас был один шанс сделать все правильно. в) Интернет-соединение может быть не очень хорошим; по соображениям безопасности корпоративные машины часто защищены брандмауэром, поэтому вы не можете использовать прямое подключение, и вам необходимо заранее знать все, что вам нужно, и его версию, и загрузить ее.
smci
Ответы:
81
Нет, он не удаляет пакеты зависимостей. Удаляет только указанный пакет:
$ pip install specloud
$ pip freeze # all the packages here are dependencies of specloud package
Работает хорошо для меня в Python 3 с октября 2019 года.
закуски
@ love.by.Jesus - я на Python 3.8.3, и я тестировал и все еще вижу команду, выполненную как pip-autoremove(тире не подчеркивание). pip_autoremoveдает мне command not found.
bwv549
@ bwv549 Я должен объяснить, что я выполнил это через python<version>(когда должна быть указана версия). Таким образом, нам нужно адаптировать имя к pip_autoremove(тире не допускается в качестве имени пакета). Например, python3.8 pip_autoremoveработает, но python3.8 pip-autoremoveне работает. В противном случае, как вы указали, как простая команда терминала pip-autoremove, она отлично работает :), хотя используется только версия системы по умолчанию на python. Спасибо за твое сообщение.
любит.Иесус
9
я успешно удалил зависимости пакета, используя эту строку:
for dep in $(pip show somepackage | grep Requires| sed 's/Requires: //g; s/,//g');do pip uninstall -y $dep ; done
Хотя технически это решение действительно успешно удалить все зависимости, как указано в других ответах, он также удаляет зависимости , которые являются не только для цели , в том числе те , что установлены из пакетов системы. Например, в моей системе этот скрипт в конце концов потерпел неудачу, потому что целевой пакет имел общие зависимости с pip, поэтому pip удалил свои собственные зависимости до завершения скрипта, а затем потерпел неудачу.
sinisterstuf
19
Осторожно, это удаляет только зависимости нижнего уровня следующего уровня, но не зависимости этих зависимостей.
tamakisquare
0
Я нашел решение, хотя для некоторых это может быть немного сложным.
1-й шаг (для Python3 и Linux):
pip3 установить pip-autoremove
2 - й шаг:
cd /home/usernamegoeshere/.local/bin/
3-й шаг:
gedit /home/usernamegoeshere/.local/lib/python3.8/site-packages/ pip_autoremove.py
и измените все pip (ы) на pip3 4-й шаг: ./pip-autoremove packagenamegoeshere
По крайней мере, это было то, что работало для меня ...
pip
а) заведомо хрупкий и зависит от версии, а также б) в некоторых клиентских установках, с которыми мне приходилось работать, он был установлен с Права администратора (хотя пакетов не было), поэтому его нарушение или удаление было огромным горем, и у вас был один шанс сделать все правильно. в) Интернет-соединение может быть не очень хорошим; по соображениям безопасности корпоративные машины часто защищены брандмауэром, поэтому вы не можете использовать прямое подключение, и вам необходимо заранее знать все, что вам нужно, и его версию, и загрузить ее.Ответы:
Нет, он не удаляет пакеты зависимостей. Удаляет только указанный пакет:
Как вы можете видеть, эти пакеты являются зависимостями,
specloud
и они все еще там, но не самspecloud
пакет.Как упоминалось ниже, вы можете установить и использовать утилиту pip-autoremove для удаления пакета плюс неиспользуемые зависимости.
источник
specloud
пакета?Вы можете установить и использовать утилиту pip-autoremove, чтобы удалить пакет и неиспользуемые зависимости.
источник
pip-autoremove
(тире не подчеркивание).pip_autoremove
дает мнеcommand not found
.python<version>
(когда должна быть указана версия). Таким образом, нам нужно адаптировать имя кpip_autoremove
(тире не допускается в качестве имени пакета). Например,python3.8 pip_autoremove
работает, ноpython3.8 pip-autoremove
не работает. В противном случае, как вы указали, как простая команда терминалаpip-autoremove
, она отлично работает :), хотя используется только версия системы по умолчанию на python. Спасибо за твое сообщение.я успешно удалил зависимости пакета, используя эту строку:
это сработало на пипе 1.5.4
источник
Я нашел решение, хотя для некоторых это может быть немного сложным.
1-й шаг (для Python3 и Linux):
pip3 установить pip-autoremove
2 - й шаг:
cd /home/usernamegoeshere/.local/bin/
3-й шаг:
gedit /home/usernamegoeshere/.local/lib/python3.8/site-packages/ pip_autoremove.py
и измените все pip (ы) на pip3 4-й шаг: ./pip-autoremove packagenamegoeshere
По крайней мере, это было то, что работало для меня ...
источник
Вы можете попробовать https://github.com/cls1991/pef . Он удалит пакет со всеми его зависимостями.
источник