2013-01-01 123 views
16

我已经在我的Ubuntu盒子上安装了python 2.7.2的最新pySerial,并且它对大多数事情都很好,但是每当我尝试导入'tools'包时,它都会说它可以找不到'工具'。 documentation for pySerial明确引用了这个'工具'包。pyserial:没有模块命名的工具

>>> from serial import tools 
Traceback (most recent call last): 
    File "<pyshell#30>", line 1, in <module> 
    import serial.tools 
ImportError: No module named tools 

,当我:

>>> serial.VERSION 
'2.5' 

这是根据Source Forge

那么,为什么我不能去pySerial的 '工具' 包中的最新版本?

+0

嗯,这是尴尬的! dir()没有列出子包,所以即使它存在,唯一可以告诉的方法就是试图导入它。好消息是,这个问题仍然有效,因为当我尝试导入它时确实会引发错误。 – charmoniumQ

回答

19

使用pip安装pyserial。首先安装PIP:

sudo apt-get install python-pip 

是安装pyserial后:

sudo pip install pyserial 
+7

大概你对我来说意味着'sudo pip install pyserial --upgrade' – charmoniumQ

+0

太棒了,谢谢!在我看到这个答案之前,我尝试了一切。 –

+0

有没有办法做到这一点,但与Windows相同的东西?谢谢。 –

-1

你必须调用模块的功能是这样的:

from serials import tools 

例如:如果我想从math模块调用sqrt功能,我会做:

from math import sqrt 

import math.sqrt **is wrong.** 
+0

工具不是一个函数,它是一个包,并且可以像Sam正在尝试的那样导入。该包只包含模块和一个空的'__init __。py',所以他必须导入更多的东西来使用任何东西,但它应该永远不会引发异常,只要ubuntu包与上游匹配(其实不然,请参阅我的答案) – SingleNegationElimination

+0

使用pip安装pyserial。首先安装python pip:sudo apt-get install python-pip,然后安装pyserial:sudo pip pyserial – user1881957

1

它看起来像ubuntu软件包与上游不太匹配。比较官方pySerial包在他们的SVN:

http://pyserial.svn.sourceforge.net/viewvc/pyserial/trunk/pyserial/serial/

到Ubuntu的软件包在启动板:

http://bazaar.launchpad.net/~ubuntu-branches/ubuntu/raring/pyserial/raring/files/head:/serial/

工具缺少那里。它看起来好像保留了miniterm.py脚本,并将其安装在某处;尽管如此,我还不太了解deb包装以了解在哪里。

+0

你可以详细介绍一下我将如何卸载Ubuntu的repo版本,并在它的位置安装上游sourceforge版? – charmoniumQ

1

我来到这里是因为我有同样的问题。 奇怪的是,

import serial 

工作,但

from serial.tools import list_ports 

没有。

原来我把这个脚本命名为“serial.py”。重命名后,一切正常。

0

是,使用Python-PIP安装,,,然后,,,升级,,,串行版本将是2.7 ... ...它workes

0

以防万一,这样做 “PIP安装--upgrade”不起作用(就像发生在我身上一样),在Linux中你可以检查你是否有一个串行包,在/usr/lib/python2.7/dist-packages,新的串行打包一个pip安装到/usr/**local**/lib/python2.7/dist-packages/serial,出于某种原因usr/lib/python2.7/有一个优先和模块工具在该版本的pyserial中不存在。更改名称或删除目录可解决问题。

1

site-packages文件夹中的pyserial-2.4-py2.7.egg被导入而不是从site-packages文件夹中的串行中导入。一旦我重命名这个文件,以便它不再从这个文件导入它工作正常。你可以很容易地通过这样做来调试

import serial 
serial._ _path_ _ 

查看串口是从哪里导入的。