在执行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文档