Gst.init 在 anaconda 下失败,但适用于原生 python

Gst.init fails under anaconda, but works with native python

Gst 的初始化在 python 下工作,由 ubuntu 安装,而不是 python 由 anaconda 安装:

我写了一个小脚本来展示会发生什么:

$ cat gstinit.py 
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst
Gst.init(None)
print("Done!")

这是使用 ubuntu python:

的结果
$ /usr/bin/python2.7 gstinit.py 
Done!

但只需使用 anaconda 安装的 python 即可得到:

$ python gstinit.py 

** (process:27029): WARNING **: Failed to load shared library 'libgstreamer-1.0.so.0' referenced by the typelib: libiconv.so.2: cannot open shared object file: No such file or directory
Traceback (most recent call last):
  File "gstinit.py", line 4, in <module>
    Gst.init(None)
gi._error.GError: g-invoke-error-quark: Could not locate gst_init: libiconv.so.2: cannot open shared object file: No such file or directory (1)

搜索失败的库成功:

$ ls -lt $(find /usr -name libgstreamer-1.0.so.0)
lrwxrwxrwx 1 root root 27 sept.  6 15:16 /usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0 -> libgstreamer-1.0.so.0.803.0
lrwxrwxrwx 1 root root 27 sept.  6 15:12 /usr/lib/i386-linux-gnu/libgstreamer-1.0.so.0 -> libgstreamer-1.0.so.0.803.0

这不是我第一次遇到 gstreamer 和 anaconda 的问题。这次,它跟在 conda update 之后。下面是anaconda下gstreamer的安装包:

$ conda list | grep gst
gst-plugins-base          1.8.0                         0    conda-forge
gstreamer                 1.8.0                         1    conda-forge

我的解决方案是:

  • 删除蟒蛇,
  • 重新安装(不是最新的 4.2.0 版,而是 4.1.0 版),
  • 在任何其他包之前安装 PyGObject:

    conda install -c pkgw pygobject3=3.18.2
    

这对我有用 https://github.com/conda-forge/gstreamer-feedstock。它使用 conda-forge。