Python, Gtk3 и Gstreamer

Это не очень удачная комбинация, но она работает большую часть времени. Однако я только что столкнулся с проблемой с Gio.File. Это всегда приводит к ошибкам TypeError и Python:

Python 2.7.3 (default, Apr 10 2012, 12:29:04) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from gi.repository import GObject, Gio
>>> import gst
>>> la = Gio.File.new_for_path("/home/dklasinc/foo")

TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
ERROR:/build/buildd/pygobject-3.2.0/gi/_gobject/pygobject.c:929:pygobject_new_full: assertion failed: (tp != NULL)

Есть ли способ обойти это? Я хотел бы использовать Gio для операций копирования файлов, чтобы предоставить пользователям некоторую обратную связь.

1
задан 17 May 2012 в 02:21

2 ответа

Вы не можете объединить самоанализ Gobject и статические привязки GStreamer, это вызывает сбои и проблемы. Вам также необходимо использовать самоанализ для GStreamer, и это действительно поддерживается только в выпусках 0.11 / 1.0.

0
ответ дан 17 May 2012 в 02:21

На какой версии Ubuntu вы работаете? На данный момент вы на самом деле не должны быть в состоянии использовать PyGI со всеми старыми статичными объектами pygobject. Если это работало, это было в значительной степени случайно. В любом случае на Precise, если порядок импорта меняется на противоположный, вы получите исключение, объясняющее проблему:

>>> import gst
>>> from gi.repository import GObject, Gio
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/gi/__init__.py", line 23, in <module>
    from ._gi import _API, Repository
ImportError: could not import gobject (error was: ImportError('When using gi.repository you must not import static modules like "gobject". Please change all occurrences of "import gobject" to "from gi.repository import GObject".',))

В качестве обходного пути можно ли заставить свой пользовательский интерфейс вызывать вспомогательный сценарий и только в этом сценарии использовать статический gst / gobject?

GStreamer 1.0 полностью поддерживает PyGI. В Quantal есть пакеты, а для Precise доступны бэкпорты. Смотрите мое Руководство по портированию GStreamer 1.0 Python .

0
ответ дан 17 May 2012 в 02:21

Другие вопросы по тегам:

Похожие вопросы: