我想在子目录中打包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中的导入效果不佳。
答案 0 :(得分:3)
看起来tweepy希望在Python路径上 - 它尝试加载tweepy.models
。但是,由于您将tweepy放在子目录中,因此模型模块现在位于socialmedia.twitter.tweepy.models
。
您必须将socialmedia/twitter/
添加到Python路径,或者您必须更改tweepy的导入以补偿新的包结构。两种解决方案都不是很好。前者引入了必须设置的特殊配置。后者将要求您在更新tweepy代码时修复导入(因为更新的代码将包含原始的tweepy.whatever
导入)。这就是为什么像你一样移动包裹通常不是一个好主意。相反,只需正常安装(运行setup.py或easy_install,或您喜欢的任何方法),然后在使用该包的代码中导入它。
除非你绝对必须移动你所描述的目录结构,否则我会正常安装软件包。你正在努力做一场艰苦的战斗。否则,