Файловый архив | Как загрузить файлы | Проблемы с регистрацией? | Калькулятор мультифида | Новичкам читать !!! | Справка |
|
|
Опции темы |
03.10.2021, 17:40 | #1 | ||||||||||
: Как перевести любимые плагины с python 2 на python 3
Не нашел в каком разделе можно инструкции или FAQ написать, пишу здесь, админ разберется.
Решено: Как перевести любимые плагины с 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 В принципе первый наверно ставится с питоном по умолчанию, а второй я вам помогу, просто скачайте нижеприложенный архив с библиотекой 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 Значит наша первая команда в консоли по адаптации исходного файла в питон 3 будет выглядеть так Это и введем и нажмем Enter
Как видите, модуль говорит адаптация не требуется. Разумеется, инит то был пустой))) Но вот далее пойдет веселее... Следующий в этой папке файл cache.py
Вот уже изменения пошли. Строчка, которая начинается с минусом - означает удалена, и соответсвенно с плюсом добавлена. Напоминаю изменения сделаны автоматически. Не буду тут конечно все однотипные операции со всеми файлами, скажу только, что не забудьте указать правильный путь к файлу, или попросту скопировать путь из заголовка папки Винды, например уже в другой папке данного плагина будет - После того, как нудно закончил также со всеми файлами-исходниками плагина, просто взял и забросил папку плагина с переделанными исходниками под питон 3 в имидж ОпенАТВ 7, в папку Extensions имиджа. И сразу попробую запустить плагин, перегрузив имидж. Потому что знаю в данном случае более ничего в имидж устанавливать не нужно. И да, разумеется еще также заброшу в имидж файлы с папками скинов, которые идут вместе с плагином RussianMediaParkTV. Эти папки забросим куда надо, то есть в папку имиджа /usr/share/enigma2/. А также создадим папку russianmediaparktv в папке /etc/russianmediaparktv.. которая так и так создалась бы при установке плагина из ипк. И ура, как видите на скрине внизу плагин принят третьим питоном ОпенАТВ 7.
Но первая попытка запуска закончилась крешем))) Это ничего. Открываем крешлог и находим нужное и читаем: Цитата:
Все ясно. Имидж говорит глобальная переменная присвоена раньшше обьявления. Такое принимал питон 2, но питон 3 более строгим оказался. Ладно изменим. Открываем этот самый файл /usr/lib/enigma2/python/Plugins/Extensions/RussianMediaParkTV/utils.py и переделываем немного код. Ну раз смысл креша говорит о том, что переменная использована до объявления ее глобальной, просто возьмем и строчку перенесем из конца файла в начало ее после импортов, то есть вот сюда, см. на скрине
Сохраняем, закидывам ы имидж с заменой. Перегружаемся и пытаемся снова запустить. Скрытый текст Теперь креш при попытке зайти в раздел НТВ Цитата:
Также все ясно. Это какраз таки изменившиеся в тройке особенности работы со строками. Находим в ntv.py строчку 110 и ее меняем таким образом, вот минус и плюс, было и стало Вобщем еще несколько крешей получилось и их смысл свелся к тому, что я в нескольких строчках убрал кодирование в юникод, который в двойке нужен был. а в тройке уже вредит так как здесь он по умолчанию идет. То есть везде где было окончание .encode('utf-8'), это окончание то и убрал..... Снова запускаем и успех.
Все получилось))) А мы и не сомневались))) Удачи в переделках плагинов под питон 3. Теперь думаю, с помощью этой простой инструкции Вы кинетесь переделывать ваши любимые плагины под питон 3)))) И будете правы)))
__________________
Открытая телеграмм группа https://t.me/RussianMediaPark2 Последний раз редактировалось kosmos17; 04.01.2024 в 09:29. |
|||||||||||
16 пользователя(ей) сказали cпасибо: |
Социальные закладки |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Анекдоты(На любую тему) | makaroff | Анекдоты | 518 | 11.11.2024 11:03 |
Новости О переходе Украины на цифровое ТВ | viskom | Эфирное и кабельное ТВ | 366 | 08.08.2024 19:58 |