我在 Windows 上使用 impyla 库时遇到问题
我安装了impyla库
pip 安装 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)`
Traceback (most recent call last): ...
File "D:/test/test.py", line 14, in from impala.dbapi import connect
File "C:\Anaconda3\lib\site-packages\impala\dbapi.py", line 28, in import impala.hiveserver2 as hs2
File "C:\Anaconda3\lib\site-packages\impala\hiveserver2.py", line 32, in from impala._thrift_api import (
File "C:\Anaconda3\lib\site-packages\impala_thrift_api.py", line 73, in include_dirs=[thrift_dir])
File "C:\Anaconda3\lib\site-packages\thriftpy\parser__init__.py", line 30, in load include_dir=include_dir)
File "C:\Anaconda3\lib\site-packages\thriftpy\parser\parser.py", line 496, in parse url_scheme))
thriftpy.parser.exc.ThriftParserError: ThriftPy does not support generating module with path in protocol 'c'
当我尝试打印 include_dir 时,它是
D:/test\thrift
我根本无法导入库
帮助我
最佳答案
我在 thriftpy 上遇到了同样的问题,windows 上的问题是绝对路径就像 C:\foo\bar.thrift
但是,thrift 库解析文件的方式,它检测到 C: 就好像它是一个类似 http: 或 https:的协议(protocol)一样强>
解决方法非常简单,您只需使用像 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 page 上作为补丁提交了相同的更改。 ...也许它会被纳入下一个版本的节俭。
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:修复已合并。
关于python - 在 Windows 上导入 Impyla 库时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39220102/