goagent 升级到3.2.3后,总提示报错 'module' has no attribute 'sslwrap'
。Google 后发现,OS X 10.10 把 Python 升级到了2.7.9,而该版本中移除了 sslwrap
方法,所以报错。因此该问题并非仅针对 Mac,只不过 Win 下 Python 升级不频繁,很少出现该问题。
解决方法为修改 /Library/Python/2.7/site-packages/gevent/ssl.py
文件,添加如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import inspect def new_sslwrap(sock, server_side=False, keyfile=None, certfile=None, cert_reqs=__ssl__.CERT_NONE, ssl_version=__ssl__.PROTOCOL_SSLv23, ca_certs=None, ciphers=None): context = __ssl__.SSLContext(ssl_version) context.verify_mode = cert_reqs or __ssl__.CERT_NONE if ca_certs: context.load_verify_locations(ca_certs) if certfile: context.load_cert_chain(certfile, keyfile) if ciphers: context.set_ciphers(ciphers) caller_self = inspect.currentframe().f_back.f_locals['self'] return context._wrap_socket(sock, server_side=server_side, ssl_sock=caller_self) if not hasattr(_ssl, 'sslwrap'): _ssl.sslwrap = new_sslwrap |
问题解决。还遇到过的其他问题:
-
执行
sudo launchctl load /Library/LaunchDaemons/org.goagent.macos.plist
没有效果,原因往往在于该配置文件内容有误。比如 Python 执行程序路径写错,修改后重新执行上述命令即可。 -
上述配置文件中python路径为
/usr/bin/python
,是系统自带python所在路径。而自己通过brew安装的python往往链接到/usr/local/bin/python
。二者版本可能不同,比如系统自带为2.7.6,brew安装为2.7.9。修改路径为brew安装的python路径,再确定安装了pyopenssl,重启goagent服务。
注:转载注明出处并联系作者,本文链接:https://nodefe.com/goagent-sslwrap-fix/