【问题标题】:OSError when trying to use a C-based library in Python with ctypes (Windows)尝试在带有 ctypes 的 Python 中使用基于 C 的库时出现 OSError (Windows)
【发布时间】: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


【解决方案1】:

这可能是文件访问权限错误。您可以通过创建一个新的虚拟环境或卸载并重新安装 Python 来解决它;见this post。

【讨论】:

    猜你喜欢
    • 2016-02-05
    • 1970-01-01
    • 2018-03-19
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    相关资源
    最近更新 更多