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

0 投票
1 回答
2319 浏览
提问于 2025-04-16 14:00

我正在尝试把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,或者你喜欢的其他方法),然后在使用这个包的代码中直接导入它。

除非你真的必须要有你描述的目录结构,否则我建议你还是正常安装包。否则你是在和自己过不去。

撰写回答