在子目录中添加tweepy时导入错误

时间:2011-03-19 04:19:00

标签: python import importerror 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 个答案:

答案 0 :(得分:3)

看起来tweepy希望在Python路径上 - 它尝试加载tweepy.models。但是,由于您将tweepy放在子目录中,因此模型模块现在位于socialmedia.twitter.tweepy.models

您必须将socialmedia/twitter/添加到Python路径,或者您必须更改tweepy的导入以补偿新的包结构。两种解决方案都不是很好。前者引入了必须设置的特殊配置。后者将要求您在更新tweepy代码时修复导入(因为更新的代码将包含原始的tweepy.whatever导入)。这就是为什么像你一样移动包裹通常不是一个好主意。相反,只需正常安装(运行setup.py或easy_install,或您喜欢的任何方法),然后在使用该包的代码中导入它。

除非你绝对必须移动你所描述的目录结构,否则我会正常安装软件包。你正在努力做一场艰苦的战斗。否则,