видалити встановлений 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, використовуючи один і той же префікс встановлення (- аргумент префікса до сценарію налаштування), ви повинні подбати про те, щоб ваш основний виконуваний файл 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. Потім я спробував інший спосіб: спершу створити деб із джерела та компіляції, встановити деб (сподіваємось, що перезаписані встановлені файли з make altinstall), а потім видалити деб.

    Але коли я створюю файл deb checkinstall, я не впевнений, чи потрібно інакше робити make altinstallдля 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. Або яким є ваш спосіб видалення мого пітона 2.7.9?

Примітка: вихідний пакет у першому посиланні також має setup.py, install-shкрім цього README.


Python не встановлюється у багатьох місцях. Я б просто видалити файли вручну.
Faheem Mitha

дякую.що тоді не так багато місць?
StackExchange для всіх

Погляньте на один із двійкових пакетів. Я думаю, що /usr/localце фактично ті самі місця, за винятком того, що використовується замість цього /usr. dpkg -L python2.7і dpkg -L python2.7-minimal. А для чого вам потрібно 2.7.9?
Faheem Mitha

Я чув, що за замовчуванням у нього є pip. Але після встановлення я не знаходжу, що в ньому є pip.
StackExchange для всіх

Ви можете встановити pip apt-get install python-pip.
Faheem Mitha

Відповіді:


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мені добре служило, якщо "системний пітон" має інший номер main.minor від встановленого, він не працює так добре, якщо відрізняється лише мікро-число (третя позиція). Це число виключається з встановленого двійкового файла, і ви закінчуєте двома версіями pythonX.Y. Це завжди було проблемою, але як тільки розповсюдження розпочалося з системними утилітами на базі 2.7.X, ця проблема виявилася більш серйозною, оскільки 2.7, мабуть, є останньою з серії Python2.

Найкращим підходом до вирішення цієї проблеми є ІМО - запобігти її перетворенню: налаштувати python для встановлення в каталозі, який не використовується жодним іншим python. У моїй системі вони підпадають під /opt/python/X.Y.Z.

Щоб використовувати будь-який з встановлених там пітонів, ви використовуєте [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лише для навколишнього середовища, отже мені байдуже, що вони не в моїй звичайній ПАРТІ.


2
Не видаляйте /usr/local/lib/python2.7! Всі глобальні модулі python, встановлені pip, живуть у /usr/local/lib/python2.7/dist-packages. Усі ці модулі зламаються!
абхага

2
@abhaga Не слід встановлювати з pipзовнішньої сторони virtualenvна будь-який установці Linux
Ентон

Ми також не повинні видаляти пакунки, видаляючи файли та каталоги вручну. :) Це хороші практики, і завжди є випадки, коли нам потрібно їх порушувати. Але важливо знати, що видаляти цей каталог не безпечно.
абгага

У моєму CentOS7 є кілька різних: 1. включати має бути: /usr/local/include/python2.7, без біна; 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 і натискаю вкладку
Prometheus

1

Зазвичай всі файли встановлюються майже за одну хвилину. Ви можете використовувати "find" для перевірки всіх встановлених файлів майже в один і той же час, а потім "rm" їх вручну. Побажайте корисного.

find /usr/local/ -type f -newer <some latest old file>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.