我在windows中构建uhd(msvc 14.2,boost 1.72.0(。构建工作正常。我可以运行所有的命令行实用程序(例如rx_samples_from_file(而不会出错。
但在python中,我无法导入uhd:
>>> import sys
>>> sys.path.append('C:\Program Files (x86)\UHD\bin')
>>> sys.path.append('C:\Program Files (x86)\UHD\lib')
>>> sys.path.append('C:\Program Files (x86)\UHD\lib\site-packages')
>>> sys.path.append('C:\local\boost_1_72_0\lib64-msvc-14.2')
>>> sys.path.append('C:\lib\libusb-1.0.22\MS64\dll')
>>> import uhd
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:Program Files (x86)UHDlibsite-packagesuhd__init__.py", line 10, in <module>
from . import types
File "C:Program Files (x86)UHDlibsite-packagesuhdtypes.py", line 10, in <module>
from . import libpyuhd as lib
ImportError: DLL load failed while importing libpyuhd: The specified module could not be found.
有没有任何东西可以告诉哪个DLL没有加载?我试着在libpyuhd上使用依赖助行器,但它并没有显示任何缺失。
我也遇到了类似的问题,因为我可以通过命令行实用程序或GnuRadio Companion访问硬件,但不能直接通过python访问(尽管GRC只使用相同的python解释器启动python文件(。我一直有这些DLL问题。
事实证明,sys.path
中的位置被python用来寻找模块,但如果模块本身依赖于.dll文件,那么它们就会使用环境变量路径中的位置。我想DLL的获取是由操作系统直接处理的,而不是由Python处理的。
您可以使用os.environ['PATH']
在Python中查看位置。它应该与在windows命令行中键入PATH
的列表相同。
我解决了这个问题,在运行python之前,我创建了一个批处理文件,将目录添加到路径中。在您的情况下,您可以尝试将目录添加到其中(您必须查看缺少哪些目录(:
@ECHO off
SET PATH=%PATH%;C:\Program Files (x86)\UHD\bin;C:\Program Files (x86)\UHD\lib;C:\lib\libusb-1.0.22\MS64\dll
python your_python_script.py
路径将被临时更改(不要忘记%PATH%
,这样它会将新文件夹附加到其中(,一旦您退出批处理文件,它就会恢复到默认值。
您也可以通过转到"系统属性"来永久更改路径→先进的→环境变量。