首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pyhive模块无法导入名称单元

Pyhive模块无法导入名称单元
EN

Stack Overflow用户
提问于 2017-06-25 09:04:53
回答 1查看 6K关注 0票数 2

我想用pyhive连接Python和蜂箱。我使用下面的python脚本在本地执行。

代码语言:javascript
复制
#!/usr/bin/env python
# coding: utf-8
from pyhive import hive
from TCLIService.ttypes import TOperationState
def mysql_connect(host, port, username):
 conn = hive.Connection(host=host, port=port, username=username)
 return conn.cursor()

cursor = mysql_connect("localhost", 50070, "hduser")
cursor.execute("show databases")
print_log(cursor)

我向位置/usr/local/lib/python2.7/dist-packages提供了pyhive,但是我最终得到了以下输出

代码语言:javascript
复制
vaibhav@vaibhav-Lenovo-G570:~/Desktop/Python/Automation$ ./pyhive_test.py
Traceback (most recent call last):
  File "./pyhive_test.py", line 9, in <module>
    cursor = mysql_connect("localhost", 50070, "hduser")
  File "./pyhive_test.py", line 6, in mysql_connect
    conn = hive.Connection(host=host, port=port, username=username)
  File "/usr/local/lib/python2.7/dist-packages/pyhive/hive.py", line 131, in __init__
    self._transport.open()
  File "/usr/local/lib/python2.7/dist-packages/thrift_sasl/__init__.py", line 80, in open
    status, payload = self._recv_sasl_message()
  File "/usr/local/lib/python2.7/dist-packages/thrift_sasl/__init__.py", line 101, in _recv_sasl_message
    payload = read_all_compat(self._trans, length)
  File "/usr/local/lib/python2.7/dist-packages/thrift_sasl/six.py", line 31, in <lambda>
    read_all_compat = lambda trans, sz: trans.readAll(sz)
  File "/home/vaibhav/.local/lib/python2.7/site-packages/thrift/transport/TTransport.py", line 60, in readAll
    chunk = self.read(sz - have)
  File "/home/vaibhav/.local/lib/python2.7/site-packages/thrift/transport/TSocket.py", line 132, in read
    message='TSocket read 0 bytes')
thrift.transport.TTransport.TTransportException: TSocket read 0 bytes

编辑 1.文件名从Pyhive更改为pyhive_test

  1. pyhive.py已从目录中删除

可能的解决方案尝试过:1.安装了python2.7和python3.4的两个版本。我卸载了Python3.4,但是文件夹似乎仍然存在于/usr/local/lib/中。我运行了下面的一些命令来检查我的python的安装位置和PYTHONPATH中的包。

代码语言:javascript
复制
vaibhav@vaibhav-Lenovo-G570:~$ which -a python
/usr/bin/python
vaibhav@vaibhav-Lenovo-G570:~$ python -c "import sys, pprint; pprint.pprint(sys.path)"
['',
 '/home/vaibhav',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/home/vaibhav/.local/lib/python2.7/site-packages',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PILcompat',
 '/usr/lib/python2.7/dist-packages/gtk-2.0',
 '/usr/lib/pymodules/python2.7',
 '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
  1. 从他们提到的这里链接中获得引用,以便在虚拟环境中使用或使用干净的anaconda。没有使用它们中的任何一个,也不知道它将如何影响已经存在的配置。

3.我使用sudo安装了Pyhive,所以我在这个链接之后更改了权限,但仍然遇到了同样的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-25 09:12:33

您要启动的文件名为pyhive.py

当你做的时候

代码语言:javascript
复制
from pyhive import hive

pyhive.py内部,它将尝试从(您的模块)导入hive,而不是从pyhive库导入。

请将正在启动的文件命名为其他文件,并避免使用现有模块/库的名称。

来自文档

当导入名为垃圾邮件的模块时,解释器首先搜索具有该名称的内置模块。如果找不到,则在变量spam.py提供的目录列表中搜索名为sys.path的文件。从以下位置初始化sys.path:

  • 包含输入脚本(或当前目录)的目录。
  • PYTHONPATH (与shell变量路径具有相同语法的目录名称列表)。
  • 与安装相关的默认设置。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44744845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档