api = twitter.Api() 属性错误:'module' 对象没有属性 'Api

21 投票
7 回答
39372 浏览
提问于 2025-04-17 13:04

我一直在尝试写一个简单的提及抓取工具,想要开始使用Twitter的API。不过,在初始化这个API的时候遇到了一些困难。

我在Arch Linux上运行Python 2,通过easy_install安装了Twitter库,也尝试从源代码构建并通过pip安装,但这些方法似乎都不管用。

zergling :: ~/dev/kritter » python2
Python 2.7.2 (default, Jan 31 2012, 13:26:35) 
[GCC 4.6.2 20120120 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import twitter
>>> api = twitter.Api()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'Api'

不过,Twitter的文档是有的。我不知道自己哪里出错了,希望你们能帮帮我。

更新:我尝试用twitter.api()代替twitter.Api(),结果出现了以下错误: Traceback (most recent call last): File "main.py", line 8, in api = twitter.api() TypeError: 'module' object is not callable

附加信息:

>>> print dir(twitter)
['NoAuth', 'OAuth', 'Twitter', 'TwitterError', 'TwitterHTTPError', 'TwitterResponse',  'TwitterStream', 'UserPassAuth', '__all__', '__builtins__', '__doc__', '__file__',  '__name__', '__package__', '__path__', 'api', 'auth', 'oauth', 'read_token_file', 'stream', 'twitter_globals', 'write_token_file']
>>> print twitter.__path__
['/usr/lib/python2.7/site-packages/twitter-1.7.2-py2.7.egg/twitter']

7 个回答

15

我遇到了同样的错误,因为我的 Python 文件叫做 twitter.py。这个文件里面包含了:

import twitter
api = twitter.Api (consumer_key=...

我把文件改名为 twitterdata.py,删除了 twitter.pyc 文件,然后就正常运行了。

16

我在以下网站找到了这个问题的解决办法

[http://himanen.info/solved-attributeerror-module-object-has-no-attribute-api/][1]

这里有两个Python库发生了冲突:一个是twitter库,另一个是python-twitter库。解决办法其实很简单:

pip uninstall twitter

然后我确保python-twitter库确实安装好了:

pip install python-twitter

谢谢你,himanen,这个方法对我有效

19

我觉得你安装了一个Twitter的库,但在看另一个的文档。也就是说,python-1.7.2这个项目来自于https://github.com/sixohsix/twitter,而你却在查看http://code.google.com/p/python-twitter/的文档。这两个是不同的哦 :)

所以对于你安装的那个库,如果你查看源代码,会发现有一个流示例,还有其他各种示例在pydoc里:

  from twitter import Twitter
  # ...
  twitter = Twitter(
      auth=OAuth(token, token_key, con_secret, con_secret_key)))

  # Get the public timeline
  twitter.statuses.public_timeline()

撰写回答