видалення python setup.py


785

Я встановив пакет python з python setup.py install.

Як його видалити?


52
Прийнята відповідь застаріла. Використовуйте pip uninstall <your_package>. Дивіться stackoverflow.com/questions/1231688/… .
Йоахім Ш

21
видалення піп більше не відповідає дійсності. Ось доказ. [sri @ localhost python] $ pip uninstall foo ВИЗНАЧЕННЯ: Видалення проекту, встановленого distutils (foo), застаріле і буде видалено у наступній версії. Це пов’язано з тим, що видалення проекту distutils лише частково видалить проект.
кривошик

@shrewmouse, яка більше не відображається.
JC Rocamonde

@JCRocamonde З створеним нами пакетом відображається остання версія pip, It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.тому це все ще проблема.
Джош

@Josh у верхній частині файла setup.py виконайте "з установки імпорту setuptools" замість "з установки імпорту distutils.core".
bigjake

Відповіді:


976

Примітка. Уникайте python setup.py installвикористанняpip install .

Вам потрібно видалити всі файли вручну, а також скасувати будь-які інші речі, які встановлено вручну.

Якщо ви не знаєте переліку всіх файлів, ви можете перевстановити його за допомогою --recordпараметра та ознайомитись зі списком, який він створює.

Для запису списку встановлених файлів можна скористатися:

python setup.py install --record files.txt

Після видалення ви можете використовувати xargs для видалення:

xargs rm -rf < files.txt

Або якщо ви працюєте з Windows, використовуйте Powershell:

Get-Content files.txt | ForEach-Object {Remove-Item $_ -Recurse -Force}

Потім видаліть також каталог, що містить, наприклад, /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/my_module-0.1.egg/на macOS. У ньому немає файлів, але Python все одно імпортує порожній модуль:

>>> import my_module
>>> my_module.__file__
None

Після видалення Python показує:

>>> import my_module
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'my_module'

6
Якщо це не cat files.txt | xargs sudo rm -rf
допоможе

21
Це зіпсує файли з пробілами. Дивіться мою відповідь нижче: stackoverflow.com/a/25209129/14456
Ян Келлінг

1
Як я можу перевстановити пакет, у якому є вихідний код використання setup.py з нього?
ア レ ッ ク ス

5
Це також залишає порожні каталоги на їх місці.
Ділавар

3
Привіт, я спробував вашу пропозицію щодо деяких файлів, коли я пробую файли cat.txt | xargs rm -rf говорить про те, що в дозволі відмовлено навіть у режимі sudo, наприклад, для / usr / local / bin / pydoc або / usr / local / bin / idle Будь-які ідеї чому?

212

Для мене в основному працює наступне:

встановити pip, наприклад:

$ easy_install pip

Перевірте, як називається встановлений пакет з точки зору pip:

$ pip freeze

У цьому списку відображаються назви всіх встановлених вами пакетів (які були виявлені піп). Ім’я може бути десь довгим, тоді використовуйте лише назву пакета, що відображається на і після #egg=. Ви також можете в більшості випадків ігнорувати частину версії (що далі ==або -).

Потім видаліть пакет:

$ pip uninstall package.name.you.have.found

Якщо він попросить підтвердження про видалення пакета, то вам пощастить, і він буде видалений.

pip повинен виявляти всі пакунки, які були встановлені через pip. Він також повинен виявити більшість пакетів, встановлених через easy_install або setup.py, але це може в деяких рідкісних випадках вийти з ладу.

Ось справжній зразок мого локального тесту з пакетом, названим ttr.rdstmcу MS Windows.

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev

$ python setup.py develop
.....
.....
Finished processing dependencies for ttr.rdstmc==0.0.1dev

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
-e hg+https://vlcinsky@bitbucket.org/vlcinsky/ttr.rdstmc@d61a9922920c508862602f7f39e496f7b99315f0#egg=ttr.rdstmc-dev
ttr.utcutils==0.1.1dev

$ pip uninstall ttr.rdstmc
Uninstalling ttr.rdstmc:
  c:\python27\lib\site-packages\ttr.rdstmc.egg-link
Proceed (y/n)? y
  Successfully uninstalled ttr.rdstmc

$ pip freeze |grep ttr
ttr.aws.s3==0.1.1dev
ttr.aws.utils.s3==0.3.0
ttr.utcutils==0.1.1dev

Редагувати 2015-05-20

Все, що написано вище, як і раніше, стосується, все одно, доступні невеликі модифікації.

Встановіть pip в python 2.7.9 та python 3.4

Останні версії python поставляються з пакетом, ensurepipщо дозволяє встановлювати pip навіть у режимі офлайн:

$ python -m securepip - оновлення

У деяких системах (наприклад, Debian Jessie) це недоступно (щоб запобігти порушенню встановлення системного пітона).

Використання grepабоfind

Приклади вище припускають, що ви grepвстановили. У мене (у той час, коли на моїй машині був MS Windows) встановлено набір утиліт Linux (включаючи grep). Крім того, використовуйте рідну MS Windows findабо просто ігноруйте цю фільтрацію та знайдіть її ім'я в трохи більш тривалому списку виявлених пакетів python.


1
який пакувальний інструмент / версія ви використовуєте для цього для роботи? ( distutils, distributeтощо) ...
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

1
Я використовую setuptools. Ви можете перевірити bitbucket.org/vlcinsky/ttr.aws.utils.s3 (що не ідеально). У всякому разі, я дуже незадоволений використанням пакетів простору імен, колись імпорт порушується без видимих ​​причин. Але це вже інша історія.
Ян Вльчинський

1
виправляючи себе. Хоча я імпортую setuptools, насправді використовую distribute. Ще один урок: коли ви встановлюєте власний пакет з pypi і плануєте розробити ще один локальний обмін тим самим простором імен, не використовуйте $ pip install <the package> , не використовуйте $ easy_install <the package>, інакше ви стикаєтесь з конфліктами при імпорті пакету розробки.
Ян Вльчинський

1
Щоб допомогти іншим: оскільки я не корінь, я встановлюю все в своєму будинку. Ось що я зробив easy_install --user --prefix=$HOME pip. Потім я додав наступне в моїх PATH: ln -s /home/tflutre/.local/bin/pip ~/bin, ln -s /home/tflutre/.local/bin/pip2.7 ~/binі ln -s /home/tflutre/.local/bin/pip2 ~/bin.
tflutre

3
На це слід прийняти відповідь, так як це набагато простіше, а піп зазвичай все одно поставляється з Python. Його легко використовувати в командному рядку / терміналі - pip uninstall moduleабо він python -m pip uninstall moduleповинен працювати. Також має бути кросплатформна, як це частина Python.
Едвард

81

У відповіді №1 є проблеми:

  • Не працюватимуть на Mac.
  • Якщо встановлено файл, який містить пробіли чи інші спеціальні символи, xargsкоманда не вдасться та видалить будь-які файли / каталоги, які відповідали окремим словам.
  • -rв rm -rfнепотрібно і в гіршому випадку може видалити речі , які ви не хочете.

Натомість для unix-подібних:

sudo python setup.py install --record files.txt
# inspect files.txt to make sure it looks ok. Then:
tr '\n' '\0' < files.txt | xargs -0 sudo rm -f --

А для вікон:

python setup.py bdist_wininst
dist/foo-1.0.win32.exe

Існують також нерозв’язні проблеми з видаленням setup.pyустановки, які не турбують вас у типовому випадку. Для більш повної відповіді дивіться цю сторінку вікі:

https://ofswiki.org/wiki/Uninstalling_setup.py_install


3
Чому ви просто не залишаєте пропозицію під схваленою? Зауважте, що ці "серйозні проблеми" стосуються кутових справ.
lpapp

17
Я залишив коментар під схваленим. Мій коментар похований під посиланням "завантажити більше коментарів", яке мало хто натискає. Я також зробив власну відповідь, бо мені було набагато більше сказати, тобто. посилання у моїй відповіді. Крім того, кутовий випадок не буде першим терміном, який мені спадає на думку, коли у файлі є пробіл.
Ян Келінг

Для чого це варто, я думаю, що це не вдасться в імені файлів, які містять нові рядки :) Чи будь-які підтримувачі пакунків такі злі, я сподіваюся, що ніколи не дізнаюся.
Джек О'Коннор

2
У ОС X Mavericks, принаймні, у xargs немає опції -d. Чому? Тому що Apple тебе любить. У будь-якому випадку це має ті ж ефекти, що і вище, і безпечно для просторів і подібних. Хоча це і Баш. Після запуску встановлення з --record до files.txt:OIFS=$IFS; IFS=$'\n'; FILES=( $( cat files.txt ) ); IFS=$OIFS; sudo rm -rf "${FILES[@]}"
Йосип Сікорскі,

2
@IanKelling вкладення змінних всередині printf«s рядки формату буде помилкою , якщо рядок трапляється містити , наприклад , %або \символи. Завжди надайте рядок формату: printf '%s\0' "$line"(також уникає відлуння). Хоча ви можете додатково уникнути циклу, просто скориставшисьtr '\n' '\0' < files.txt | xargs -0 rm -f
geirha

39

Спочатку запишіть встановлені файли. Ви можете повторити цю команду, навіть якщо ви раніше виконували setup.py install:

python setup.py install --record files.txt

Коли ви хочете видалити, ви можете просто:

sudo rm $(cat files.txt)

Це працює, тому що команда rm видаляє відокремлений пробілом список файлів для видалення, а ваша інсталяційна запис є саме таким списком.


Чи є спосіб перевірити не лише те, чи встановила його моя програма, але і якщо з тих пір жоден інший додаток не використовував цей ресурс? Наприклад, я встановив інструмент, для цього мені довелося встановити кілька бібліотек, можливо, деякі з них уже були встановлені (це означає, що я не можу видалити в процесі видалення), але також не можу видалити нічого, що інші програми не встановлено, тому що мою бібліотеку встановили спочатку ..
Габріель

19

Тепер python дає вам вибір встановити pipпід час встановлення (я в Windows, і принаймні python робить це для Windows!). Зважаючи на те, що ви вирішили встановити pipпід час встановлення python (ви насправді не повинні вибирати, оскільки він за замовчуванням), pipдля вас уже встановлено. Потім введіть у pipкомандному рядку, ви побачите довідку. Тут ви можете знайти необхідні інструкції щодо використання. Наприклад, pip listви показуєте список встановлених пакетів. Можна використовувати

pip uninstall package_name

видалити будь-який пакет, який ви більше не хочете. Докладніше читайте тут (документація на піп) .


8

Ледачий спосіб: просто видаліть з меню інсталяції Windows (якщо ви використовуєте Windows) або з команди rpm, за умови, що спочатку перевстановите її після створення дистрибутива.

Наприклад,

python setup.py bdist_wininst
dist/foo-1.0.win32.exe

("foo" є прикладом звичайно).


4
Я не знаю, чи мені це подобається, але ви отримаєте бал для ортогального мислення. :)
Леннарт Регебро

Якщо чесно, я не впевнений, що звідси і "ледачий шлях" ;-) Але я подумав, що можна сказати, що можна створити більше "стандартного" інсталятора. Дивно, що setup.py не забезпечує чіткого способу видалення пакетів.
RedGlyph

1
Для видалення потрібні централізовані реєстри встановлених пакетів та файлів, а таких немає. Тривають дискусії щодо того, як покращити цю історію, і вона може бути вирішена в Python 2.7 / 3.2 або 2.8 / 3.3 або близько того.
Леннарт Регебро

1
@Lennart: Python 2.8 не буде, принаймні, це офіційна заява
Piotr Owsiak

2
@PiotrOwsiak: Так, але тоді це не було твердженням. 2.8 тоді ще була можливість та залишалася такою до тих пір, поки PEP 404 не був затверджений, я думаю, кінець минулого року.
Леннарт Регебро

6

Перейдіть у каталог пакунків python та видаліть .egg-файл, наприклад: У python 2.5 (ubuntu): /usr/lib/python2.5/site-packages/

У python 2.6 (ubuntu): /usr/local/lib/python2.6/dist-packages/


1
Працює, якщо не встановити встановлені файли поза пакетом, що деякі роблять, як setuptools, який встановлює та команду easy_install.
Леннарт Регебро

3
Зазвичай, якби пакет був встановлений за допомогою python setup.py, визначений ОП, яйце не було б. OTOH, якщо такий існує, оскільки використовувався easy_install, документованим способом видалення пакунків є використання easy_install -m перед видаленням яєчного файлу; в іншому випадку яєчні шкаралупи можуть залишитися позаду у файлі easy-install.pth.
Нед Дейлі

5

Не точно відповідаючи на питання, але щось, що мені допомагає щодня:

Встановіть ваші пакети за допомогою

pip install .

Це ставить пакет $HOME/.local. Видалити за допомогою

pip uninstall <package_name>

1
pip unistall .не працювало для мене, але pip uninstall <package_name>зробив, дякую!
Даніель

4

Можливо, ви можете це зробити як альтернативу: -

1) Отримайте версію пітона -

[linux machine]# python
Python 2.4.3 (#1, Jun 18 2012, 14:38:55) 

-> Наведена вище команда дає поточну версію пітона, яка є 2.4.3

2) Отримайте інсталяційний каталог python -

[linux machine]# whereis python
python: /usr/bin/python /usr/bin/python2.4 /usr/lib/python2.4 /usr/local/bin/python2.5 /usr/include/python2.4 /usr/share/man/man1/python.1.gz

-> З вищевказаної команди ви можете отримати інсталяційний каталог, який є - /usr/lib/python2.4/site-packages

3) Звідси ви можете видалити пакунки та файли яєць python

[linux machine]# cd /usr/lib/python2.4/site-packages
[linux machine]# rm -rf paramiko-1.12.0-py2.4.egg paramiko-1.7.7.1-py2.4.egg paramiko-1.9.0-py2.4.egg

Це працювало для мене .. І мені вдалося видалити пакет, який мене хвилював :)


3

Я думаю, ви можете відкрити setup.py, знайти ім'я пакета, а потім попросити pip його видалити.

Якщо припустимо, що ім'я доступне в змінній 'METADATA':

pip uninstall $(python -c "from setup import METADATA; print METADATA['name']")

1

Розширення того, що сказав Мартін, записування встановленого результату і невеликого розміру сценаріїв робить трюк досить чудово. Ось що я роблю ...

for i in $(less install.record);
sudo rm $i;
done;

І престо. Видалено.


2
Набагато простіше написати це як sudo xargs rm -v < install.record.
poolie

1

Якщо у вас все ще є файли, які слід видалити після повторної установки пакета, переконайтеся, що папка buildтакож видалена. Тому, припускаючи, що pkgце пакет, який потрібно видалити:

rm -r $(python3 -c "import pkg; print(pkg.__path__[0] + '*' )") 
rm -rf build

Вище розробіть для python3 та видаліть пакет та його * .egg-info файл


1

At {virtualenv}/lib/python2.7/site-packages/(якщо не використовувати virtualenv, то {system_dir}/lib/python2.7/dist-packages/)

  • Видаліть яєчний файл (наприклад distribute-0.6.34-py2.7.egg)
  • Якщо є якийсь файл easy-install.pth, видаліть відповідний рядок (це повинен бути шлях до вихідного каталогу або до файлу яєць).

0

Я в минулому минулому випадково в моєму глобальному середовищі запустив "python setup.py install" і у мене виникли великі труднощі з видаленням. Ці рішення не допомогли. "pip uninstall" не працював із "Неможливо видалити" splunk-appinspect ". Видалення файлів не знайдено." "видалення файлу sudo" не спрацювало "Неможливо видалити вимогу splunk-appinspect, не встановлено". Я спробував видалити pip, видаливши кеш-пам'ять, пошукав на жорсткому диску пакет тощо.

"pip show" врешті-решт привів мене до рішення, "Location:" вказував на каталог, а перейменування цього каталогу призвело до видалення упакованого із списку pip. Я перейменував каталог назад, і він не з’явився знову в списку піп, і тепер я можу перевстановити свій пакет у virtualenv.


0

Я працював python setup.py installодин раз у своєму PyCharm, він встановлює всі пакунки в моє базове середовище conda. Пізніше, коли я хочу видалити всі ці пакети, pip uninstallне виходить. Мені довелося видалити їх з /anaconda3/lib/python3.7/site-packages вручну :(

Тому я не бачу причини, чому вони використовують setup.py замість того, щоб писати файл вимоги.txt. Файл вимоги можна використовувати для встановлення пакетів у віртуальному середовищі, і не возиться із системними пакетами python.


-1

Можливо, краще буде видалити пов’язані файли, використовуючи bash для читання команд, наприклад:

sudo python setup.py install --record files.txt
sudo bash -c "cat files.txt | xargs rm -rf"

Це копія існуючої раніше відповіді.
Карл Ріхтер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.