удалить Python, установленный путем компиляции исходного кода?


18

Я установил Python 2.7.9 на Ubuntu 14.04 путем компиляции его источника , на .configre, makeи make altinstall. make altinstallпотому что я не хочу перезаписывать Python 2.7.6 по умолчанию. Самостоятельно установленный 2.7.9 находится во /usr/local/bin/python2.7многих других файлах в других каталогах /usr/local. Из README в исходном установочном пакете:

В системах Unix и Mac, если вы собираетесь установить несколько версий Python с использованием одного и того же префикса установки (аргумент --prefix для скрипта configure), вы должны позаботиться о том, чтобы ваш основной исполняемый файл python не был перезаписан при установке другой версии.

Все файлы и каталоги, установленные с помощью «make altinstall», содержат главную и вспомогательную версии и, следовательно, могут работать бок о бок. «make install» также создает $ {prefix} / bin / python, который ссылается на $ {prefix} /bin/pythonX.Y.

Если вы намереваетесь установить несколько версий, используя один и тот же префикс, вы должны решить, какая версия (если есть) является вашей "основной" версией. Установите эту версию, используя «make install». Установите все остальные версии, используя «make altinstall».

Например, если вы хотите установить Python 2.5, 2.6 и 3.0 с 2.6 как основной версией, вы должны выполнить «make install» в вашем каталоге сборки 2.6 и «make altinstall» в других.

Теперь я хочу удалить самостоятельно установленную 2.7.9.

  1. К счастью, у меня все еще есть исходный код, но, к сожалению, в Makefile нет раздела удаления

    $ sudo make uninstall
    make: *** No rule to make target `uninstall'.  Stop.
  2. Затем я попробовал другой способ: сначала создайте deb из исходного кода и компиляции, установите deb (возможно, перезаписывая установленные файлы make altinstall), а затем удалите deb.

    Но когда я создаю файл deb с помощью checkinstall, я не уверен, что и как мне следует поступить иначе, чем для make altinstallfor make install. Что я пробовал это:

    $ checkinstall altinstall
    
    ...
    
    Installing with altinstall...
    
    ========================= Installation results ===========================
    /var/tmp/tmp.4ZzIiwqBNL/installscript.sh: 4: /var/tmp/tmp.4ZzIiwqBNL/installscript.sh: altinstall: not found
    
    ...

    Интересно, как я могу создать deb, чтобы установка deb дублировала процесс установки make altinstall?

  3. Или как вы можете удалить мой python 2.7.9?

Примечание: пакет с исходным кодом в первой ссылке также имеет setup.py, install-shкроме того README.


Python не устанавливается во многих местах. Я бы просто удалил файлы вручную.
Фахим Мита

спасибо. тогда это не так много мест?
StackExchange для всех

Посмотрите на один из бинарных пакетов. Это, по сути, те же места, я думаю, за исключением того, что /usr/localиспользуется вместо /usr. dpkg -L python2.7и dpkg -L python2.7-minimal. А для чего тебе нужно 2.7.9?
Фахим Митха

Я слышал, что у него есть пункт по умолчанию. Но после установки я не нахожу в нем пипс.
StackExchange для всех

Вы можете установить pip apt-get install python-pip.
Фахим Митха

Ответы:


20

Следующие команды удаляют ваш make altinstall-ed python:

rm -f /usr/local/bin/python2.7
rm -f /usr/local/bin/pip2.7
rm -f /usr/local/bin/pydoc
rm -rf /usr/local/bin/include/python2.7
rm -f /usr/local/lib/libpython2.7.a
rm -rf /usr/local/lib/python2.7

Вы также можете сделать

rm -f /usr/local/share/man/python2.7.1
rm -rf /usr/local/lib/pkgconfig
rm -f /usr/local/bin/idle
rm -f /usr/local/bin/easy_install-2.7

Хотя make altinstallэто хорошо мне помогло, если «системный питон» имеет номер major.minor, отличный от того, который вы устанавливаете, он не работает так хорошо, если отличается только микро номер (третья позиция). Это число исключено из установленного двоичного файла, и вы получите две версии pythonX.Y. Это всегда было проблемой, но как только дистрибутивы начали поставляться с системными утилитами, основанными на 2.7.X, эта проблема стала более серьезной, поскольку версия 2.7 должна быть последней из серии Python2.

IMO лучший подход для решения этой проблемы - не дать ей стать единым: настройте python для установки в каталог, не используемый никаким другим python. В моей системе они идут под /opt/python/X.Y.Z.

Чтобы использовать любой из установленных там Pythons, вы [virualenv][1]создаете новую среду:

virtualenv --python=/opt/python/2.7.9/bin/python2.7 venv
source venv/bin/activate

или использовать [virtualenvwrapper][2]. У меня есть псевдонимы для последних версий серии, с которой я работаю.

Если вы используете toxдля тестирования несколько версий (вы должны), следующий псевдоним поможет найти другую версию:

alias tox='PATH=/opt/python/2.7.9/bin:/opt/python/2.6.9/bin:/opt/python/3.4.3/bin:/opt/python/3.3.6/bin:/opt/python/3.5-dev/bin:$PATH tox'

(в настоящее время это последние версии, я использую несколько иную настройку, поддерживая ссылки /opt/python/2.7на самые последние /opt/python/2.7.9, а также на другие второстепенные номера в процессе загрузки, сборки и установки новой версии python)

Эти установки никогда не используются напрямую. Они всегда используются в качестве основы virtualenvтолько для окружения, поэтому мне все равно, что они не входят в мой обычный PATH.


2
Не удаляйте /usr/local/lib/python2.7! Все глобальные модули Python, установленные pip, живут в /usr/local/lib/python2.7/dist-packages. Все эти модули сломаются!
abhaga

2
@abhaga Вы не должны устанавливать с pipвнешним сервером ни virtualenvна одной установке Linux
Anthon

Мы также не должны удалять пакеты вручную, удаляя файлы и каталоги. :) Это хорошие практики, и всегда есть случаи, когда нам нужно их нарушать. Но важно знать, что удалять этот каталог небезопасно.
abhaga

В моем CentOS7 есть несколько разных: 1. include должен быть: /usr/local/include/python2.7, без bin; 2. man-файл - /usr/local/share/man/man1/python2.7.1; 3. Другой файл: /usr/local/bin/python2.7-config
Bin S,

7

Начиная со rmсписка @ Anthon и применяя рекомендации @ bin-s для поиска новых файлов, я разработал этот bash-скрипт, чтобы полностью стереть мой Python-3.6.6 (который был установлен из исходников make altinstall):

prefix='/usr/local/'
pyver='3.6'

rm -rf \
    ${prefix}bin/python${pyver} \
    ${prefix}bin/pip${pyver} \
    ${prefix}bin/pydoc \
    ${prefix}bin/include/python${pyver} \
    ${prefix}lib/libpython${pyver}.a \
    ${prefix}lib/python${pyver} \
    ${prefix}bin/python${pyver} \
    ${prefix}bin/pip${pyver} \
    ${prefix}bin/include/python${pyver} \
    ${prefix}lib/libpython${pyver}.a \
    ${prefix}lib/python${pyver} \
    ${prefix}lib/pkgconfig/python-${pyver}.pc \
    ${prefix}lib/libpython${pyver}m.a \
    ${prefix}bin/python${pyver}m \
    ${prefix}bin/2to3-${pyver} \
    ${prefix}bin/python${pyver}m-config \
    ${prefix}bin/idle${pyver} \
    ${prefix}bin/pydoc${pyver} \
    ${prefix}bin/pyvenv-${pyver} \
    ${prefix}share/man/man1/python${pyver}.1 \
    ${prefix}include/python${pyver}m
    ${prefix}bin/pydoc ## WARN: skip if other pythons in local exist.

Используйте его с осторожностью (например, добавьте -Iопцию в rm cmd для проверки каждого уничтожения).


очень хорошо. Теперь python3.X не отображается, когда я набираю python3 и нажимаю вкладку
Прометей

1

Обычно все файлы устанавливаются почти за одну минуту. Вы можете использовать «find» для проверки всех установленных файлов почти одновременно, а затем «rm» вручную. Желаю это полезно.

find /usr/local/ -type f -newer <some latest old file>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.