我如何在 Python virtualenv 中安装 GNU Radio

How do I install GNU Radio in a Python virtualenv

我正在尝试让 gnuradio 在 vi​​rtualenv 中工作。我想让我的系统保持干净,我的项目需要 Python 3.9,但我的系统 Python 是 3.8(Ubuntu 20.04.4 LTS)。

我使用 sudo apt install gnuradio 安装它,但它最终出现在系统 dist-packages 中,我无法将它导入我的 virtualenv。在 运行 系统 Python 时导入工作正常 Python。

我尝试重新创建我的 virtualenv 以使用系统包:

python3.9 -m venv --system-site-packages venv

这至少让我的 virtualenv 能够找到 gnuradio,但是当我尝试导入东西时,它以几种不同的方式失败了。

>>> from gnuradio import uhd
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/gnuradio/uhd/__init__.py", line 21, in _prepare_uhd_python
    from . import uhd_python
ImportError: cannot import name 'uhd_python' from partially initialized module 'gnuradio.uhd' (most likely due to a circular import) (/usr/lib/python3/dist-packages/gnuradio/uhd/__init__.py)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/gnuradio/uhd/__init__.py", line 68, in <module>
    _prepare_uhd_python()
  File "/usr/lib/python3/dist-packages/gnuradio/uhd/__init__.py", line 26, in _prepare_uhd_python
    from . import uhd_python
ImportError: cannot import name 'uhd_python' from partially initialized module 'gnuradio.uhd' (most likely due to a circular import) (/usr/lib/python3/dist-packages/gnuradio/uhd/__init__.py)
>>> import pmt
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/pmt/__init__.py", line 34, in <module>
    from .pmt_python import *
ModuleNotFoundError: No module named 'pmt.pmt_python'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/pmt/__init__.py", line 38, in <module>
    from .pmt_python import *
ModuleNotFoundError: No module named 'pmt.pmt_python'

我已经为此苦苦挣扎了几天,但没有找到解决办法。 甚至可以从 virtualenv 中 运行 GNU Radio 吗?

I have struggled with this for several days now and found no solution.

您的发行版的 GNU Radio 软件包是针对您的发行版的 python 构建的,因此您不能将其与不同的 python.

一起使用

所以,这是意料之中的。

Is it even possible to run GNU Radio from within a virtualenv?

当然,您还需要从该 virtualenv 构建它,并告诉 cmake -DCMAKE_INSTALL_PREFIX=/path/to/virtualenv/ 安装到其中。

我们有一个非常好的 anaconda 打包器,所以 installing GNU Radio into a Python prefix using conda 可能是最简单的替代方法。

或者:

Ubuntu 20.04.4 LTS

新的 Ubuntu LTS 版本发布了!如果您将系统升级到 Ubuntu 22.04 LTS,您将“免费”获得 Python 3.10 和当前的 GNU Radio 3.10.1。