LINUX.ORG.RU

Не запустится терминал

 ,


0

2

Решил сменить версию python2.7 на python3. Чтобы это сделать в терминале ввожу команду:

sudo ln -sf python3 /usr/bin/python
Команда выполнилась без ошибок. После этого ввожу в терминале python . В командные строке я получаю ошибку:
-bash: /usr/lib/command-not-found: /usr/bin/python3: bad interpreter: Too many levels of symbolic links
После этого шага терминал не открывался (Только работает терминал, который запускается комбинацией клавиш Alt+Ctrl+F1). В чем проблема?

Ну терминал не открывается наверно потому что он на питоне.

Удалите линк да пересоздайте заново.

micronekodesu ★★★
()
Ответ на: комментарий от micronekodesu

То есть я удаляю с помощью

То есть я удаляю линк с помощью:

rm /usr/bin/python3

пересоздайте заново:

ls  -sf /usr/bin/python3  /usr/bin/python2

Верно?

guitarist15
() автор топика
Ответ на: комментарий от micronekodesu

После введения:

ln  -s /usr/bin/python3  /usr/bin/python2
Получаю ошыбку.
Не удалось создать символическую ссылку /usr/bin/python3 : Файл уже существует
После этого ввожу в терминале python . В командные строке я получаю:
-bash: /usr/lib/command-not-found: /usr/bin/python3: bad interpreter: Too many levels of symbolic links

guitarist15
() автор топика

Решил сменить версию python2.7 на python3.

Плохая идея.

aedeph_ ★★
()
Ответ на: комментарий от micronekodesu

Но вообще мне не очень понятно зачем вы это делаете, обязательно что-то сломается (открыл пару софтин под второй питон - там путь к интерпретатору указана просто /usr/bin/python, под третий они даже не запускаются и падают с проверкой синтаксиса).

micronekodesu ★★★
()
Ответ на: комментарий от guitarist15

Не удалось создать символическую ссылку /usr/bin/python3 : Файл уже существует

Ну так логично, файл /usr/bin/python2 у вас уже есть и это линк на второй питон.

micronekodesu ★★★
()
Ответ на: комментарий от micronekodesu

Я запутался. Я сделав ссылку, так как вы сказали.

ln  -s /usr/bin/python3  /usr/bin/python2
Это не помогло. Я делаю что-то не так?

guitarist15
() автор топика
Ответ на: комментарий от micronekodesu

Такс.

ln -s /usr/bin/python3 /usr/bin/python
Не помогло, потому что:
 /usr/bin ls -a |grep python
python
python2.7
python2.7m
python2
python3
python3.5
python3.5m

guitarist15
() автор топика

Читай man ln. Сначала target потом link.

anonymous
()
Ответ на: комментарий от micronekodesu

ага, вот только... ))) у него в папке /usr/bin файл python3 является символической ссылкой на /usr/bin/python3 ))))))))))))))))))))))) как лихо закручен сюжет ;)

shashilx ★★
()
Ответ на: комментарий от micronekodesu

Ну, у вас python сейчас яляется линком для python3, то есть вы добились того чего хотели.

Ввожу в терминале python . В командные строке я получаю:

-bash: /usr/lib/command-not-found: /usr/bin/python3: bad interpreter: Too many levels of symbolic links

guitarist15
() автор топика
Ответ на: комментарий от shashilx

С каждой минутой понимание ситуации уменьшается в геометрической прогрессии. Может кто-то объяснить, почему пайтон не дает запустить терминал?

guitarist15
() автор топика
Ответ на: комментарий от micronekodesu

Да !!!!!!!! Заработало. Спасибо.

Оффтоп

Я хочу разобраться детально в своей проблеме. Что я сделал не так, почему терминал не работал.

guitarist15
() автор топика
Ответ на: комментарий от guitarist15

Потому у вас «python» ссылался на «python3», который ссылался сам на себя. Что изначально вас побудило с этими симлинками заморочиться не знаю, да и советую откатить все как было.

micronekodesu ★★★
()
Ответ на: комментарий от micronekodesu

Он грохнул python2, откатить может быть весьма не просто.

aedeph_ ★★
()

С /usr/bin/python3 -> /usr/bin/python3 разобрались.

Осталась серьезная проблема с тем, что вы полностью сломали python2. /usr/bin/python2 должен указывать на python2.7. А у вас теперь все слинковано на python3. Единственный логичный вариант сейчас - переустановить python2.7.

Какой дистрибьютив у вас?

Deleted
()
Ответ на: комментарий от Deleted

Hаверное стоит пояснить, что python3 не заменяет собой python2. Его нельзя назвать просто более свежей версией python. Это, грубо говоря, следующее поколение развития. Обе версии вполне уживаются на одной машине и должны быть вместе.

И далеко не каждая программа, написанная для python2, запустится на третьей версии.

Deleted
()
Ответ на: комментарий от Deleted

Какой дистрибьютив у вас?

 Mint 18.3 + xfce

Единственный логичный вариант сейчас - переустановить python2.7.

Переустановка осуществляется с помощью:

sudo apt-get install python2.7
Или
sudo apt-get  update python2.7
Хочу разобраться с несколькими моментами:

  • Для чего нам нужен линк в линуксе?
  • Почему почти во всех версиях линукса стоит python2.7?
guitarist15
() автор топика
Ответ на: комментарий от guitarist15

apt install --reinstall

Для чего нам нужен линк в линуксе?

Чтобы иметь гибкость.

Почему почти во всех версиях линукса стоит python2.7?

Потому что множество скриптов, в том числе и системных, используют именно его и не совместимы с python3.

aedeph_ ★★
()
Ответ на: комментарий от aedeph_

Я использовал:

sudo apt install --reinstall python2.7

Эта команда удаляет все пакеты, после этого она снова устанавливает программу?

Как узнать, все ли работает правильно?

guitarist15
() автор топика
Ответ на: комментарий от guitarist15

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

Как узнать, все ли работает правильно?

Повходить в интерактивные оболочки через симлинки python, python2 и python3, позапускать скрипты, ребутнуть.

aedeph_ ★★
()
Ответ на: комментарий от aedeph_

Понял. К сожалению из-за ошибки я не могу установить pip Вот пример ошибки:

Подготовка к распаковки.../python-samba_2%3a4.3.11+dfsg-0ubuntu0.16.04.12_amd64.deb ...
  File "/usr/bin/pyclean", line 63
    except (IOError, OSError), e:
                             ^
SyntaxError: invalid syntax
dpkg: предупреждение: подпроцесс старый pre-removal сценарий вернул статус ошибку 1
dpkg: попытка использовать сценарий из нового пакета …
  File "/usr/bin/pyclean", line 63
    except (IOError, OSError), e:
                             ^
SyntaxError: invalid syntax
dpkg: ошибка обработки архива /var/cache/apt/archives/python-samba_2%3a4.3.11+dfsg-0ubuntu0.16.04.12_amd64.deb (--unpack):
 подпроцесс новый  pre-removal сценарий вернул статус ошибку 
Traceback (most recent call last):
  File "/usr/bin/pycompile", line 35, in <module>
    from debpython.version import SUPPORTED, debsorted, vrepr, \
  File "/usr/share/python/debpython/version.py", line 24, in <module>
    from ConfigParser import SafeConfigParser
ImportError: No module named 'ConfigParser'
dpkg: предупреждение: подпроцесс старый pre-removal сценарий вернул статус ошибку 1
При обработке таких пакетов произошли ошибки:
 /var/cache/apt/archives/python-samba_2%3a4.3.11+dfsg-0ubuntu0.16.04.12_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

guitarist15
() автор топика
Ответ на: комментарий от guitarist15

Нет, не верно. Вам уже дали как запустить apt-get для установки второго питона выше по треду. Вообще видно вы не представляете что и зачем вы делаете, так что не думаю что вам стоит экспериментировать (это не издевка или упрек, просто действительно вы тут дров на два дня наломали без понимания того что делаете, мне кажется пользы от этого никакой).

micronekodesu ★★★
()
Ответ на: комментарий от micronekodesu

Нет, не верно. Вам уже дали как запустить apt-get для установки второго питона выше по треду. Вообще видно вы не представляете что и зачем вы делаете, так что не думаю что вам стоит экспериментировать

Да, вы правы. Я плохо понимаю, почему у меня возникли проблемы, но я хочу разобраться.

Сначала я хочу детально понять что не так сделал (на пальцах объясните пожалуйста).

guitarist15
() автор топика

Предлагаю такое решение: удалить все пайтоны, которые есть в системе. Вычистить все симлинки которые вы насоздавали. Поставить всё заново. Решить для себя абсолютно чётко, какую задачу вы решаете и действительно ли вам нужно менять python 2.7 на python 3 да ещё и таким извращённым способом. Если да, то выполнить команду, которую вам приводили выше (которая сработала). Именно в таком порядке.

Pyzia ★★★★★
()
Ответ на: комментарий от guitarist15

Вы заменили второй питон третьим. Они в целом похожи, да, но воспринимайте их как два разных языка. Приложения, написанные под python2, не заработают в тройке, и наоборот (да, можно писать так чтоб работало и там, и та, но никто обычно этим не занимается, да и в любом случае у вас разные модули для разных веток питона будут стоять, так что просто так переключиться не получится). Плюс к тому что так делать не следует, вы еще и напортачили с симлинками (считайте что это как ярлыки в windows), удалив в итоге бинарник (то есть само запускаемое приложение) python2. Таким образом у вас поломается весь (ну ок, большинство) софта, которое написано под python2, и в этот же список попадает куча системных утилит, терминал и так далее.

Вам сейчас нужно восстановить python2 (переустановив его, потому что бинарника у вас уже нет, вам нечего запускать).

Далее если расскажете зачем изначально все это затевалось вам могут подсказать как сделать правильно.

micronekodesu ★★★
()
Ответ на: комментарий от guitarist15

Сначала разберитесь с тем адом, что вы устроили у себя в системе. Пока у вас такой бардак - ни pip, ни системные python-приложения, ни ваши скрипты не будут гарантировано работать.

Хорошо, что apt написан на сях, а не python - получили бы сейчас мертвую систему вообще.

Deleted
()
Ответ на: комментарий от micronekodesu

А в генте подобный прикол вообще разруливать весело и очень увлекательно :)

Deleted
()
Ответ на: комментарий от micronekodesu

Вы заменили второй питон третьим. Они в целом похожи, да, но воспринимайте их как два разных языка. Приложения, написанные под python2, не заработают в тройке, и наоборот

То есть с помощью команды

ln -s /usr/bin/python3 /usr/bin/python2
Я создаю в директории /usr/bin/python2 линк на директорию /usr/bin/python3. Пусть у меня есть программы, или пакеты, которые зависят от python2 и используют директорию /usr/bin/python2. После создания ссылки в данной директории все программами переходят в /usr/bin/python3. В результате они не запускаются, потому что не могут использоватьpython3 (наверное, это основная причина, почему терминал будет запускался) . Верно? Я теперь понял, какую кашу на варил:

  • Я создал много линков;
  • Удалив в итоге бинарник python;
  • Сделал нерабочими много пакетов;

Далее если расскажете зачем изначально все это затевалось вам могут подсказать как сделать правильно.

Я несколько лет использую пайтон 3. Я к нему привык :)

guitarist15
() автор топика
Ответ на: комментарий от guitarist15

Я попробую удалить все линки, которые я создал в /usr/bin/python2, /usr/bin/python3. После этого удалю python3 и переустановлю python2. Это поможет?

guitarist15
() автор топика
Ответ на: комментарий от guitarist15

/usr/bin/python2 и /usr/bin/python3 это бинарники, то есть скомпилированный код, который можно запустить, не директории.

В результате они не запускаются, потому что не могут использоватьpython3 (наверное, это основная причина, почему терминал будет запускался)

Да, так.

Я несколько лет использую пайтон 3. Я к нему привык :)

Вы можете сделать правки только для своего пользователя чтоб при вызове «python» запускался именно python3. Системное ПО и софт других пользователей будет смотреть как и раньше на /usr/bin/python (симлинк на /usr/bin/python2) и не поломается. Но мне кажется что один символ «3» в имени исполняемой программы не стоит этого, да и опять же делиться своими скриптами вы тогда не сможете без правок.

micronekodesu ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.