"Удаление пакета Python с помощью setup.py"
У меня установлен пакет Python с помощью команды python setup.py install
.
Как мне его удалить?
5 ответ(ов)
Обратите внимание: избегайте использования 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'
Для меня следующий метод в основном работает:
Убедитесь, что у вас установлен pip, например:
$ easy_install pip
Проверьте, как называется установленный пакет с точки зрения pip:
$ pip freeze
Эта команда выведет список всех пакетов, которые вы установили (и которые были обнаружены pip). Название может быть довольно длинным, поэтому используйте только имя пакета, которое указано в конце строки после #egg=
. В большинстве случаев вы также можете игнорировать часть с версией (то, что следует за ==
или -
).
Затем удалите пакет:
$ pip uninstall package.name.you.have.found
Если pip запросит подтверждение удаления пакета, значит, вам повезло, и он будет удален.
pip должен обнаружить все пакеты, которые были установлены с его помощью. Также он должен обнаружить большинство пакетов, установленных через easy_install или setup.py, хотя в редких случаях это может не сработать.
Вот реальный пример из моего локального теста с пакетом под названием ttr.rdstmc
на 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
.....
.....
Закончена обработка зависимостей для 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://[email protected]/vlcinsky/ttr.rdstmc@d61a9922920c508862602f7f39e496f7b99315f0#egg=ttr.rdstmc-dev
ttr.utcutils==0.1.1dev
$ pip uninstall ttr.rdstmc
Удаление ttr.rdstmc:
c:\python27\lib\site-packages\ttr.rdstmc.egg-link
Продолжить (y/n)? y
Успешно удален 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 ensurepip --upgrade
На некоторых системах (например, Debian Jessie) это может быть недоступно (чтобы не повредить системную установку Python).
Использование grep
или find
Примеры, приведенные выше, предполагают, что у вас установлен grep
. Я (когда у меня был Windows на компьютере) установил набор утилит Linux (включая grep). В качестве альтернативы вы можете использовать нативный find
в Windows или просто проигнорировать фильтрацию и найти название в более длинном списке обнаруженных пакетов Python.
Ответ на вопрос имеет некоторые недостатки:
- Не будет работать на mac.
- Если в имени файла есть пробелы или другие специальные символы, команда
xargs
не сработает, и это приведет к удалению любых файлов/каталогов, соответствующих отдельным словам. - Параметр
-r
вrm -rf
излишен и в худшем случае может удалить то, что вам не нужно.
Вместо этого для unix-подобных систем используйте:
sudo python setup.py install --record files.txt
# Проверьте файл files.txt, чтобы убедиться, что он выглядит правильно. Затем:
tr '\n' '\0' < files.txt | xargs -0 sudo rm -f --
Для Windows:
python setup.py bdist_wininst
dist/foo-1.0.win32.exe
Также есть нерешаемые проблемы с удалением установок setup.py
, но они не должны вас беспокоить в типичном случае. Для более полного ответа смотрите эту вики-страницу:
Чтобы зафиксировать установленные файлы, используйте следующую команду. Вы можете повторно выполнить эту команду, даже если ранее уже запускали setup.py install
:
python setup.py install --record files.txt
Когда вам потребуется удалить установленные файлы, просто выполните:
sudo rm $(cat files.txt)
Это работает, потому что команда rm принимает список файлов, разделённых пробелами, и ваш файл со списком установленных файлов именно таков.
Хотя это не совсем ответ на вопрос, но вот что помогает мне каждый день:
Устанавливайте ваши пакеты с помощью команды
pip install .
Это установит пакет в каталог $HOME/.local
. Для удаления используйте команду
pip uninstall <package_name>
Почему используется string.join(list), а не list.join(string)?
Создание словаря с помощью генератора словарей
Как получить полный путь к директории текущего файла?
UnicodeDecodeError: Кодек 'charmap' не может декодировать байт X в позиции Y: символ отображается как <неопределённый>
Найти все файлы с расширением .txt в директории на Python