无法运行已安装的库

时间:2016-01-13 09:53:16

标签: python python-import

当我这样做时:

import XYZ
XYZ.boo(xyz)

XYZ是一个库,boo是该库的函数,xyz是我传递给函数的参数。
我收到以

结尾的错误
AttributeError: module 'XYZ' has no attribute 'boo'

发生了什么事?

注意:对于同一主题但隐含不同库的几个问题,这应该是canonical answer

2 个答案:

答案 0 :(得分:1)

仔细命名您的源文件

确保当前目录中没有Python脚本,模块或软件包与您要导入的内置或第三方模块具有相同的名称。真的,最好完全避免名称冲突。

假设你想尝试使用Python的turtle模块。您决定将脚本命名为 turtle.py ,并写下:

# turtle.py
import turtle

def move_turtle(num):
    turtle.forward(num)

move_turtle(1)

运行时,会收到错误:

Traceback (most recent call last):
  File "./turtle.py", line 2, in <module>
    import turtle
  File "/path/to/your/directory/turtle.py", line 7, in <module>
    move_turtle(1)
  File "/path/to/your/directory/turtle.py", line 5, in move_turtle
    turtle.forward(num)
AttributeError: module 'turtle' has no attribute 'forward'

问题是您的 turtle.py 干扰了内置 turtle 模块的导入。语句import turtle实际上导入了本地 turtle.py 脚本而不是内置脚本。

有一种简单的方法可以验证这是问题所在。在回溯中,提到的最后一个文件是/path/to/your/directory/turtle.py",表示您没有导入内置的 turtle 模块。内置的乌龟应位于Linux上类似于/usr/lib/pythonX.Y/turtle.py的位置,或Windows上的C:\PythonXY\Lib\turtle.py

要解决此问题,请将脚本重命名为其他内容,例如myturtle.py

答案 1 :(得分:0)

确保使用具有此类属性的库版本。 如果导入正确,您可以使用dir(XYZ)探索属性 否则,此错误是由于意外导入造成的。

模块python正在导入 XYZ是您在同一文件夹或%PATH中创建的XYZ.py而不是所需的库。或者它是您调用库的文件。

您应重命名该模块,以避免与现有软件包发生冲突并删除*.pyc个文件。您可以重命名为XYZ_test.py或任何其他名称,以避免与已安装的库冲突。

然后你应该能够做到:

import XYZ
foo = XYZ.boo