Ошибка импорта при добавлении tweepy в подкаталог - PullRequest
0 голосов
/ 19 марта 2011

Я пытаюсь упаковать 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 голосов
/ 19 марта 2011

Похоже, что tweepy ожидает на пути Python - он пытается загрузить tweepy.models. Однако, поскольку вы помещаете tweepy в подкаталог, модуль models теперь находится в socialmedia.twitter.tweepy.models.

Вы должны либо добавить socialmedia/twitter/ к пути Python, либо изменить импорт tweepy, чтобы компенсировать новую структуру пакета. Ни одно из решений не является отличным. Первый вводит специальную конфигурацию, которая должна быть установлена. Последнее потребует от вас исправления импорта каждый раз, когда обновляется твип-код (поскольку обновленный код будет содержать исходные tweepy.whatever импорта). Вот почему, как правило, не стоит переносить пакеты, как вы. Вместо этого просто установите его как обычно (запустите setup.py или easy_install, или любой другой метод, который вы предпочитаете), а затем в коде, который использует пакет, просто импортируйте его.

Если вы абсолютно не должны двигаться, имея структуру каталогов, которую вы описываете, я бы просто установил пакеты в обычном режиме. Вы ведете тяжелую битву, чтобы поступить иначе. В противном случае

...