首页 > 解决方案 > 在虚拟环境中使用 ctypes 导入 dll

问题描述

根据标题,我使用 ctypes 从 python 访问 .dll 文件。如果我从普通 shell 运行以下代码,一切正常:

import ctypes as ct
import os
path = '\\some_path\\file.dll'
print(os.path.isfile(path))
lib = ct.CDLL(path)

输出:

True

但是,如果我尝试从虚拟环境中运行它,相同的代码会给我输出 + 错误:

True
Traceback (most recent call last):
File ".\Test-c.py", line 4, in <module>
    lib = ct.CDLL(path)
  File "C:\Users\au684834\Miniconda3\envs\development\lib\ctypes\__init__.py", line 351, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] The specified module could not be found

阅读周围我找不到这个特定的问题,有人知道一个简单的解决方案吗?请注意,已找到该文件,因此路径可能不是问题。我必须在虚拟环境中运行它,因为这是对更大项目的补充。

非常感谢

编辑:修改路径以避免与 Windows 反斜杠问题混淆。我还添加os.path.isfile()以显示该文件存在并且已找到。

标签: pythondllctypes

解决方案


所以,事实证明问题不在于 ctypes、权限或类似的东西:问题在于虚拟环境。事实上,不仅我的环境存在问题,而且 miniconda 安装本身也存在问题。我无法重新安装环境,也无法更新 miniconda。我通过从头开始重新安装 miniconda 并重新创建环境来解决所有问题。现在上面的代码按预期工作。


推荐阅读