首页 > 解决方案 > 在 ubuntu 上使用 pycharm 时导入 gnuradio

问题描述

我想在 Ubuntu 18.04 上从 PyCharm CE 2019.2 从 python 调用 gnuradio 3.8 中的块。Pycharm中设置的项目解释器是创建pycharm项目时创建的虚拟环境。我已经看到建议(如何在 pycharm 中导入模块?)添加如下一行:

/home/my_name/devel/gnuradio3_8/lib/python3.6/dist-packages

到解释器路径(在 File->Settings->Project:my_proj->Project Interpreter->Gear Symbol->Show All->Show Paths for Selected Interpreter 下)。

从 python 控制台,当我尝试导入 gnuradio 块时,这会导致以下错误:

PyDev console: starting.
Python 3.6.8 (default, Oct  7 2019, 12:59:55) 
[GCC 8.3.0] on linux
import gnuradio
from gnuradio import blocks
Traceback (most recent call last):
  File "/home/my_name/devel/gnuradio3_8/lib/python3.6/dist-packages/gnuradio/blocks/blocks_swig0.py", line 14, in swig_import_helper
    return importlib.import_module(mname)
  File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 658, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 571, in module_from_spec
  File "<frozen importlib._bootstrap_external>", line 922, in create_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: libgnuradio-blocks.so.3.8.0: cannot open shared object file: No such file or directory
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/home/my_name/devel/gnuradio3_8/lib/python3.6/dist-packages/gnuradio/blocks/__init__.py", line 32, in <module>
    from .blocks_swig import *
  File "/snap/pycharm-community/167/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
    module = self._system_import(name, *args, **kwargs)
  File "/home/my_name/devel/gnuradio3_8/lib/python3.6/dist-packages/gnuradio/blocks/blocks_swig.py", line 24, in <module>
    from .blocks_swig0 import *
  File "/snap/pycharm-community/167/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
    module = self._system_import(name, *args, **kwargs)
  File "/home/my_name/devel/gnuradio3_8/lib/python3.6/dist-packages/gnuradio/blocks/blocks_swig0.py", line 17, in <module>
    _blocks_swig0 = swig_import_helper()
  File "/home/my_name/devel/gnuradio3_8/lib/python3.6/dist-packages/gnuradio/blocks/blocks_swig0.py", line 16, in swig_import_helper
    return importlib.import_module('_blocks_swig0')
  File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named '_blocks_swig0'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/home/my_name/devel/gnuradio3_8/lib/python3.6/dist-packages/gnuradio/blocks/blocks_swig0.py", line 14, in swig_import_helper
    return importlib.import_module(mname)
  File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 658, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 571, in module_from_spec
  File "<frozen importlib._bootstrap_external>", line 922, in create_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: libgnuradio-blocks.so.3.8.0: cannot open shared object file: No such file or directory
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "/snap/pycharm-community/167/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
    module = self._system_import(name, *args, **kwargs)
  File "/home/my_name/devel/gnuradio3_8/lib/python3.6/dist-packages/gnuradio/blocks/__init__.py", line 36, in <module>
    from .blocks_swig import *
  File "/snap/pycharm-community/167/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
    module = self._system_import(name, *args, **kwargs)
  File "/home/my_name/devel/gnuradio3_8/lib/python3.6/dist-packages/gnuradio/blocks/blocks_swig.py", line 24, in <module>
    from .blocks_swig0 import *
  File "/snap/pycharm-community/167/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
    module = self._system_import(name, *args, **kwargs)
  File "/home/my_name/devel/gnuradio3_8/lib/python3.6/dist-packages/gnuradio/blocks/blocks_swig0.py", line 17, in <module>
    _blocks_swig0 = swig_import_helper()
  File "/home/my_name/devel/gnuradio3_8/lib/python3.6/dist-packages/gnuradio/blocks/blocks_swig0.py", line 16, in swig_import_helper
    return importlib.import_module('_blocks_swig0')
  File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named '_blocks_swig0'

我相信我已经安装了 libgnuradio:

~/devel/gnuradio3_8/lib$ ls
cmake                            libgnuradio-qtgui.so.3.8.0
libgnuradio-analog.so            libgnuradio-qtgui.so.3.8.0.0
libgnuradio-analog.so.3.8.0      libgnuradio-runtime.so
libgnuradio-analog.so.3.8.0.0    libgnuradio-runtime.so.3.8.0
libgnuradio-audio.so             libgnuradio-runtime.so.3.8.0.0
libgnuradio-audio.so.3.8.0       libgnuradio-trellis.so
libgnuradio-audio.so.3.8.0.0     libgnuradio-trellis.so.3.8.0
libgnuradio-blocks.so            libgnuradio-trellis.so.3.8.0.0
libgnuradio-blocks.so.3.8.0      libgnuradio-uhd.so
libgnuradio-blocks.so.3.8.0.0    libgnuradio-uhd.so.3.8.0
libgnuradio-channels.so          libgnuradio-uhd.so.3.8.0.0
libgnuradio-channels.so.3.8.0    libgnuradio-utilities.so
libgnuradio-channels.so.3.8.0.0  libgnuradio-utilities.so.1.0.0git
libgnuradio-digital.so           libgnuradio-utilities.so.v1.0-compat-xxx-xunknown
libgnuradio-digital.so.3.8.0     libgnuradio-vocoder.so
libgnuradio-digital.so.3.8.0.0   libgnuradio-vocoder.so.3.8.0
libgnuradio-dtv.so               libgnuradio-vocoder.so.3.8.0.0
libgnuradio-dtv.so.3.8.0         libgnuradio-wavelet.so
libgnuradio-dtv.so.3.8.0.0       libgnuradio-wavelet.so.3.8.0
libgnuradio-fec.so               libgnuradio-wavelet.so.3.8.0.0
libgnuradio-fec.so.3.8.0         libgnuradio-zeromq.so
libgnuradio-fec.so.3.8.0.0       libgnuradio-zeromq.so.3.8.0
libgnuradio-fft.so               libgnuradio-zeromq.so.3.8.0.0
libgnuradio-fft.so.3.8.0         libuhd.so
libgnuradio-fft.so.3.8.0.0       libuhd.so.3.14.1
libgnuradio-filter.so            libvolk.so
libgnuradio-filter.so.3.8.0      libvolk.so.2.0
libgnuradio-filter.so.3.8.0.0    pkgconfig
libgnuradio-pmt.so               python2.7
libgnuradio-pmt.so.3.8.0         python3
libgnuradio-pmt.so.3.8.0.0       python3.6
libgnuradio-qtgui.so             uhd

导入gnuradio的正确方法是什么?

标签: pythonubuntupycharmvirtualenvgnuradio

解决方案


ImportError:libgnuradio-blocks.so.3.8.0:无法打开共享对象文件:没有这样的文件或目录

是的。我在通常的地方有 gnuradio3.7,而 3.8 在我的主目录下

您需要将已安装 gnuradio libs ( ~/devel/gnuradio3_8/lib) 的路径添加到LD_LIBRARY_PATH环境变量中。

我不熟悉 pycharm,但你可以从你的终端执行

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/devel/gnuradio3_8/lib

然后从同一个终端启动 pycharm 或将其添加到您的~/.bash_profile

如果您已gnuradio使用安装pybombs,将有一个setup_env.sh脚本~/devel/gnuradio3_8,您可以从终端获取

$ source setup_env.sh

推荐阅读