2017-05-09 48 views
0

我一直在尝试使用python的elasticsearch库连接到我的ElasticSearch主机。 因此,代码看起来像:实例化Elasticsearch客户端仅在使用python3时失败

client = Elasticsearch(
     ["https://my-machine.io:9200"], 
     http_auth=("user", "password") 
    ) 

现在的问题是,当我使用Python 2.7解释该指令是唯一的工作,而它无法使用python 3.6,生成以下错误:

File "/usr/local/lib/python3.6/site-packages/elasticsearch/client/__init__.py", line 171, in __init__ 
    self.transport = transport_class(_normalize_hosts(hosts), **kwargs) 
    File "/usr/local/lib/python3.6/site-packages/elasticsearch/transport.py", line 108, in __init__ 
    self.set_connections(hosts) 
    File "/usr/local/lib/python3.6/site-packages/elasticsearch/transport.py", line 163, in set_connections 
    connections = list(zip(connections, hosts)) 
    File "/usr/local/lib/python3.6/site-packages/elasticsearch/transport.py", line 160, in _create_connection 
    return self.connection_class(**kwargs) 
    File "/usr/local/lib/python3.6/site-packages/elasticsearch/connection/http_urllib3.py", line 78, in __init__ 
    raise ImproperlyConfigured("Root certificates are missing for certificate " 
elasticsearch.exceptions.ImproperlyConfigured: Root certificates are missing for certificate validation. Either pass them in using the ca_certs parameter or install certifi to use it automatically. 

Python版本:

$ python2 --version 
Python 2.7.13 
$ python3 --version 
Python 3.6.1 

在这两种情况下,我使用了 “elasticsearch” 包,版本5.3.0

我一直没能找到任何文件,建议根据所使用的python版本不同的行为。 任何人都可以解释为什么会发生这种情况?

+0

在每种情况下您使用的是哪个版本的elasticsearch模块? –

+0

这可能有所帮助:https://access.redhat.com/articles/2039753 – Val

+0

哪个版本的python 2可以使用? (因为urllib的默认机制现在默认检查证书)。在实例化你的客户端时,你是否尝试过使用参数'verify_certs = False'? – Adonis

回答

3

看起来问题出在您的ssl设置中,请确保您已安装certifi这将提供所需的根证书。