- Переход на Python 3 в Debian и Kali Linux
- Python 2 в Debian и производных дистрибутивах
- Сохранение обратной совместимости в Kali с Python 2
- Часто задаваемые вопросы по переходу на Python 3
- Связанные статьи:
- /usr/bin/python3: плохой интерпретатор:
- Ответы (1 шт):
- Проблемы после установки Python на Linux?
- Русские Блоги
- Ошибка Centos7 при запуске скрипта Python / usr / bin / python3 ^ M: плохой интерпретатор: нет такого файла или каталога
- Решение:
- Приложите два распространенных шага программного обеспечения в формате Unix:
Переход на Python 3 в Debian и Kali Linux
Python 2 в Debian и производных дистрибутивах
Kali Linux полностью перешла на Python 3. Это означает, что любой инструмент, присутствующий в репозиториях Kali, который использовал Python 2, был либо удалён, либо конвертирован для использования в Python 3. Во всех этих инструментах в качестве шебанга указан /usr/bin/python3.
Что касается пакетов, которые поступают прямо из Debian, они сделали то же самое для большинства пакетов, но есть несколько исключений, когда пакетам разрешено продолжать полагаться на Python 2. Однако эти пакеты были обновлены, поэтому все эти скрипты используют /usr/bin/python2 в качестве их шебанга, то есть в них использование python2 указано явно (вместо прежнего python).
Благодаря этим изменениям Debian больше не нужно предоставлять /usr/bin/python, а недавние обновления эффективно избавятся от этой символической ссылки.
К сожалению, когда вы загружаете скрипт Python в Интернет, он, скорее всего, будет иметь /usr/bin/python в качестве его шебанга. Если вы попытаетесь выполнить его, не исправляя строку shebang, вы получите ошибку, подобную этой:
zsh: /home/kali/test.py: bad interpreter: /usr/bin/python: no such file or directory
То есть плохой интерпретатор /usr/bin/python, нет такого файла или каталога.
В Debian вы можете восстановить символическую ссылку /usr/bin/python, установив один из пакетов:
- python-is-python2, если вы хотите, чтобы он указывал на python2
- python-is-python3, если вы хотите, чтобы он указывал на python3
Сохранение обратной совместимости в Kali с Python 2
Учитывая большое количество пользователей, которые не знали, как избежать вышеуказанной ошибки, было решено, что Kali будет продолжать поставлять Python 2 по умолчанию (пока Debian всё ещё предоставляет его) и что /usr/bin/python будет указывать на него. Также сохранено несколько общих внешних модулей (например, requests), чтобы скрипты эксплойтов имели разумные шансы на успешное выполнение.
Однако pip для Python2 (он же python-pip) больше не используется, /usr/bin/pip совпадает с /usr/bin/pip3, и он установит модули для Python 3. Для получения дополнительной информации смотрите вопросы и ответы ниже.
Эта совместимость была реализована за счёт того, что kali-linux-headless рекомендовал python2, python-is-python2 и offsec-awae-python2, так что они устанавливаются по умолчанию и могут быть удалены пользователями, которые хотели бы избавиться от них.
Чтобы пользователи знали об этой ситуации, при входе в систему выводится сообщение:
┏━(Message from Kali developers) ┃ ┃ We have kept /usr/bin/python pointing to Python 2 for backwards ┃ compatibility. Learn how to change this and avoid this message: ┃ ⇒ https://www.kali.org/docs/general-use/python3-transition/ ┃ ┗━(Run “touch ~/.hushlogin” to hide this message)
В этом сообщении дана ссылка на страницу, перевод которой вы сейчас читаете. Ниже будет показано, что нужно сделать, чтобы это сообщение не выводилось.
Часто задаваемые вопросы по переходу на Python 3
В: Я загрузил скрипт Python, что мне делать?
О: Вам нужно осмотреть его шебанг. Строка shebang — это первая строка скрипта, которая начинается с символов #! за которыми следует путь к интерпретатору, который будет использоваться для выполнения скрипта.
Если интерпретатором является /usr/bin/python, вам следует прочитать документацию, чтобы узнать, может ли скрипт работать с Python 3. Если да, то вам следует обновить строку shebang, чтобы она указывала на /usr/bin/python3. В противном случае вам следует обновить его, чтобы она указывал на /usr/bin/python2.
Хорошие строки shebang, которые можно оставить как есть:
Плохие строки shebang, которые необходимо обновить:
В: Как я могу избавиться от сообщения о Python 2 которое показывается при входе в систему?
О: Сообщение будет отображаться только до тех пор, пока /usr/bin/python указывает на устаревший Python 2. Теперь, когда вы знаете об этой ситуации и знаете, как исправить строку shebang в старых скриптах, вы можете безопасно избавиться от /usr/bin/python:
sudo apt remove python-is-python2
Или вы можете указать на Python 3:
sudo apt install python-is-python3
Любое из этих действий избавит от приведённого выше сообщения.
В качестве альтернативы, если вы хотите, чтобы /usr/bin/python указывал на python2, и вы всё равно хотите отключить это сообщение, вы можете сделать это:
mkdir -p ~/.local/share/kali-motd touch ~/.local/share/kali-motd/disable-old-python-warning
В: У меня есть скрипт Python 2, который не запускается, что мне делать?
О: Если ваш скрипт Python 2 использует модули, которых нет среди тех, которые поставляются в пакете совместимости offsec-awae-python2 (смотрите список здесь), то вы можете попробовать pyenv для установки полностью изолированной среды Python 2, где вы можете использовать pip для установки дополнительных модулей. Смотрите следующий раздел «Использование версий EoL Python в Kali».
В: Я хочу pip для Python 2, как я могу его вернуть?
В: Я написал скрипт на Python, что мне делать?
О: Будьте вежливы с конечными пользователями:
- чётко задокументируйте, работает ли ваш код с Python 3 или Python 2
- используйте /usr/bin/python3 или /usr/bin/python2 в качестве строки shebang, она более выразительна, чем /usr/bin/python, и с большей вероятностью даст желаемый результат
- обновите его для совместимости с Python 3, если это ещё не так
Связанные статьи:
/usr/bin/python3: плохой интерпретатор:
Не могу запустить python3. Получаю следующее сообщение:
bash: /usr/bin/python3.4: Нет такого файла или каталога
Пробовал переустановить через:
$ sudo apt-get install python3
но терминал говорит, что установлена самая последняя версия.
в папке /usr/bin файлы python34 и python3.4 выделены красным цветом.
UPDATE. После попытки переустановить через sudo apt-get install —reinstall python3 появляется следующая ошибка:
UPDATE2. Попытка sudo apt-get install —reinstall python3-minimal привела к следующему:
E: Internal Error, No file name for python3-minimal:amd64
Попытка debsums -s тоже привела к неудаче:
bash: /usr/lib/command-not-found: /usr/bin/python3: плохой интерпретатор: Слишком много уровней символьных ссылок
Ответы (1 шт):
Пробовал переустановить через: sudo apt-get install python3 но терминал говорит, что установлена самая последняя версия
для переустановки уже установленного(ых) пакета(ов) добавьте опцию —reinstall :
$ sudo apt-get install --reinstall название(я)-пакета(ов)
дополнение. судя по приложенной картинке, при удалении пакета postrm-скрипт не может найти программу py3clean, а при установке пакета postinst-скрипт не может найти программу py3compile.
скорее всего, это файлы из пакета python3-minimal версии 3.4.0 или выше.
т.е., у вас либо удалён этот пакет, либо эти файлы, принадлежащие пакету. попробуйте переустановить данный пакет (python3-minimal), и лишь после удачного завершения процедуры вновь повторите попытку переустановить пакет python3.
возможно, у вас удалены файлы не только этого пакета. для поиска таких файлов рекомендую установить пакет debsums и выполнить:
эта программа проверит контрольные суммы файлов пакетов и отрапортует об изменённых/удалённых файлах.
Проблемы после установки Python на Linux?
Всем привет. Начинающий линуксоид. Система Xubuntu 16.04 LTS. Решил поставить последнюю версию Python. Проверил имеющиеся версии:
~$ python —version результат: Python 2.7.12
~$ python3 —version результат: Python 3.5.2
which python результат: /usr/bin/python
which python3 результат: /usr/bin/python3
~$ sudo add-apt-repository ppa:jonathonf/python-3.6
/usr/bin/python /usr/bin/python2 /usr/bin/python2.7 /usr/bin/python3 /usr/bin/python3.5 /usr/bin/python3.5m /usr/bin/python3.6 /usr/bin/python3.6m /usr/bin/python3m
~$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
update-alternatives: используется /usr/bin/python2.7 для предоставления /usr/bin/python (python) в автоматическом режиме
~$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 2
update-alternatives: используется /usr/bin/python3.5 для предоставления /usr/bin/python3 (python3) в автоматическом режиме
~$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 3
update-alternatives: используется /usr/bin/python3.6 для предоставления /usr/bin/python3 (python3) в автоматическом режиме
~$ update-alternatives —config python
результат: Есть только одна альтернатива в группе ссылок python (предоставляющая /usr/bin/python): /usr/bin/python2.7
Настраивать нечего.
~$ update-alternatives —config python3
результат:
Есть 2 варианта для альтернативы python3 (предоставляет /usr/bin/python3).
Выбор Путь Приор Состояние
————————————————————
* 0 /usr/bin/python3.6 3 автоматический режим
1 /usr/bin/python3.5 2 ручной режим
2 /usr/bin/python3.6 3 ручной режим
Press to keep the current choice[*], or type selection number: 0
После всех этих шаманств, начались чудеса 🙂
~$ python —version
получаю: bash: /usr/lib/command-not-found: /usr/bin/python3: плохой интерпретатор: Нет такого файла или каталога
~$ python2 —version возвращает: Python 2.7.12
~$ python3 —version возвращает: bash: /usr/lib/command-not-found: /usr/bin/python3: плохой интерпретатор: Нет такого файла или каталога
~$ python3.5 —version возвращает: Python 3.5.2
~$ python3.6 —version возвращает: Python 3.6.3
перестал запускаться gnome-terminal назначенный на Alt+T, возвращает: не удалось выполнить процесс-потомок «/usr/bin/gnome-terminal» (нет такого файла или каталога), но при этом запускается gnome-terminal.real
при запуске графического окна «Обновление приложений», выдает ошибку: не удалось выполнить процесс-потомок «/usr/bin/update-manager» (нет такого файла или каталога), но при этом sudo apt update и sudo apt upgrade работают,
при запуске графического окна «Программы и обновления», выдает ошибку: не удалось выполнить процесс-потомок «/usr/bin/software-properties-gtk» (нет такого файла или каталога).
lsb_release
возвращает: bash: /usr/bin/lsb_release: /usr/bin/python3: плохой интерпретатор: Нет такого файла или каталога
lsb_release -а , тоже самое
попробовал все сбросить
sudo update-alternatives —remove-all python
sudo update-alternatives —remove-all python2
sudo update-alternatives —remove-all python3
результат: ошибки не исправились, все также. если правильно понимаю, я затронул системный python 2.7.12 и его зависимости. Помогите исправить, подскажите где я ошибся и как правильно нужно было делать.
Спасибо.
Русские Блоги
Ошибка Centos7 при запуске скрипта Python / usr / bin / python3 ^ M: плохой интерпретатор: нет такого файла или каталога
После написания скрипта Python для Windows он запускается в среду Linux и часто возникает ошибка:
Проверьте код и убедитесь, что в этом утверждении нет ничего плохого:
N десятков тысяч персонажей в сложном процессе расследования здесь опущены .
Используйте команду file для просмотра типа файла:
Вы можете видеть, что разделитель строк находится в режиме CRLF, который представляет собой разрыв строки в формате Windows,
добавит дополнительный ^ M в конце каждой строки, Linux не распознает его, вы можете проверить разницу между CRLF и LF.
Вы можете увидеть файл с помощью команды cat -v, в конце строки есть символ ^ M.
Решение:
Замените символ ^ M и восстановите файл:
cat -v oldfile.py | sed -e '1,$s/\^M$//g' > newfile.py
Используйте команду cat -v для просмотра эффекта, символ ^ M был заменен:
Дайте разрешение на выполнение, выполните сценарий и решите проблему:
ps: удаляется только символ ^ M в конце строки, поэтому вывод ^ M с помощью оператора print все еще там.
Приложите два распространенных шага программного обеспечения в формате Unix:
Notepad++:
pycharm: