2009-09-09 2 views
0

Странно, что импорт не удается, даже когда он находится в sys.path.Импорт не удался, когда модуль уже находится в sys.path

Сегодня я установил среду django для приложения Google на ubuntu на компьютере моей лаборатории. И он отлично работает, когда я проверил код и запускал его в Windows (тот же компьютер в лаборатории).

Но когда я пошел в общежитие и проверил код и начал бегать, это было странно.

Я распечатайте sys.path, как это:

['/home/tower/googlecode/mygae', '/home/tower/googlecode/mygae/.google_appengine', '/home/tower/googlecode/mygae/.google_appengine/lib/antlr3', ...] 

и когда я побежал питон жаловался

from google.appengine.api import apiproxy_stub_map 
ImportError: No module named appengine.api 

легко знать модуль Google находится в каталоге '/home/tower/googlecode/mygae/.google_appengine' и __init__.py для каждый модуль присутствует.

И что может быть причиной этой странной вещи? Или, наверное, что я испортил?

спасибо.

ответ

2

Вы можете импортировать google и google.appengine? Вы уверены, что интерпретатор прочитал и прошел права доступа к дереву модулей?

+0

Я пытался. import google в порядке. но импорт google.appengine терпит неудачу. Возможно, Google уже находится на глобальном пути системы, так как я пытаюсь импортировать Google в другие места, это удается. возможно, они сталкиваются. Я пытаюсь выяснить. –

+3

print google .__ path__ – wRAR

+0

они действительно столкнулись. google__path__ показывает, что он находится в каталоге /var/lib/python-support/python2.6. Мне интересно, что импорт должен проходить из sys.путь один за другим в порядке, и если он успешно импортирует, он должен остановиться. Но, похоже, импорт не проходит по порядку списка. Я должен прочитать некоторые документы, чтобы узнать больше. Действительно спасибо. оно работает. –

0

Иногда вы можете получить ошибку импорта для модуля, когда ошибка является чем-то другим, например, синтаксической ошибкой. Попробуйте положить

import pdb;pdb.set_trace() 

непосредственно перед импортом, а затем s (ТЭП) в импорте, и п (вн) thruogh модуля в вопросе, чтобы увидеть из вы получите сообщение об ошибке.

1

Похоже, вы получаете модуль (или пакет) под названием «google» из другого места - возможно, /home/tower/googlecode/mygae - и этот модуль google не имеет appengine. Чтобы проверить, распечатайте google.__file__ и, если возможно, google.__path__; это должно быть информативным.

2

У меня была такая же проблема на Ubuntu, когда я хотел играть с google.appengine в консоли. Сначала я попытался исправить это, удалив пакет /usr/lib/python2.7/dist-packages/google, но Ubuntu One пожаловался. Наконец, я решил это, объединив пакет GAE SDK google в пакет , который вызвал столкновение.

Содержимое /usr/lib/python2.7/dist-packages/google реж выглядеть следующим образом:

/google 
    /appengine 
    /net 
    /protobuf 
    /pyglib 
    /storage 
    /__init__.py 
    /__init__.pyc 
Смежные вопросы