ImportError: No module named _analog_swig
Asked Answered
N

2

1

I am having issues getting python to import the _analog_swig gnuradio module in order to run gnuradio code on a Windows 8.1 64bit machine.

Some background: I am running Python 2.7.10 (installed in C:\Python27) and have installed the latest gnuradio binary (v3.7.11.1/v1.3 64-Bit Any CPU) from here: http://www.gcndevelopment.com/gnuradio/downloads.htm. I have installed gnuradio to C:\Program Files\GNURadio-3.7 . I can run gnuradio companion and run flowgraphs from GRC successfully (which calls "C:\Program Files\GNURadio-3.7\bin\run_gr.bat" gnuradio-companion.py).

I have added & verified the following system variables are set:

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

Now to the problem: If I run e.g. CMD and type:

python C:\test\top_block.py 

I am returned the following 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

The folder content of C:\Program Files\GNURadio-3.7\lib\site-packages\gnuradio\analog is as follows: Folder content on Windows

Comparing this to the folder content on a linux machine, which has a working install of gnuradio that works with python as I want it:

enter image description here

The difference seems to be that the folder in windows contains only a _analog_swig.pyc file, whereas the folder in linux contains a _analog_swig_.so file.

Any idea why the _analog_swig module can apparently not be imported in windows?

My plan is to be able to run gnuradio code directly from my python interpreter and being able to create compiled gnuradio executables so any help on how this could be fixed is much appreciated.

Nationalist answered 4/3, 2018 at 12:14 Comment(1)
The .pyd file is really just a DLL in windows and fulfils the same role as the .so file would. Most likely it's not built for the right Python version/compiler/word size on your Windows box, where IIRC the error message is pretty much identical for all cases.Bismuthous
V
2

I've been struggling with this for the past few days, but I finally figured it out. I was trying to run GnuRadio Companion generated code in IDLE and also in PyCharm. I kept failing miserably with this same error. I finally figured it out:

-As Flexo says, the PYD file (_analog_swig.pyd) is actually a Windows DLL. The error makes it sound like Python is not finding that file, but that is not at all what was happening. The PYD file, being a DLL, has dependencies itself. Python is able to find _analog_swig.pyd just fine, but it could not find the DEPENDENCIES of that library.

-To verify if that's what wrong in your installation, download and use DependencyWalker (Google it) to check if your system can find the dependencies to _analog_swig.pyd.

-The fix for me was to add the GnuRadio-3.7/bin folder to my PATH environment variable. Inside that folder are a number of DLLs that the _analog_swig.pyd library needs to load. If you don't have the folder in your PATH, the module will fail to load in Python and throw the error you see above.

-I see that you verified that this folder is in your PATH, so this is apparently not the same problem, although your symptoms are exactly the same as mine. i.e. the GRC code would run just fine when you start with "run_gr.bat", but not when you run from a normal CMD window.

Hopefully that helps someone else that wants to use GNURadio Python code on Windows.

Valma answered 13/5, 2019 at 0:52 Comment(1)
Thank you for your answer @jg1998.. it actually did help in solving similar problem with "runtime_swig" module in windows environment.Peirsen
A
1

Friend,

As you mentioned, the GNU Companion calls \bin\run_gr.bat gnuradio-companion.py. That batch script does quite a bit of work on windows environment variables (try opening it in a text editor if you're curious).

In a sense, the run_gr.bat script puts together a temporary, custom python workspace for gnuradio so it can import anything it needs. It receives python scripts to run in this environment as command line arguments; hence, you can use it to run any GNU radio python code you want in your windows command prompt. Generally, you would call

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

To test your import, you can try

# test.py
from gnuradio import analog

try calling the following from the command prompt, in the test.py directory:

<gnuradio_install_path>\bin\run_gr.bat test.py
Amylene answered 8/7, 2020 at 2:57 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.