ImportError:没有名为_analog_swig的模块

时间:2018-03-04 12:14:30

标签: python windows swig importerror gnuradio

我遇到问题,让python导入_analog_swig gnuradio模块,以便在Windows 8.1 64位机器上运行gnuradio代码。

一些背景知识:我正在运行Python 2.7.10(安装在C:\ Python27中)并从此处安装了最新的gnuradio二进制文件(v3.7.11.1 / v1.3 64位任意CPU):{{3 }}。我已经将gnuradio安装到C:\ Program Files \ GNURadio-3.7。 我可以运行gnuradio伴侣并成功运行GRC中的流程图(调用“C:\ Program Files \ GNURadio-3.7 \ bin \ run_gr.bat”gnuradio-companion.py)。

我添加了&验证了以下系统变量的设置:

Path: C:\Program Files\GNURadio-3.7\bin
PYTHONPATH: C:\Program Files\GNURadio-3.7\lib\site-packages
GRC_BLOCKS_PATH: C:\Program Files\GNURadio-3.7\share\gnuradio\grc\blocks

现在问题:如果我运行,例如CMD并输入:

python C:\test\top_block.py 

我返回以下ImportError:

File "C:\test\top_block.py", line 22, in <module>
from gnuradio import analog
File "C:\Program Files\GNURadio-3.7\lib\site-packages\gnuradio\analog\__init__.py", line 33, in <module>
from analog_swig import *
File "C:\Program Files\GNURadio-3.7\lib\site-packages\gnuradio\analog\analog_swig.py", line 17, in <module>
_analog_swig = swig_import_helper()
File "C:\Program Files\GNURadio-3.7\lib\site-packages\gnuradio\analog\analog_swig.py", line 16, in swig_import_helper
return importlib.import_module('_analog_swig')
File "C:\Python27\lib\importlib\__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named _analog_swig

C:\ Program Files \ GNURadio-3.7 \ lib \ site-packages \ gnuradio \ analog的文件夹内容如下:http://www.gcndevelopment.com/gnuradio/downloads.htm

将它与linux机器上的文件夹内容进行比较,该机器具有gnuradio的工作安装,可以根据需要使用python:

Folder content on Windows

差异似乎是windows中的文件夹只包含_analog_swig.pyc文件,而linux中的文件夹包含_analog_swig_.so文件。

知道为什么_analog_swig模块显然不能在windows中导入?

我的计划是能够直接从我的python解释器运行gnuradio代码,并且能够创建编译的gnuradio可执行文件,因此非常感谢任何有关如何修复它的帮助。

2 个答案:

答案 0 :(得分:1)

朋友

正如您提到的,GNU Companion调用\bin\run_gr.bat gnuradio-companion.py。该批处理脚本在Windows环境变量上做了很多工作(如果您感到好奇,请尝试在文本编辑器中打开它)。

从某种意义上说,run_gr.bat脚本为gnuradio组合了一个临时的自定义python工作区,因此它可以导入所需的任何内容。它接收python脚本作为命令行参数在此环境中运行;因此,您可以使用它在Windows命令提示符下运行所需的任何GNU radio python代码。通常,您会致电

<gnuradio_install_path>\bin\run_gr.bat <gnu_radio_code>.py

要测试您的导入,可以尝试

# test.py
from gnuradio import analog

尝试在命令提示符下的test.py目录中调用以下命令:

<gnuradio_install_path>\bin\run_gr.bat test.py

答案 1 :(得分:0)

过去几天来,我一直在为此苦苦挣扎,但我终于弄明白了。我试图在IDLE和PyCharm中运行GnuRadio Companion生成的代码。我一直因同样的错误而惨败。我终于想通了:

-正如Flexo所说,PYD文件(_analog_swig.pyd)实际上是Windows DLL。该错误使它听起来好像Python找不到该文件,但这根本不是正在发生的事情。作为DLL的PYD文件本身具有依赖项。 Python能够很好地找到_analog_swig.pyd,但找不到该库的依赖项。

-要验证安装是否有问题,请下载并使用DependencyWalker(在Google上查看),以检查您的系统是否可以找到_analog_swig.pyd的依赖项。

-对我来说,解决方法是将GnuRadio-3.7 / bin文件夹添加到我的PATH环境变量中。该文件夹中有许多_analog_swig.pyd库需要加载的DLL。如果您的PATH中没有该文件夹,则该模块将无法在Python中加载,并引发您在上面看到的错误。

-我看到您已经验证了此文件夹在您的PATH中,因此尽管您的症状与我的症状完全一样,但这显然不是相同的问题。也就是说,当您以“ run_gr.bat”开头时,GRC代码可以很好地运行,但是当您从正常的CMD窗口中运行时,GRC代码则不会运行。

希望这对希望在Windows上使用GNURadio Python代码的其他人有所帮助。