2014-10-07 1 views
-1

Я новичок в Python (примерно одна неделя), так что, возможно, я просто отсутствует что-то очевидное ...Невозможно использовать установленный модуль в скрипте

Я был не в состоянии импортировать и использовать модуль в моем сценарии code.py. Модуль был установлен с помощью easy_install и называется googlemaps. Я установил его (успешно) с помощью команды:

sudo easy_install googlemaps 

Когда я пытаюсь импортировать модуль из интерпретатора Python, это, кажется, работает нормально:

>>> googlemaps 
<module 'googlemaps' from '/usr/local/lib/python2.7/dist-packages/googlemaps-1.0.2-py2.7.egg/googlemaps.pyc'> 

Однако, когда я пытаюсь сделать же в сценарии, он дает следующую отслеживающий:

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 239, in process 
    return self.handle() 
    File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 230, in handle 
    return self._delegate(fn, self.fvars, args) 
    File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 420, in _delegate 
    return handle_class(cls) 
    File "/usr/local/lib/python2.7/dist-packages/web/application.py", line 396, in handle_class 
    return tocall(*args) 
    File "/var/www/example.com/application/code.py", line 57, in GET 
    self.generate_map() 
    File "/var/www/example.com/application/code.py", line 64, in generate_map 
    from googlemaps import GoogleMaps 
    ImportError: No module named googlemaps 

Я подозреваю, что это какой-то вопрос пути, но я не в полной мере понять, почему и как это исправить. Если я выполняю следующее из переводчика:

>>> import sys 
>>> sys.path 
['', '/usr/local/lib/python2.7/dist-packages/googlemaps-1.0.2-py2.7.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages'] 

все выглядит хорошо, но если бы я сделать то же самое с помощью сценария, результат которого отсутствует запись Google-карты-1.0.2-py2.7.egg :

['/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages'] 

Должен ли я вручную добавлять путь при использовании из сценария или что мне здесь не хватает ??? У меня не было этой проблемы с другими установленными модулями.

+1

Если вы используете mod_wsgi, вы можете перезагрузить сервер. –

+0

Aha! Это действительно трюк. Так это что-то вроде PYTHONPATH для пользователя apache, который необходимо обновить? – robguinness

+0

Нет, это просто, что он не читает изменения «на лету». –

ответ

0

По предложению Бурхана Халида моя проблема связана с тем, что сценарий code.py выполнялся веб-сервером apache с использованием модуля mod_wsgi. Это, очевидно, не не включают изменения в sys.path только после бега:

sudo service apache2 reload 

Вам, если вы используете mod_wsgi и имеют схожие проблемы, дайте ему попробовать!

0

Перед использованием функций из модуля, вы должны импортировать его, используя что-то вроде:

import googlemaps 

использовать функции в модуле GoogleMaps в качестве googlemaps.FUNC_NAME()

import googlemaps as gmaps 

использовать функции модуль googlemaps как gmaps.FUNC_NAME()

from googlemaps import * 

, чтобы импортировать все namesp ace и использовать функции непосредственно как FUNC_NAME(). Будьте осторожны при затенении других существующих имен этой опцией.

См. https://docs.python.org/2/tutorial/modules.html для дополнительной информации о модулях Python.

+0

Спасибо за ответ, но предложение Бурхана действительно сработало для меня. – robguinness

0

это, кажется, работает для меня, но вы должны попробовать что-то вроде этого: -

import googlemaps 
from googlemaps import GoogleMaps 
+0

Спасибо за ответ, но предложение Бурхана действительно сработало для меня. – robguinness

0

Да, вы должны добавить в sys.path включить нужный путь. Странно, что у вас есть другой sys.path в интерпретаторе и в скрипте, но я не могу с этим поделать, поскольку у меня едва ли есть представление о том, как справляться с этим в Windows, и я незнакомец к Linux.

Так что да, идя:

import sys 
sys.path.appen(r"/usr/local/lib/python2.7/dist-packages/googlemaps-1.0.2-py2.7.egg") 

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

 Смежные вопросы

  • Нет связанных вопросов^_^