无法在脚本中使用已安装的模块

时间:2014-10-07 13:38:42

标签: python easy-install

我是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-maps-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']

我是否必须在使用脚本时手动添加路径,或者我在这里缺少什么?我没有遇到其他已安装模块的问题。

4 个答案:

答案 0 :(得分:0)

在使用模块中的函数之前,必须使用以下内容导入它:

import googlemaps

将模块googlemaps中的函数用作googlemaps.FUNC_NAME()

import googlemaps as gmaps

将模块googlemaps中的函数用作gmaps.FUNC_NAME()

from googlemaps import *

导入整个命名空间并直接使用函数作为FUNC_NAME()。使用此选项时要小心使用其他现有名称进行着色。

有关Python模块的更多参考,请参阅https://docs.python.org/2/tutorial/modules.html

答案 1 :(得分:0)

这似乎对我有用,但你应该尝试这样的事情: -

import googlemaps
from googlemaps import GoogleMaps

答案 2 :(得分: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之前,您可以解决问题,即使它很麻烦且肯定有更好的解决方案。不过,它仍然有效,你现在可以实现它。

答案 3 :(得分:0)

根据Burhan Khalid的建议,我的问题与脚本code.py由apache webserver使用mod_wsgi模块运行这一事实有关。它显然没有包含对sys.path的更改,直到运行之后:

sudo service apache2 reload

如果您使用mod_wsgi并遇到类似问题,请尝试一下!