Pip не удаляет пакеты
Фон
Я работаю над учебным проектом (в основном) анализирую некоторые "кто следует за" графиками и хотел бы получить некоторые реальные данные (путем создания некоторых небольших наборов данных) из Twitter с помощью одного из пакетов API Python Twitter, в чтобы проверить некоторые идеи, которые у меня есть.
Я был немного небрежен и установил два пакета:
a) python-twitter0.8.2
(http://pypi.python.org/pypi/python-twitter/0.8.2)
b) twitter1.9.1
(http://pypi.python.org/pypi/twitter/1.9.1)
(a) называется python-twitter
в pypi, а (b) называется twitter
, поэтому, как я буду ссылаться на них.
Оба они вызываются import twitter
в интерпретаторе Python, но когда я пишу эту строку, я всегда получаю twitter
один (если я могу понять, как использовать python-twitter
один, я буду иметь возможность продолжить, но все равно будет иметь одну и ту же основную проблему).
Проблема
Поскольку мне не нужен пакет twitter
, я решил удалить его с помощью pip:
$ sudo pip uninstall twitter
который дает результат:
Uninstalling twitter:
Proceed (y/n)? y
Successfully uninstalled twitter
(на самом деле, я пробовал то же самое с python-twitter
и получил аналогичный ответ).
Однако при запуске pip freeze
оба этих пакета отображаются в установленном списке! На самом деле, я все еще могу использовать команду import twitter
в интерпретаторе. Очевидно, что пакеты не были удалены. Мне бы хотелось узнать, как их удалить!
Другая информация:
Я использую Python 2.7 и Ubuntu 12.04
При запуске IDLE вместо интерпретатора оболочки, и я набираю help('modules')
, ни twitter
, ни python-twitter
не отображаются в списке. При вводе help('modules')
в интерпретатор оболочки я получаю ошибку ошибки сегментации и сбой интерпретатора. Здесь ошибка:
>>> help('modules')
Please wait a moment while I gather a list of all available modules...
/usr/lib/python2.7/dist-packages/gobject/constants.py:24: Warning:
g_boxed_type_register_static: assertion `g_type_from_name (name) == 0' failed
import gobject._gobject
/usr/lib/python2.7/dist-packages/gtk-2.0/gtk/__init__.py:40: Warning:
g_boxed_type_register_static: assertion `g_type_from_name (name) == 0' failed
from gtk import _gtk
** (python:2484): CRITICAL **: pyg_register_boxed: assertion `boxed_type != 0' failed
/usr/lib/python2.7/dist-packages/gtk-2.0/gtk/__init__.py:40: Warning: cannot register
existing type `GdkDevice'
from gtk import _gtk
/usr/lib/python2.7/dist-packages/gtk-2.0/gtk/__init__.py:40: Warning: g_type_get_qdata:
assertion `node != NULL' failed
from gtk import _gtk
Segmentation fault (core dumped)
Почему другие вопросы не разрешили это для меня:
Я посмотрел на аналогичный пост в pip freeze lists uninstalled packages и у меня не было таких же проблем.
$ sudo which pip
/usr/bin/pip
$ which pip
/usr/bin/pip
который является тем же самым выходом. Кроме того, $ sudo pip freeze
дает тот же результат, что и $ pip freeze
.
Любая помощь очень ценится!
Ответы
Ответ 1
Вы всегда можете вручную удалить пакеты; вы можете запустить:
sudo rm -rf /usr/local/lib/python2.7/dist-packages/twitter
чтобы удалить этот пакет из каталога dist-packages
. Возможно, вам придется отредактировать файл easy-install.pth
в том же каталоге и удалить из него запись twitter
.
Ответ 2
В то время как решение Martin работает, как работа, он не дает прямого ответа.
Версия Ubuntu для версии Ubuntu (12.04):
python-pip (1.0-1build1)
Это тоже та же версия для Debian Wheezy. В этой версии есть лишняя ошибка, из-за которой пакеты не удаляются.
Если вы получите пип-код вверх по течению с помощью script get-pip.py
, у вас будет фиксированная версия пифа, которая может удалить pacakges (на данный момент v. 1.5.6).
Обновление
Python pip - действительно быстро движущаяся цель. Таким образом, использование Debian или Ubuntu pip гарантированно будет иметь ошибки. Не используйте это распределение pip
.
Вместо этого установите pip из восходящего потока.
Если вы хотите зарегистрировать пакеты с установленными пакетами в качестве системных пакетов, я действительно рекомендую вам также использовать stdeb.
Ответ 3
Мне пришлось столкнуться с трудностями при обновлении пакета, потому что pip не смог успешно его удалить. Мне пришлось удалить .egg-info и папку, а также в /usr/lib/python 2.7/dist-packages, а затем я попытался установить с --upgrade, и это сработало.
Ответ 4
В моем случае (перемещение pyusb от 0.4x до 1.0x), удаление старого пакета с apt-get удаляет python-usb и вручную устанавливает загруженный вручную пакет через python setup.py. Не красиво, но работает.
Ответ 5
Для меня это было связано с тем, что я запускал "замерзание", давая мне разные результаты, чем "sudo pip freeze". Поскольку я удалял использование sudo, это не было uininstalling его в сеансе "non-sudo". Удаление без sudo исправлено.