当前位置: 代码迷 >> 综合 >> python from skimage.measure import compare_ssim, DLL load failed: 找不到指定的程序
  详细解决方案

python from skimage.measure import compare_ssim, DLL load failed: 找不到指定的程序

热度:32   发布时间:2024-01-29 05:37:19.0

在执行vscode中 按F5调试python脚本时报以下错误
Exception has occurred: ImportError DLL load failed: 找不到指定的程序。 File "F:\Github\ImageDiff\PythonDemo\main.py", line 3, in <module> from skimage.measure import compare_ssim
在这里插入图片描述
但是检查python包发现其实 skimage(scikit-image)包是存在的,vscode左下角的python解释器用的也是选择的正确的conda环境的解释器,这就令人疑惑了

解决历程

vscode中,我设置的默认命令行终端(terminal)是 powershell, 发现在执行python脚本时,vscode虽然会先执行一条指令

  • conda activate base

但是其实 terminal中 命令行前面还是
在这里插入图片描述
而激活了conda环境的terminal中,应该是
在这里插入图片描述
前面应该会有个环境(base)的标识的,说明conda的环境没有正常激活
尝试在cmd

  • conda activate base
  • python main.py

发现可以正常执行,基本确定是powershell自身有特殊配置导致 conda activate base命令执行失败了
百度发现 解决Win10 PowerShell无法激活Anaconda环境的问题这篇文章的作者有解决方案(执行过程中会报错,可以接着往下看)

方便阅读,贴一下该作者的内容

Conda版本低于4.6

解决方法如下:

  • 用Win + X 组合键调出PowerShell 管理员模式;
  • 输入命令conda install -n root -c pscondaenvs pscondaenvs安装PSCondaEnvs包;
  • 输入命令Set-ExecutionPolicy RemoteSigned在出现选项后输入Y回车,更改PowerShell 的安全策略。
  • 在PowerShell中激活和退出环境的命令分别为activate 环境名和deactivate,注意:需要去掉原命令中开头的conda,否则也不会成功。

Conda版本大于等于4.6

  • 解决方法如下:
  • 用Win + X 组合键调出PowerShell 管理员模式;
  • 输入命令conda init powershell;
  • 关闭当前powershell窗口,重新打开一个powershell窗口输入conda activate 环境名测试。

我安装的 anaconda是4.8版本的,执行 conda init powershell时报错
无法加载文件 C:\Users\lenovo\Documents\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。 所在位置 行:1 字符: 3 'C:\Users\lenovo\Documents\WindowsPowerShell\profile.ps1'

搜了一下发现是因为powershell的安全策略问题,默认禁止执行任何powershell脚本
参考MSDN文档

Windows PowerShell 执行策略如下所示:
默认执行策略为“Restricted”。

RESTRICTED

Windows 8、Windows Server 2012 和 Windows 8.1 中的默认执行策略。

  • 允许单独的命令,但不会运行脚本。
  • 阻止所有脚本文件的运行,包括格式设置文件和配置文件 (.ps1xml)、模块脚本文件 (.psm1) 和 Windows PowerShell 配置文件 (.ps1)。

为了能正常在本地计算机执行脚本,可以把安全策略改成 REMOTESIGNED,这样不用担心未知脚本的攻击,也可以执行本地安全的脚本

REMOTESIGNED

  • 脚本可以运行。这是 Windows Server 2012 R2 中的默认执行策略。
  • 要求从 Internet 下载的脚本和配置文件(包括电子邮件和即时消息程序)具有受信任的发布者的数字签名。
  • 不要求你在本地计算机上编写的脚本(不是从 Internet 下载的)具有数字签名。
  • 如果脚本已被取消阻止(比如通过使用 Unblock-File cmdlet),则运行从 Internet 下载但未签名的脚本。
  • 存在运行来自 Internet 之外的源的未签名脚本和已签名但却是恶意的脚本的风险。

使用管理员权限打开powershell

  • Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

然后就可以了,打开一个新的powershell,就可以使用 conda activate命令了(参考的博客中说要去掉conda,但是我使用的时候是不能去掉的)

回到vscode,关闭现有terminal,重新开启一个terminal,再按F5,就可以愉快的调试了

强调要重新打开一个terminal的原因是,terminal本身不会自动更新外部配置的环境,重新打开才能加载最新的配置

参考文档

[1] 解决Win10 PowerShell无法激活Anaconda环境的问题
[2] MSDN文档

  相关解决方案