Как удалить пакет, установленный с помощью pip install --user


219

Существует --userопция для pip, которая может установить пакет Python для пользователя:

pip install --user [python-package-name]

Я использовал эту опцию, чтобы установить пакет на сервер, для которого у меня нет прав root. Теперь мне нужно удалить установленный пакет для текущего пользователя. Я попытался выполнить эту команду:

pip uninstall --user [python-package-name]

Но я получил:

no such option: --user

Как я могу удалить пакет, с которым я установил pip install --user, кроме поиска и удаления пакета вручную?

Я нашел эту статью

pip не может удалить из пользовательского каталога site-packages

который описывает, что удаление пакетов из каталога пользователя не поддерживается. Согласно статье, если это было реализовано правильно, то с

pip uninstall [package-name]

пакет, который был установлен, будет также найден в пользовательских каталогах. Но проблема все еще остается для меня. Что если один и тот же пакет был установлен как для всей системы, так и для пользователя? Что, если кому-то нужно ориентироваться на конкретный пользовательский каталог?


1
Нет, вы должны установить одно virtualenv для каждого пользователя: группы и дать надлежащие системные разрешения для папки, содержащей его.
Даниус

3
Невозможно установить общесистемный пакет для всех пользователей, а затем выборочно удалить его для некоторых пользователей. Если пакет был установлен как, --userто удаление без --userбудет делать то, что вы хотите.
tripleee

@tripleee: у меня нет разрешений всей системы, и я не хочу, мне просто нужно удалить его для каждого текущего пользователя
Serjik

1
Выясните, какой каталог у вас нет прав для удаления, и исправьте его разрешения, или вручную переместите его в сторону.
tripleee

Ответы:


196

Протестировав это с использованием Python 3.5 и pip 7.1.2 в Linux, ситуация выглядит так:

  • pip install --user somepackageустанавливает $HOME/.localи удаляет его, используя pip uninstall somepackage.

  • Это верно независимо от того, somepackageустановлен ли он или нет в масштабе всей системы одновременно.

  • Если пакет установлен в обоих местах, будет удален только локальный. Чтобы удалить пакет в масштабе всей системы pip, сначала удалите его локально, а затем снова выполните ту же команду удаления с rootпривилегиями.

  • В дополнение к предопределенному пользователю установочной директории, pip install --target somedir somepackageустановит пакет вsomedir . Невозможно удалить пакет из такого места, используя pip. (Но на Github есть несколько старый необработанный запрос на извлечение pip uninstall --target).

  • Поскольку единственные места pip, из которых когда-либо удаляются, - это общесистемные и предварительно определенные локальные пользователи, вам нужно запускать pip uninstallот имени соответствующего пользователя для удаления из локального каталога установки данного пользователя.


2
Точны ли эти утверждения для запуска pip в виртуальной среде?
Кболино

в моем случае деинсталляция не работала для пакета pip 9.0.1, все еще установленного в HOME / ./ local
Genom

2
Пункт 2, похоже, не соответствует действительности в моей системе. У меня есть пакет системы jediустановлен в /usr/lib64/python2.7/site-packages/. Когда я это делаю, как обычный пользователь: pip install --user jedi и затем pip uninstall jedi, pip пытается удалить, /usr/lib64/python2.7/site-packages/jediа затем выкинуть с Permission denied. Так что, если --userне существует для команды удаления, как я могу сказать удалить не пытаться удалить, /usr/lib64/python2.7/site-packages/jediно ~/.local/lib64/python3.6/site-packages/jedi?
AstroFloyd

Точно так же, как здесь @AstroFloyd
Никана Рекламикс


9

Будьте осторожны, тем, кто использует pip install --user some_pkg внутри виртуальной среды .

$ path/to/python -m venv ~/my_py_venv
$ source ~/my_py_venv/bin/activate
(my_py_venv) $ pip install --user some_pkg
(my_py_venv) $ pip uninstall some_pkg
WARNING: Skipping some_pkg as it is not installed.
(my_py_venv) $ pip list
# Even `pip list` will not properly list the `some_pkg` in this case

В этом случае вам нужно деактивировать текущую виртуальную среду , а затем использовать соответствующий python/ pipисполняемый файл для вывода списка или удаления пакетов сайта пользователя:

(my_py_venv) $ deactivate
$ path/to/python -m pip list
$ path/to/python -m pip uninstall some_pkg

Обратите внимание, что эта проблема была зарегистрирована несколько лет назад . И кажется, что текущий вывод таков: --userнедопустимо pipв виртуальной среде, поскольку местоположение пользователя не имеет смысла для виртуальной среды.


3
Слишком поздно !, я использовал --userв виртуальной среде, есть ли способ отменить это ?, потому pip listчто не работает ....
jnfran92

2
«И кажется, что текущий вывод таков: - пользователь недопустим в пипе виртуального env, поскольку местоположение пользователя не имеет смысла для виртуальной среды». Согласовано. Пользователь устанавливает поражение всей цели виртуальной среды. К сожалению, есть много плохих примеров людей, делающих это там.
Стивен Бош

7

Я думаю, что можно удалить пакеты, установленные с --userфлагом. Этот работал для меня;

pip freeze --user | xargs pip uninstall -y

Для питона 3;

pip3 freeze --user | xargs pip3 uninstall -y

Но почему-то эти команды не удаляют setuptools и pip. После этих команд (если вы действительно хотите чистый python) вы можете удалить их с помощью;

pip uninstall setuptools && pip uninstall pip


2
Это элегантное решение, которое хорошо сработало для меня.
Стивен Бош

хорошо, он удаляет все пакеты, которые я когда-либо устанавливал с --userфлагом! теперь, чтобы переустановить их в моей среде Анаконды ...
Конор Коснетт

2

Ответ пока невозможен . Вы должны удалить его вручную.


При установке пакета произошла трассировка. Деинсталляция никогда не работала после этого.
Сям

Как мне перечислить все файлы pip, установленные для данного пакета (чтобы я мог их удалить)?
AstroFloyd

Это фактически невозможно, потому что pip запускает setup.py, который запускает внешний код. Пока файл setup.py не будет полностью удален, забудьте об этом, вероятно, к 2022 году.
сорин

2

Как упомянул @ thomas-lotze, в настоящее время инструменты pip этого не делают, так как нет соответствующей опции --user. Но я обнаружил, что могу проверить в ~ / .local / bin и найти конкретный пункт #. #, Который, как мне кажется, соответствует опции --user.

В моем случае:

antho@noctil: ~/.l/bin$ pwd
/home/antho/.local/bin
antho@noctil: ~/.l/bin$ ls pip*
pip  pip2  pip2.7  pip3  pip3.5

А затем просто удалите с определенной версией пипа.


stackoverflow.com/a/11250821/14420, чтобы увидеть рецепт удаления ванны, например, ./pip2 freeze | grep -v "^-e" | xargs pip uninstall -yдля всего, кроме пакетов, установленных в редактируемом режиме
Matt Wilkie

1

Я использую Anaconda версии 4.3.22 и среду python3.6.1, и у меня возникла эта проблема. Вот история и исправление:

pip uninstall opencv-python # -- the original step. failed.

ImportError: DLL load failed: The specified module could not be found.

Я сделал это в моей среде python3.6 и получил эту ошибку.

python -m pip install opencv-python # same package as above.
conda install -c conda-forge opencv # separate install parallel to opencv
pip-install opencv-contrib-python # suggested by another user here. doesn't resolve it.

Затем я попытался скачать python3.6 и положить python3.dll в папку и в разные папки. Ничего не изменилось.

наконец, это исправлено:

pip uninstall opencv-python

(другая версия conda-forge все еще установлена) Это оставило только версию conda, и это работает в 3.6.

>>>import cv2
>>>

работает!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.