Сообщения об ошибках в терминале. (Сообщения об ошибках с командами в терминале...)

Kubuntu, Xubuntu и другие

Модератор: Модераторы разделов

vlad001
Сообщения: 29

Сообщения об ошибках в терминале.

Сообщение vlad001 » 01.06.2019 12:31

Приветствую! Я обновил python3 из штатной "репы" ubuntu. Сейчас питон версии 3.7.1. Всё хорошо, но после этого я вижу сообщения в терминале, например, просто ввожу "asd", должно быть сообщение что-то вроде "не такой команды" и всё, а я получаю вот это:

Код: Выделить всё

root@home-router:/# asd
Traceback (most recent call last):
  File "/usr/lib/command-not-found", line 28, in <module>
    from CommandNotFound import CommandNotFound
  File "/usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py", line 19, in <module>
    from CommandNotFound.db.db import SqliteDatabase
  File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 5, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
    from apport.fileutils import likely_packaged, get_recent_crashes
  File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
    from apport.report import Report
  File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
    import apport.fileutils
  File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
    from apport.packaging_impl import impl as packaging
  File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 24, in <module>
    import apt
  File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'

Original exception was:
Traceback (most recent call last):
  File "/usr/lib/command-not-found", line 28, in <module>
    from CommandNotFound import CommandNotFound
  File "/usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py", line 19, in <module>
    from CommandNotFound.db.db import SqliteDatabase
  File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 5, in <module>
    import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
Если через "update-alternatives" изменить на 3.6 то всё нормально. На пробу я для не root пользователя в файле ".bashrc" добавил строку alias python3='/usr/bin/python3.6', теперь для этого пользователя выводит python3 -V "Python 3.6.7". Какую теперь "программы на питоне", будут использовать версию? В итоге нужно чтоб для консольных команд от root был Python 3.6.7, а для самих "программ на питоне" 3.7.1.
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4839
ОС: Gentoo

Re: Сообщения об ошибках в терминале.

Сообщение /dev/random » 02.06.2019 05:30

vlad001 писал(а):
01.06.2019 12:31
должно быть сообщение что-то вроде "не такой команды" и всё, а я получаю вот это
bash позволяет перехватывать событие "команда не найдена" и запускать какую-нибудь команду в качестве обработчика (например, предлагающую исправить опечатку), и ubuntu такой обработчик устанавливает. Именно в нём и происходит эта ошибка.
vlad001 писал(а):
01.06.2019 12:31
На пробу я для не root пользователя в файле ".bashrc" добавил строку alias python3='/usr/bin/python3.6', теперь для этого пользователя выводит python3 -V "Python 3.6.7". Какую теперь "программы на питоне", будут использовать версию?
Псевдонимы просто заменяют слово, введённое пользователем в начале командной строки. Если вы начнёте команду со слова "python3", оно будет автоматически заменено на "/usr/bin/python3.6". Всё остальное останется неизменным.
vlad001 писал(а):
01.06.2019 12:31
В итоге нужно чтоб для консольных команд от root был Python 3.6.7, а для самих "программ на питоне" 3.7.1.
Консольные команды, для которых нужен питон, - это тоже программы на питоне. Откройте какую-нибудь (например, /usr/bin/lsb_release) в текстовом редакторе и посмотрите. Если же вы не включаете их в своё определение "программ на питоне", то дайте это определение.
Спасибо сказали:

vlad001
Сообщения: 29

Re: Сообщения об ошибках в терминале.

Сообщение vlad001 » 06.06.2019 22:06

/dev/random писал:
02.06.2019 05:30
Если же вы не включаете их в своё определение "программ на питоне", то дайте это определение.
Нужно например чтобы "штатные команды" ОС и пакетного менеджера использовали правильную (в моём случае 3.6.7) версию питона (я вообще не знал этого, пока не увидел подобные ошибки после обновления питона). А например, начинающиеся с program_name.py использовали новую версию. Я не знаю как это точно объяснить. В консоли не должно быть описанных выше ошибок.
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4839
ОС: Gentoo

Re: Сообщения об ошибках в терминале.

Сообщение /dev/random » 07.06.2019 10:32

vlad001 писал(а):
06.06.2019 22:06
А например, начинающиеся с program_name.py использовали новую версию.
Как вы их запускаете? python program_name.py? ./program_name.py? Как-то ещё? Если явно указываете слово python, то можете вместо этого указывать конкретную (новую) версию - вручную или через псевдоним. Если запускаете как исполняемый файл, то пропишите новую версию питона в шебанге. А в качестве выбранной через альтернативы версии оставьте старую.
Спасибо сказали:

vlad001
Сообщения: 29

Re: Сообщения об ошибках в терминале.

Сообщение vlad001 » 08.06.2019 10:44

Запуск пользовательской программы идёт через systemd. Версию система сама определяет, до обновления для python3 это было 3.6.7, после 3.7.1. Система по умолчанию использует наивысшую.

Код: Выделить всё

...
[Service]
Type=idle
WorkingDirectory=/opt/ProxHTTPSProxyMII/
ExecStart=/usr/bin/python3 /opt/ProxHTTPSProxyMII/ProxHTTPSProxy.py
StandardOutput=file:/var/log/proxhttpsproxy/proxhttpsproxy.log
StandardError=file:/var/log/proxhttpsproxy/proxhttpsproxy.log
...
Сейчас на команду python3 -V, ответ Python 3.7.1
На сервере установлен webmin, там есть "терминал", вот в его терминале при вводе

Shell

[root@home-router ~]# asd
sh: 1: asd: not found
При подключении через ssh (putty)

Shell

root@home-router:~# asd
Traceback (most recent call last):
File "/usr/lib/command-not-found", line 28, in <module>
from CommandNotFound import CommandNotFound
File "/usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py", line 19, in <module>
from CommandNotFound.db.db import SqliteDatabase
File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 5, in <module>
import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
Error in sys.excepthook:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 63, in apport_excepthook
from apport.fileutils import likely_packaged, get_recent_crashes
File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module>
from apport.report import Report
File "/usr/lib/python3/dist-packages/apport/report.py", line 30, in <module>
import apport.fileutils
File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 23, in <module>
from apport.packaging_impl import impl as packaging
File "/usr/lib/python3/dist-packages/apport/packaging_impl.py", line 24, in <module>
import apt
File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'

Original exception was:
Traceback (most recent call last):
File "/usr/lib/command-not-found", line 28, in <module>
from CommandNotFound import CommandNotFound
File "/usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py", line 19, in <module>
from CommandNotFound.db.db import SqliteDatabase
File "/usr/lib/python3/dist-packages/CommandNotFound/db/db.py", line 5, in <module>
import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
Почему так? Если в вебминовском терминале всё нормально, то и этот можно настроить?
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4839
ОС: Gentoo

Re: Сообщения об ошибках в терминале.

Сообщение /dev/random » 08.06.2019 11:14

vlad001 писал(а):
08.06.2019 10:44
sh: 1: asd: not found
Как видно из первого слова строки, в этом месте вы используете не bash, а sh, в качестве которого у вас, скорее всего, используется dash. Он не поддерживает пользовательские обработчики события "команда не найдена". Разумеется, с другими программами, требующими старую версию питона, это не поможет.
Спасибо сказали:

vlad001
Сообщения: 29

Re: Сообщения об ошибках в терминале.

Сообщение vlad001 » 08.06.2019 11:38

Ну и как решить проблему? Ни то ни другое (консоли разных терминалов) я не настраивал, всё пока ещё по умолчанию.
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4839
ОС: Gentoo

Re: Сообщения об ошибках в терминале.

Сообщение /dev/random » 08.06.2019 11:43

vlad001 писал(а):
08.06.2019 11:38
Ну и как решить проблему?
vlad001 писал(а):
01.06.2019 12:31
Если через "update-alternatives" изменить на 3.6 то всё нормально.
Ну вот и измените на 3.6. А ту единственную программу, которой нужен 3.7, запускайте с явным указанием версии (отредактируйте сервис-файл).
Спасибо сказали:

vlad001
Сообщения: 29

Re: Сообщения об ошибках в терминале.

Сообщение vlad001 » 08.06.2019 12:56

Почему в одной консоли используется что-то связанное с питон, а в другой нет? Вообще, нужен ли он там?
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4839
ОС: Gentoo

Re: Сообщения об ошибках в терминале.

Сообщение /dev/random » 08.06.2019 13:17

vlad001 писал(а):
08.06.2019 12:56
Почему в одной консоли используется что-то связанное с питон, а в другой нет?
Я вам уже ответил на этот вопрос. В bash поддерживается возможность запуска выбранной пользователем, администратором или разработчиком дистрибутива команды вместо вывода сообщения "команда не найдена". В ubuntu такая команда устанавливается по умолчанию (насколько я помню, то ли /usr/bin/command-not-found, то ли /usr/lib/command-not-found), и она у них написана на питоне. В dash, который у вас используется в другой консоли, такой возможности нет.
vlad001 писал(а):
08.06.2019 12:56
Вообще, нужен ли он там?
Если очень хочется, можете удалить пакет command-not-found, выводящий подсказки при вводе отсутствующей команды. Но это решит только самую бросающуюся в глаза проблему. command-not-found - далеко не единственная консольная команда, написанная на питоне, и каким-нибудь другим тоже может понадобиться именно та версия питона, которая идёт в дистрибутиве по умолчанию. В результате они тоже перестанут работать, но заметите вы это не сразу. Да и к графическим программам это тоже относится, среди них тоже есть написанные на питоне, и они тоже могут перестать запускаться. Оставьте в качестве выбранной по умолчанию именно ту версию питона, которая изначально шла с дистрибутивом.
Спасибо сказали:

Аватара пользователя
s.xbatob
Сообщения: 748
ОС: RfRemix

Re: Сообщения об ошибках в терминале.

Сообщение s.xbatob » 08.06.2019 13:39

vlad001, ваше упрямство начинает утомлять!

Собственно, сама ошибка вот:
vlad001 писал(а):
08.06.2019 10:44
ModuleNotFoundError: No module named 'apt_pkg'
Почему она возникает? Потому что разные версии python ищут модули в разных местах. В данном случае я могу посмотреть только на debian9, и там этот модуль в файле /usr/lib/python3/dist-packages/apt_pkg.cpython-35m-x86_64-linux-gnu.so (а версия python там 3.5) Соответственно надо либо установить нужный пакет для новой версии python, либо писать bug report. Но прежде всего задайтесь вопросом а зачем вам версия 3.7? Она же не даёт ничего нового!

В любом случее вы пытаетесь устранить не причину, а последствия. Ничем хорошим это не кончится.
Спасибо сказали:

vlad001
Сообщения: 29

Re: Сообщения об ошибках в терминале.

Сообщение vlad001 » 12.06.2019 21:20

/dev/random
Спасибо за более развёрнутое объяснение, в поисковиках всё вместе связанное я не зашёл, либо что-то про питон, либо про консоль.

Ещё вопрос, если я запускаю питон-программу как service файл systemd, то запуск идёт от пользователя root (если другой не указан). Если для пользователя root я что-то меняю в его профиле, переменные окружения например, то тот service файл при запуске подхватит уже новые значения?
s.xbatob писал:
08.06.2019 13:39
ваше упрямство начинает утомлять!
Почему сразу упрямство? Я ведь могу поинтересоваться, почему делать так, а не эдак?
s.xbatob писал:
08.06.2019 13:39
Но прежде всего задайтесь вопросом а зачем вам версия 3.7? Она же не даёт ничего нового!
Вы же не знаете для чего мне это нужно, зато почти выводы сделали за меня. Вот например https://docs.python.org/3/library/ssl.html#ssl-tlsv1-3

PS Просто спросил в чём разница, почему одна консоль такая, а другая - другая, можно ли в другой сделать как в первой. Жаль что инфу приходится так вытягивать, лишний раз из-за этого вопрос не охота задавать, потому что кого-то он обязательно разгневает и как правило начинают посылать... в поисковик. Так и будешь всю жизнь новичком... Зачем эти форумы, если сразу "посылают"?
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15522
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Сообщения об ошибках в терминале.

Сообщение Bizdelnick » 12.06.2019 21:48

vlad001 писал(а):
12.06.2019 21:20
Ещё вопрос, если я запускаю питон-программу как service файл systemd, то запуск идёт от пользователя root (если другой не указан). Если для пользователя root я что-то меняю в его профиле, переменные окружения например, то тот service файл при запуске подхватит уже новые значения?
Нет. Профиль подгружается только при запуске интерактивной оболочки, а в случае сервиса systemd оболочка вообще не запускается. Прописывайте нужный интепретатор или в service-файле, или в shebang исполняемого файла.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

vlad001
Сообщения: 29

Re: Сообщения об ошибках в терминале.

Сообщение vlad001 » 16.06.2019 12:43

Тогда ещё вопрос, команда "update-alternatives" влияет так же на service файл, верно? Если в ответ на эту команду я оставлю "авто", а в профиле пользователя (в файле .bashrc) root пропишу "alias python3='/usr/bin/python3.6'", то root будет запускать python 3.6 версии, а service файл в соответствии с настройкой "update-alternatives"?
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4839
ОС: Gentoo

Re: Сообщения об ошибках в терминале.

Сообщение /dev/random » 16.06.2019 12:54

vlad001 писал(а):
16.06.2019 12:43
Тогда ещё вопрос, команда "update-alternatives" влияет так же на service файл, верно? Если в ответ на эту команду я оставлю "авто", а в профиле пользователя (в файле .bashrc) root пропишу "alias python3='/usr/bin/python3.6'", то root будет запускать python 3.6 версии, а service файл в соответствии с настройкой "update-alternatives"?
alias python3=... влияет на смысл слова python3, введённого в начале командной строки, в терминале, пользователем. update-alternatives влияет на всё остальное. Если вы сделаете так, как написали, то все ваши проблемы останутся. Все дистрибутивные программы на питоне (и графические, и консольные) будут пытаться использовать python3.7, и большинство будет вываливаться с ошибкой. В update-alternatives должна быть выбрана та версия, которая шла с дистрибутивом.
Спасибо сказали: