【发布时间】:2021-11-10 22:03:01
【问题描述】:
我目前正在尝试将用 C 编写的库与我的 Python 代码一起使用,但我并没有取得太大的成功。我目前使用的是 Windows,并且已经使用 Cygwin 下载、保存并安装了库(链接如下)到我的项目附近的目录中。
到目前为止,我不确定您是如何在 Python 代码中加载它的。我按照此链接中的说明进行操作:https://github.com/xiph/rnnoise/issues/69 但将库路径替换为相对路径并将库保存在我的项目目录中。这是我的代码,这是返回错误
import wave
import os,sys
import ctypes
import contextlib
import numpy as np
from ctypes import util
from scipy.io import wavfile
from pydub import AudioSegment
lib_path = "rnnoise"
lib = ctypes.cdll.LoadLibrary(lib_path)
这是指令中的版本:
import wave
import os,sys
import ctypes
import contextlib
import numpy as np
from ctypes import util
from scipy.io import wavfile
from pydub import AudioSegment
lib_path = util.find_library("rnnoise")
if (not("/" in lib_path)):
lib_path = (os.popen('ldconfig -p | grep '+lib_path).read().split('\n')[0].strip().split(" ")[-1] or ("/usr/local/lib/"+lib_path))
lib = ctypes.cdll.LoadLibrary(lib_path)
Traceback (most recent call last):
File "c:/Users/duyba/Documents/CET/Project/vadtest/noisetest.py", line 14, in <module>
lib = ctypes.cdll.LoadLibrary(lib_path)
File "C:\Users\duyba\anaconda3\lib\ctypes\__init__.py", line 459, in LoadLibrary
return self._dlltype(name)
File "C:\Users\duyba\anaconda3\lib\ctypes\__init__.py", line 381, in __init__
self._handle = _dlopen(self._name, mode)
OSError: [WinError 1920] The file cannot be accessed by the system
我对指令版本的印象是他们试图在 Linux 中定位库,所以我只是将库复制到项目文件夹中,不知道一旦找到库他们要加载什么。另外,由于我在 Windows 中下载并安装了这个库,我认为这里可能存在一些环境路径问题。
图书馆:https://github.com/xiph/rnnoise。
谢谢。
【问题讨论】:
-
您尝试加载的文件是什么?乍一看,这似乎是为 Nix 准备的。
-
这也是我的问题:我不确定我要加载什么文件。我刚刚使用说明中的版本更新了问题。基本上,我对代码的印象是他们只是试图定位库,但我不知道他们在找到它后究竟要加载什么。 @CristiFati
标签: python c windows dll ctype