Windows 上的 pyrtlsdr 无法导入

用户169808

我正在尝试pyrtlsdr-0.2.9使用python 3.6. 首先,我pip按照网站上的说明安装了它然后,出于某种原因,当我尝试导入模块或运行示例脚本时,我收到以下错误消息:

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    import rtlsdr
  File "C:\...\Programs\Python\Python36-32\lib\site-packages\rtlsdr\__init__.py", line 56, in <module>
    from .librtlsdr import librtlsdr
  File "C:\...\Programs\Python\Python36-32\lib\site-packages\rtlsdr\librtlsdr.py", line 50, in <module>
    librtlsdr = load_librtlsdr()
  File "C:\...\Programs\Python\Python36-32\lib\site-packages\rtlsdr\librtlsdr.py", line 45, in load_librtlsdr
    raise ImportError('Error loading librtlsdr. Make sure librtlsdr '\
ImportError: Error loading librtlsdr. Make sure librtlsdr (and all of its dependencies) are in your path

我试图轻轻地编辑模块并将其保存在与我的脚本相同的文件夹中,在这种情况下,我收到此错误:

OSError: Error code -12 when opening SDR (device index = 0)

我怎样才能让这个模块在 Windows 上工作?librtlsdr与我的加密狗一起使用,但显然不是通过python.

大卫

我也遇到了麻烦。就我而言,我是test.pypyrtlsdr.

如果您查看实际加载 DLL 的rtlsdr/librtlsdr.py,您可以看到:

driver_files += ['librtlsdr.so', 'rtlsdr/librtlsdr.so']
driver_files += ['rtlsdr.dll', 'librtlsdr.so']
driver_files += ['..//rtlsdr.dll', '..//librtlsdr.so']
driver_files += ['rtlsdr//rtlsdr.dll', 'rtlsdr//librtlsdr.so']
driver_files += [lambda : find_library('rtlsdr'), lambda : find_library('librtlsdr')]

find_library()只在系统 PATH 中查找:

def find_library(name):
    if name in ('c', 'm'):
        return find_msvcrt()
    # See MSDN for the REAL search order.
    for directory in os.environ['PATH'].split(os.pathsep):
        fname = os.path.join(directory, name)
        if os.path.isfile(fname):
            return fname
        if fname.lower().endswith(".dll"):
            continue
        fname = fname + ".dll"
        if os.path.isfile(fname):
            return fname
    return None

因此,除非它在系统 PATH 上,否则它必须命名为rtlsdr.dll. 因此,重命名后,我希望它可以与顶级目录中的 DLL 一起使用(由于条目driver_files += ['rtlsdr.dll', 'librtlsdr.so']),但它没有。只有相对路径(如driver_files += ['rtlsdr//rtlsdr.dll', rtlsdr//librtlsdr.so'])似乎有效。所以如果你想把它放在你正在执行的目录中,你必须将完全不合格的条目更改为driver_files += ['.//rtlsdr.dll', 'librtlsdr.so']. 或者,也可以将 DLL 放在rtlsdr文件夹中。我没有时间进一步挖掘,但我怀疑与 WIN32 LoadLibraryAPI(或用于将 DLL 加载到进程空间的任何东西)的调用方式有关,它是搜索规则。

rtl_test.exe开箱即用,因为它正在寻找librtlsdr.dll

dumpbin /dependents rtl_test.exe
Microsoft (R) COFF/PE Dumper Version 14.23.28106.4
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file rtl_test.exe

File Type: EXECUTABLE IMAGE

  Image has the following dependencies:

    KERNEL32.dll
    msvcrt.dll
    librtlsdr.dll

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章