slytomcat / yandex-disk-indicator

Panel indicator (GTK+) for YandexDisk CLI client for Linux
GNU General Public License v3.0
238 stars 30 forks source link

Namespace Notify not available for version 0.9 #213

Closed 13werwolf13 closed 3 years ago

13werwolf13 commented 4 years ago

Traceback (most recent call last): File "/usr/bin/yandex-disk-indicator", line 31, in require_version('Notify', '0.9') File "/usr/lib64/python3.7/site-packages/gi/init.py", line 133, in require_version (namespace, version)) ValueError: Namespace Notify not available for version 0.9

OpenSuSe Tumbleweed https://build.opensuse.org/package/show/home%3ADead_Mozay/yandex-disk-indicator

13werwolf13 commented 4 years ago

Насколько я понимаю пришло время обновить Notify с 0.7 до 0.9

slytomcat commented 4 years ago

ValueError: Namespace Notify not available for version 0.9 - так нету 0.9 версии вот и ругается - с 0.7 (как в оригинальном коде) - все работает.

О чем ошибка то - не понимаю?

13werwolf13 commented 4 years ago

не ошибка, указал на то что во многих дистрибутивах уже не опакечивают устаревшую версию

slytomcat commented 4 years ago

Можно конкретнее - в каких дистрибутивах Notify v.0.7 не поддерживается?

В ubuntu 18.04 наоборот ругается на v.0.9 (как у вас в примере). Т.о. одну версию для всех дистрибутивов не указать в принципе.

13werwolf13 commented 4 years ago

OpenSuSe Leap 15.0 OpenSuSe Leap 15.1 OpenSuSe Tumbleweed Arch И большинство дистрибутивов распространяющихся по модели Rolling release

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

slytomcat commented 4 years ago

Теоретически можно просто убрать строчку 10 "require_version('Notify', '0.7')" и будет грузится версия которая найдется. Но при запуске индикатора будет ругаться:

  indicator.py:11: PyGIWarning: Notify was imported without specifying a version first. Use 
  gi.require_version('Notify', '0.7') before import to ensure that the right version gets loaded.
    from gi.repository import Notify
13werwolf13 commented 4 years ago

Да, так работает. но похоже больше на костыль чем на решение. Тем не менее спасибо.

slytomcat commented 4 years ago

Ну пока некостыльного решения не вижу. Тут пока вообще не много вижу вариантов:

  1. Правим код под "новые дистрибутивы" при сборке пакетов для них, позже можно будет перейти к правке кодов только "старых дистрибутивов" - мартышкин труд.
  2. Убираем контроль версий (и получаем варнинги) - кривой костыль.
  3. пишем код который в зависимости от дистрибутива пытается выбирать нужную версию - это просто велосипед из костылей, ИМХО.
13werwolf13 commented 4 years ago

Выбирать версию либы по дистрибутиву костыль безспорный, а как насчёт выбор версии либы по наличию самой либы?

slytomcat commented 4 years ago

... а как наличие то проверять... (я не знаю)

13werwolf13 commented 4 years ago
import PACKAGE
print(PACKAGE.__version__)

емнип как-то так

slytomcat commented 4 years ago

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

slytomcat commented 4 years ago

вот тут https://pygobject.readthedocs.io/en/latest/guide/api/api.html нарыл gi.check_version(, )

Но она раизит ValueError если подходящей либы/версии нет.

С обработкой ексепшена импорт поучается просто монструозный.

А главное версии то надо знать что бы их проверять....

костыли - наше все....

slytomcat commented 3 years ago

В общем пока не вижу нормального решения.