Плагины, программы и скины от ака Учкун
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
Плагины, программы и скины от ака Учкун

Форум для владельцев спутниковых ресиверов на enigma2. Ресиверы dreambox, vu-plus и другие. Программы, плагины, скины, локализации от ака Учкун. ExtraChannelSelection
 
ФорумФорум  Последние изображенияПоследние изображения  РегистрацияРегистрация  ВходВход  

 

 FAQ: Как перевести любимые плагины с python 2 на python 3

Перейти вниз 
АвторСообщение
ака Учкун
Администратор
Администратор
ака Учкун


Статус : .....
Сообщения : 533
Рейтинг : 33923
Благодарности : 27858
Дата регистрации : 2017-06-29
Возраст : 58
Откуда : Узбекистан

FAQ: Как перевести любимые плагины с python 2 на python 3 Empty
СообщениеТема: FAQ: Как перевести любимые плагины с python 2 на python 3   FAQ: Как перевести любимые плагины с python 2 на python 3 EmptyВс 3 Окт - 18:35

Решено: Как перевести любимые плагины с python 2 на python 3


В связи с появлением новых имиджей для наших ресиверов, основанных уже на python 3, например OpenATV версии 6.5 и выше, назрела необходимость перевести плагины также на python 3. Но что делать, если их авторы по тем или иным причинам не торопятся это делать?
Выход напрашивается сам собой, сделать это самому. Тем более, что если Вы хоть и не являетесь программистом, но считаетесь продвинутым пользователем Энигмы2.

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

1. Имеется разрешение от автора, либо Вы не будете выставлять это на паблик.
2. Разумеется Вы должны иметь в наличии исходники, ну или декомпилированное)))
3. Вы должны быть не только продвинутым пользователем Энигмы, но и конечно должны быть с компьютером на ты, то есть Вы не должны падать в обморок от необходимости установки в ваш комп (вернее конечно в ОС на компе) каких нибудь программ или библиотек, и разумеется обязаны иметь умение работать в консоли.


Итак, поехали.
Сперва-наперво разумеется нужно иметь на компе предустановленную среду python 2.7
Если у Вас это еще не установлено, ставьте вот отсюда https://www.python.org/downloads/release/python-2713/ соответствующую для вашей операционной системы версию.

Вам обязательно появятся две библиотеки питона. Так как я у себя питон устанавливал давно, в принципе не помню, устанавливаются ли эти библиотеки вместе с питоном по умолчанию или нет. Это вот эти две библиотеки - 2to3 и futurize (вторая точно не ставится по умолчанию).
Но если Вы продвинутый пользователь ПК, то несложно их дополнительно поставить через питоновский pip

Код:
pip install 2to3


pip install futurize



В принципе первый наверно ставится с питоном по умолчанию, а второй я вам помогу, просто скачайте нижеприложенный архив с библиотекой futurize и распакуйте в site-packages вашего питона, то есть вот такая папка получится C:\Python27\Lib\site-packages\future-0.18.2

Теперь основные моменты. Дело в том, что в принципе с помощью futurize Вы без ручного переделывания кода вероятно обойдетесь. Это если Ваш плагин не использует например много строковых параметров. Потому что есть моменты, которые не переделываются с помощью библиотек автоматом.


Поэтому на всякий случай, изучите что собственно изменилось в питон 3 по сравнению с питон 2. При этом конечно такие изменения как ставший функцией метод print и тому подобное уж точно переделаются автоматом. А вот то, что обработка строк коренным образом изменилось в питон 3, это посложнее. Конечно то, что юникод теперь по умолчанию и обработка строк в байтовом и стринговом представлении облегчают работу только при условии написании кода изначально на питон 3, а вот переделку кода с питон 2 это заметно усложняет.

Но, как я уже сказал, будем надеяться во-первых, что код плага таких моментов либо не содержит, либо мизерно содержит, а во-вторых а на что крешлоги системы-то? Они то и любезно нам сообщат, что еще осталось переделать в плаге под питон 3 если что.


Поэтому, давайте прямо вместе с Вами и переделаю один плагин с питона 2 на питон 3, описывая с картинками каждый шаг для наглядности.

Если. как выше показал, питон установили, а также установили (распаковали) библиотеку futurize, хочу вот адаптировать под питон 3 собственный плагин для просмотра IPTV RussianMediaParkTV.
Беру папку плагина с исходниками и копирую всю папку в корень диска С, для быстроты работы модуля переделки. Вот скопировал туда, видно на скрине, и внутри исходные py файлы.

Важное замечание! Необходимо, чтобы в папке плагина присутствовали на момент запуска модуля адаптации абсолютно все файлы без исключения (в том числе и рекурсивно во вложенных папках), иначе пути импорта внутри модулей будете переделывать вручную.
Спойлер:


Теперь открываем консоль Винды. Но если не знаете как открыть консоль Винды, то Вы конечно просто попали не в ту тему, быстрее уходите отсюда, не теряйте своего времени даром.
Окно консоли

Спойлер:


Заходим в папку с установленной модулю futurize, обычная команда захода в папку - cd C:\Python27\Lib\site-packages\future-0.18.2
Вставяяяем команду в консоль и нажимаем Enter

Спойлер:



А дальше чуть внимательнее.
Теперь нужно будет по одному файлу каждый из исходных файлов .py пропустить через этот самый модуль futurize, чтобы он попытался автоматом переделать его под питон 3, при этом если вы далее вручную не тронете его, это будет универсальный код, работающий и на питон 2 одновременно.

Начнем с самого первого файла в корне, это как видите __init__.py
Используем вот такую команду, находясь в консоли в папке модуля futurize

Код:
python -m futurize путь_к_исходному_файлу\*.py -w



Значит наша первая команда в консоли по адаптации исходного файла в питон 3 будет выглядеть так
Код:

python -m futurize C:\RussianMediaParkTV\__init__.py -w

Это и введем и нажмем Enter


Спойлер:



Как видите, модуль говорит адаптация не требуется. Разумеется, инит то был пустой)))
Но вот далее пойдет веселее...
Следующий в этой папке файл cache.py


Код:
python -m futurize C:\RussianMediaParkTV\cache.py -w

Спойлер:




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

Не буду тут конечно все однотипные операции со всеми файлами, скажу только, что не забудьте указать правильный путь к файлу, или попросту скопировать путь из заголовка папки Винды, например уже в другой папке данного плагина будет -

Код:

python -m futurize C:\RussianMediaParkTV\api\playlist.py -w




После того, как нудно закончил также со всеми файлами-исходниками плагина, просто взял и забросил папку плагина с переделанными исходниками под питон 3 в имидж ОпенАТВ 7, в папку Extensions имиджа.
И сразу попробую запустить плагин, перегрузив имидж. Потому что знаю в данном случае более ничего в имидж устанавливать не нужно.
И да, разумеется еще также заброшу в имидж файлы с папками скинов, которые идут вместе с плагином RussianMediaParkTV.
Эти папки забросим куда надо, то есть в папку имиджа /usr/share/enigma2/.
А также создадим папку russianmediaparktv в папке /etc/russianmediaparktv.. которая так и так создалась бы при установке плагина из ипк.

И ура, как видите на скрине внизу плагин принят третьим питоном ОпенАТВ 7.


Спойлер:





Но первая попытка запуска закончилась крешем)))

Это ничего. Открываем крешлог и находим нужное и читаем:


Цитата :
*File "/usr/lib/enigma2/python/Plugins/Extensions/RussianMediaParkTV/utils.py", line 408
2021-10-03 15:41:53+0500 [-]* * *global Timezone ## Warning: Unused global
SyntaxError: name 'Timezone' is used prior to global declaration



Все ясно. Имидж говорит глобальная переменная присвоена раньшше обьявления. Такое принимал питон 2, но питон 3 более строгим оказался. Ладно изменим.
Открываем этот самый файл /usr/lib/enigma2/python/Plugins/Extensions/RussianMediaParkTV/utils.py и переделываем немного код.
Ну раз смысл креша говорит о том, что переменная использована до объявления ее глобальной, просто возьмем и строчку

Код:
global Timezone*


перенесем из конца файла в начало ее после импортов, то есть вот сюда, см. на скрине



Спойлер:



Сохраняем, закидывам ы имидж с заменой. Перегружаемся и пытаемся снова запустить.

Спойлер:



Теперь креш при попытке зайти в раздел НТВ


Цитата :
*File "/usr/lib/enigma2/python/Plugins/Extensions/RussianMediaParkTV/api/ntv.py", line 101, in start
2021-10-03 16:34:25+0500 [-]* * *spl_for_tel=data.split('\n')
2021-10-03 16:34:25+0500 [-] TypeError: a bytes-like object is required, not 'str'



Также все ясно. Это какраз таки изменившиеся в тройке особенности работы со строками.
Находим в ntv.py строчку 110 и ее меняем таким образом, вот минус и плюс, было и стало


Код:
data=bn.decode('windows-1251').encode('utf-8')


data=bn.decode('windows-1251').




Вобщем еще несколько крешей получилось и их смысл свелся к тому, что я в нескольких строчках убрал кодирование в юникод, который в двойке нужен был. а в тройке уже вредит так как здесь он по умолчанию идет. То есть везде где было окончание .encode('utf-8'), это окончание то и убрал.....

Снова запускаем и успех.

Спойлер:




Все получилось)))
А мы и не сомневались)))

Удачи в переделках плагинов под питон 3.
Теперь думаю, с помощью этой простой инструкции Вы кинетесь переделывать ваши любимые плагины под питон 3))))

И будете правы)))
Вложенные файлы
FAQ: Как перевести любимые плагины с python 2 на python 3 Attachmentfuture-0.18.2.zip
У вас нет прав скачивать вложенные файлы.
(1 Мб) Скачиваний: 24

vadim2007, slavikmalo, ВИД-57, Valder2009, bulya, ale4926437, Юрий65 и сказали спасибо

Вернуться к началу Перейти вниз
https://forum-aka-uchkun.forum2x2.ru
 
FAQ: Как перевести любимые плагины с python 2 на python 3
Вернуться к началу 
Страница 1 из 1
 Похожие темы
-
» FAQ: Секреты и уловки парсинга в python

Права доступа к этому форуму:Вы не можете отвечать на сообщения
Плагины, программы и скины от ака Учкун :: Прочее :: FAQ-
Перейти: