zaLinux.ru

Переход на Python 3 в Debian и Kali Linux


Python 2 в Debian и производных дистрибутивах

Смотрите также: Как переключаться между различными версиями Python. Как установить Python 2

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, которые можно оставить как есть:

  • #!/usr/bin/python3
  • #!/usr/bin/python2
  • #!/usr/bin/env python3
  • #!/usr/bin/env python2

Плохие строки shebang, которые необходимо обновить:

  • #!/usr/bin/python
  • #!/usr/bin/env python

 

В: Как я могу избавиться от сообщения о 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, как я могу его вернуть?

О: Попробуйте pyenv. Смотрите следующий раздел «Как переключаться между различными версиями Python. Как установить Python 2».


 

В: Я написал скрипт на Python, что мне делать?

О: Будьте вежливы с конечными пользователями:

  • чётко задокументируйте, работает ли ваш код с Python 3 или Python 2
  • используйте /usr/bin/python3 или /usr/bin/python2 в качестве строки shebang, она более выразительна, чем /usr/bin/python, и с большей вероятностью даст желаемый результат
  • обновите его для совместимости с Python 3, если это ещё не так

Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *