1

我在 Windows 上使用 impyla 库时遇到问题

我安装了 impyla 库

pip install impyla

当我尝试在 python 代码中导入 impyla 库时发生错误

from impala.dbapi import connect  # error occured
from impala.util import as_pandas
conn = connect(host='10.xx.xx.xx', database='xx_xx', port=21050)`

回溯(最近一次通话最后一次):...

文件“D:/test/test.py”,第 14 行, 从 impala.dbapi 导入连接

文件“C:\Anaconda3\lib\site-packages\impala\dbapi.py”,第 28 行,在 import impala.hiveserver2 as hs2

文件“C:\Anaconda3\lib\site-packages\impala\hiveserver2.py”,第 32 行, 从 impala._thrift_api 导入(

文件“C:\Anaconda3\lib\site-packages\impala_thrift_api.py”,第 73 行,在 include_dirs=[thrift_dir])

文件“C:\Anaconda3\lib\site-packages\thriftpy\parser__init__.py”,第 30 行,加载 include_dir=include_dir)

文件“C:\Anaconda3\lib\site-packages\thriftpy\parser\parser.py”,第 496 行,解析 url_scheme))

thriftpy.parser.exc.ThriftParserError:ThriftPy 不支持使用协议“c”中的路径生成模块

当我尝试打印 include_dir 时,它是

D:/test\thrift

我根本无法导入 libray

帮我

4

2 回答 2

8

我对 thriftpy 有同样的问题,Windows 上的问题是绝对路径就像C:\foo\bar.thrift

但是,thrift 库解析文件的方式,它检测C:就好像它是http:https 之类的协议:

它很容易解决,您只需使用像path[2:]这样的切片从路径中删除前两个字符

只需在您调用thriftpy.load或在库文件中切片

File "C:\Anaconda3\lib\site-packages\thriftpy\parser__init__.py", line 30

path = "C:\foo\bar.thrift"
thrift.load(path[2:], module_name, include_dirs=include_dirs,
                   include_dir=include_dir)

或者

你可以更深入一点,做出与我已经在github 页面上作为补丁提交的相同的更改......也许它将被合并到下一个版本的 thrift 中。

File "C:\Anaconda3\lib\site-packages\thriftpy\parser\parser.py", line 488

-    if url_scheme == '':
+    if len(url_scheme) <= 1:

我对为什么此更改有效的理由是在拉取请求中。如果它被合并,那么您在更新库时不必担心再次进行相同的更改。如果不是,那么只需再次剥离这两个字符。

更新:

  • Thriftpy 版本 1:解析器修复现在位于第 547 行:elif len(url_scheme) <= 1:

  • Thriftpy 版本 2:该修复程序已被合并。

于 2016-09-02T11:40:42.370 回答
2

我在 Windows 上的Anaconda Python 3.6 发行版上遇到了与 impyla 相同的错误。我没有使用 pip 安装,而是使用以下命令使其工作:

conda install -c anaconda impyla

https://anaconda.org/anaconda/impyla

于 2017-09-26T16:13:55.013 回答