decodestrings не является атрибутом ошибки base64 в python 3.9.1

#linux #base64 #python-3.9

#linux #base64 #python-3.9

Вопрос:

После обновления с python 3.8.0 до python 3.9.1 интерфейс клиента tremc transmission BitTorrent выдает decodestrings is not an attribute of base64 ошибку всякий раз, когда я нажимаю на запись торрента, чтобы проверить детали.

Мои системные характеристики: ОС: Ядро Arch linux: 5.6.11-clear-linux

Ответ №1:

Итак, я зашел в каталог site-packages и с помощью ripgrep попытался найти decodestring строку.

  rg decodestring
    
    paramiko/py3compat.py
    39:    decodebytes = base64.decodestring 
 

После изучения py3compat.py файл, я нашел этот блок:

 PY2 = sys.version_info[0] < 3

if PY2:
    string_types = basestring  # NOQA
    text_type = unicode  # NOQA
    bytes_types = str
    bytes = str
    integer_types = (int, long)  # NOQA
    long = long  # NOQA
    input = raw_input  # NOQA
    decodebytes = base64.decodestring
    encodebytes = base64.encodestring
 

Таким образом, decodebytes заменили (псевдоним) атрибут decodestring base64 для версии python> = 3
Это должно быть новое дополнение, потому что tremcработал нормально до версии 3.8.*.

Открыл скрипт tremc, нашел строку с ошибкой (строка 441), просто заменил атрибут decodestring на decodebytes .Быстрое исправление до следующего обновления.

PS: Проверил репозиторий github, и для него есть ожидающий запрос на извлечение. Если вы не хотите ждать следующего выпуска, а также не хотите взламывать его так, как я, вы можете получить его свежую сборку из репозитория, хотя это не сильно отличается от моего метода

Ответ №2:

base64.encodestring() и base64.decodestring(), псевдонимы, устаревшие со времен Python 3.1, были удалены.

используйте base64.encodebytes() и base64.decodebytes()