python - 如何诊断 ImportError : DLL load failed when loading native Windows python modules in a virtualenv?

标签 python virtualenv

我正在使用 Python 3.x 和一个 virtualenv——不是 conda,只是一个普通的 virtualenv。 我激活 venv 并运行 pip install opencv-python。然而, import cv2 给我一个 DLL not found 错误:

(tf) C:\>python
Python 3.6.2 (v3.6.2:5fd33b5, Jul  8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\src\venv\tf\lib\site-packages\cv2\__init__.py", line 4, in <module>
    from .cv2 import *
ImportError: DLL load failed: The specified module could not be found.
>>>

这是一个 virtualenv 错误吗?我如何确定缺少哪个模块/dll?

最佳答案

一般解决“找不到模块”错误

尝试使用 Microsoft 的 Dependency Walker 或 lucasg 的 Dependencies在正在加载的模块上。请务必从 virtualenv 的命令提示符运行 Dependencies.exe,以便它获取修改后的 PATH。

导入行是 from .cv2 import *,所以被加载的模块与 __init__.py 在同一目录中(这是前导 ) 并命名为 cv2-SOMETHING.pyd(这就是 native Python 模块的样子)。将该文件加载到 Dependencies.exe 中,它将向您显示 Windows 需要但找不到的 DLL。

在这种情况下,DLL 是 Python3.dll。为什么不见了?因为a virtualenv bug这是固定的,但还没有进入发布 -- 已经一年多没有发布了。

特别是关于解决这个问题

github 问题建议修复:使用 venv。

或者,您可以手动将丢失的 python3.dll 复制到您的 virtualenv 中。您必须为您创建的每个 virtualenv 执行此操作。

copy "c:\Program Files\Python36\python3.dll" "c:\src\venv\tf\Scripts\"

关于python - 如何诊断 ImportError : DLL load failed when loading native Windows python modules in a virtualenv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48352027/

相关文章:

python - 如何告诉子进程回答 "y"到命令行问题?

python - "sorted 1-d iterator"基于 "2-d iterator"(迭代器的笛卡尔积)

python - Discord 机器人无法使用 Python 在 Heroku 上运行

python - 无法在 Virtualenv 中 pip 安装 MySQL-python

python - pycharm 中 virtualenv 的异常文件结构?

python - 在 Pandas 中使用 groupby 时检查某些列的值

python - 需要 F 字符串列表理解示例

python - 无法使用 '...\python.exe' 创建进程 |虚拟环境错误

python - virtualenvwrapper:如何更新项目路径?

python - 如何在 Virtualenv 的解释器启动时执行 Python 代码?