anaconda3 的 pip 及与 ssl 相关的操作都报错
pip 报错 openssl 不存在
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
smtp 报错 ssl 导入失败
File "C:\Users\${user}\.virtualenvs\mysite\lib\site-packages\django\core\mail\backends\smtp.py", line 4, in <module>
import ssl
File "F:\anaconda3\lib\ssl.py", line 98, in <module>
import _ssl # if we can't import it, let the error propagate
ImportError: DLL load failed: 找不到指定的模块。
我这里虽然用了virtualenv
,但是真实的安装目录上pip
也是报错的。
搜索了一些方案都不对。
解决
后来发现,在 anaconda3
的根目录下时如 F:\anaconda3
导入 ssl 就没问题。
于是在 C:\Users\${user}\.virtualenvs\mysite\Scripts\activate.bat
虚拟环境的激活文件中添加了 F:\anaconda3
这个路径
# 第39行
set "PATH=%VIRTUAL_ENV%\Scripts;%PATH%"
# 改为
set "PATH=%VIRTUAL_ENV%\Scripts;F:\anaconda3;%PATH%"
重新激活 venv
环境就OK了。
新的错误
换了新的Anaconda3-2021.05-Windows-x86_64.exe
后,这个办法也不管用了。linux上是没发现这个问题的。
原因仍然是环境变量的问题,在Lib\ssl.py
中添加如下代码:
import os
print(os.environ)
运行conda
命令,可以看到相关的环境变量。把PATH
相关的加到自己虚拟环境的activate.bat
即可正常使用pip
。
可能有其他更优雅的解决办法,但是尚未发现。