从批处理文件启动时出现“ImportError: DLL load failed while importing _ssl”

"ImportError: DLL load failed while importing _ssl" when launching from batch file

提问人:Max Mustermann 提问时间:12/30/2020 更新时间:12/30/2020 访问量:5587

问:

我想通过 python 脚本发送邮件并使用批处理文件启动脚本。从批处理文件启动时出现错误“ImportError:导入_ssl时DLL加载失败”,当直接从我的spyder编辑器运行python脚本时,它按预期工作。

我正在使用 Windows 10 和新安装的带有 python 3.8 的 anaconda 环境,该环境安装在“C:\Users\Max”中。

我的批处理文件如下所示:

"C:\Users\Max\anaconda3\python.exe" "C:\Users\Max\Documents\Python Scripts\script.py" 

我的 Python Skript 看起来像这样:

import smtplib, ssl
port = 465  
context = ssl.create_default_context()
with smtplib.SMTP_SSL("smtp.gmail.com", port) as server: 
   server.login("address[email protected]", "password")
   server.sendmail("[email protected]", "[email protected]", "message")

为什么从批处理文件调用脚本时行为不同,我该如何解决此问题?

python 批处理文件 ssl anaconda smtp

评论

1赞 Mofi 12/30/2020
你的问题的答案是:环境不同。这意味着环境变量列表是不同的,这就是为什么在一种情况下可以找到脚本导入的所有DLL文件,而在另一种情况下,由于环境不同而找不到DLL。请阅读有关导入系统的 Python 文档以及此文档页面中引用的 sys.pathPYTHONPATHPython.exe
2赞 Magoo 12/30/2020
问题很可能是当前目录是两者之间的差异。在您发布的那行之前尝试单独的一行。如果显示的目录不同,请将该行替换为 - 如果驱动器名称不同,则将其前面替换为 where is the drivethatworks。echo %cd%&pauseechocd thedirectorythatworksX:X

答:

3赞 Max Mustermann 12/30/2020 #1

好的,我明白了!

我首先必须将“C:\Users\Max\anaconda3\condabin”放在我的 PATH 中,以便在我的 Windows cmd 中使用 conda 命令,然后将我的批处理文件修改为

call activate base
"C:\Users\Max\anaconda3\python.exe" "C:\Users\Max\Documents\Python Scripts\script.py" 
call conda deactivate

评论

1赞 Magoo 12/30/2020
问题解决了,似乎 - 并且发布了明确的解决方案 - 非常好!