Як видалити пакунок, встановлений за допомогою програми pip install --user


219

Існує --userопція для pip, яка може встановити пакет Python на кожного користувача:

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

Я використав цю опцію, щоб встановити пакет на сервер, до якого у мене немає кореневого доступу. Що мені зараз потрібно - це видалити встановлений пакет у поточного користувача. Я спробував виконати цю команду:

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

Але я отримав:

no such option: --user

Як я можу видалити пакунок, який я встановив pip install --user, окрім пошуку вручну та видалення пакета?

Я знайшов цю статтю

pip не може видалити з каталогу сайтів-пакунків кожного користувача

де описано, що деінсталяція пакетів з каталогу користувачів не підтримується. Відповідно до статті, якщо вона була реалізована правильно, то з

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 всередині віртуального середовища?
— kbolino

в моєму випадку видалення не працювало, щоб пакет 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
— Nikana Reklawyks


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всередині віртуального env, чи є спосіб це повернути ?, тому pip listщо не працює ....
— jnfran92

2
"І, схоже, поточний висновок такий: - користувач не дійсний у вікні віртуального env, оскільки місце розташування користувача насправді не має сенсу для віртуального середовища." Домовились. Користувач встановлює поразку цілі цілі віртуального середовища. На жаль, є маса поганих прикладів того, як люди роблять це там.
— Стівен Бош

5

Я думаю, що можна видалити пакунки, встановлені --userпрапором. Цей працював на мене;

pip freeze --user | xargs pip uninstall -y

Для пітона 3;

pip3 freeze --user | xargs pip3 uninstall -y

Але якимось чином ці команди не видаляють setuptools та pip. Після цих команд (якщо ви дійсно хочете чистого пітона) ви можете видалити їх;

pip uninstall setuptools && pip uninstall pip


2
Це елегантне рішення, яке добре працювало для мене.
— Стівен Бош

2

Відповідь поки не можлива . Його потрібно видалити вручну.


Під час встановлення пакету було відстежено. Видалення ніколи не працювало після цього.
— сіям

Як перерахувати всі файли, встановлені в певному пакеті (щоб я міг їх видалити)?
— АстроФлойд

Це фактично неможливо, оскільки pip запускає setup.py, який виконує зовнішній код. Поки setup.py не буде видалено повністю, забудьте про це, ймовірно, до 2022 року це буде.
— sorin

2

Як згадував @ thomas-lotze, в даний час інструменти для роботи з піпними системами не роблять цього, оскільки немає відповідного варіанту --user. Але мені здається, що я можу зайти в ~ / .local / bin і шукати конкретний pip #. #, Який мені здається, що він відповідає параметру --user.

У моєму випадку:

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

А потім просто видаліть конкретну версію pip.


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

0

У мене працює анаконда версії 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.