在子目录中添加tweepy时出现导入错误
我正在尝试把tweepy放在一个子目录里。但是我无法让导入功能正常工作。
情况是这样的:
import socialmedia
import tweepy
import logging
# This file is in socialmedia / twitter / __init__.py
# Tweepy is located in socialmedia / twitter / tweepy / __init__.py
# I am getting this error:
"""
Traceback (most recent call last):
File "/home/samos/workspace/socialmedia-api/src/test/test.py", line 1, in <module>
from socialmedia.twitter import TwitterAPI
File "/home/samos/workspace/socialmedia-api/src/socialmedia/twitter/__init__.py", line 5, in <module>
from socialmedia.twitter import tweepy
File "/home/samos/workspace/socialmedia-api/src/socialmedia/twitter/tweepy/__init__.py", line 12, in <module>
from tweepy.models import Status, User, DirectMessage, Friendship, SavedSearch, SearchResult, ModelFactory
ImportError: No module named tweepy.models
"""
我已经尝试过不使用init.py,直接用twitter.py,所以这似乎不是问题所在。看起来tweepy的导入是正常的,但tweepy内部的导入却不太顺利。
1 个回答
3
看起来tweepy这个库需要在Python的路径下才能正常工作——它会尝试加载 tweepy.models
。但是,因为你把tweepy放在了一个子目录里,所以现在这个模型模块的位置变成了 socialmedia.twitter.tweepy.models
。
你要么需要把 socialmedia/twitter/
加入到Python的路径中,要么就得修改tweepy的导入方式,以适应新的包结构。这两种方法都不是很好。前一种方法需要你进行特别的配置,而后一种方法则意味着每次tweepy的代码更新时,你都得去修正导入的部分(因为更新后的代码会包含原来的 tweepy.whatever
导入)。这就是为什么一般来说,像你这样移动包是不太好的主意。最好的做法是正常安装它(运行setup.py或easy_install,或者你喜欢的其他方法),然后在使用这个包的代码中直接导入它。
除非你真的必须要有你描述的目录结构,否则我建议你还是正常安装包。否则你是在和自己过不去。