导入相关模块,报错如下

File "/usr/local/python3/lib/python3.7/ssl.py", line 97, in <module>
    import _ssl             # if we can't import it, let the error propagate
ModuleNotFoundError: No module named '_ssl'

问题的原因是虽然mac系统已经装了openssl包及相关的头文件,但是默认python3.7的源码包中指定的ssl头文件目录不包含mac上openssl的路径

备注:mac os 没有openssl-devel这个安装包,内容都已经在openssl中了

[@localhost:openssl]$ brew link openssl --force
Warning: Refusing to link macOS-provided software: openssl
If you need to have openssl first in your PATH run:
  echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
 
For compilers to find openssl you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl/include"


centos7上安装openssl-devel后的路径是/usr/include/openssl,比如/usr/include/openssl/ssl.h,如下命令可查看,其实所谓的 devel 包, 无非就是些头文件. 所以理论上可以手动下载相关项目的源码, 然后编译的时候指定相关路径就好了.

rpm -ql openssl-devel-1.0.2k-16.el7_6.1.x86_64

网上的很多文章也是设置这个路径,比如 

https://www.jianshu.com/p/3ec24f563b81

https://techglimpse.com/install-python-openssl-support-tutorial/ 

http://www.shellsec.com/news/45412.html

但是其实问题的根本是我们要知道mac上openssl相关的头文件安装到了哪里,如下命令查看

[@localhost:Python-3.7.2]$ brew --prefix openssl
/usr/local/opt/openssl
[@localhost:Python-3.7.2]$

最终的解决方法是:

[@localhost:include]$ pwd
/usr/local/include
[@localhost:include]$ ln -s /usr/local/opt/openssl/include/openssl openssl

也不用修改源代码中的文件路径了~~~

很坑爹,花了一下午的时间捣鼓~~~




参考:https://blog.csdn.net/u011756766/article/details/56489420