tipfy nosetest ImportError:没有名为fancy_urllib的模块

时间:2011-03-06 12:53:11

标签: google-app-engine nosetests tipfy

我正在尝试使用tipfy和谷歌应用引擎运行nosetest,但我一直收到导入错误:

在google_appengine目录中,我执行以下命令(目录包含dev_appserver.py):

nosetests /Users/me/Documents/python/project/ --with-gae --without-sandbox

但是我收到以下错误:

Traceback (most recent call last):
  File "/usr/local/bin/nosetests", line 8, in <module>
    load_entry_point('nose==0.11.4', 'console_scripts', 'nosetests')()
  File "/Library/Python/2.6/site-packages/nose-0.11.4-py2.6.egg/nose/core.py", line 117, in __init__
    **extra_args)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/unittest.py", line 816, in __init__
    self.parseArgs(argv)
  File "/Library/Python/2.6/site-packages/nose-0.11.4-py2.6.egg/nose/core.py", line 134, in parseArgs
    self.config.configure(argv, doc=self.usage())
  File "/Library/Python/2.6/site-packages/nose-0.11.4-py2.6.egg/nose/config.py", line 323, in configure
    self.plugins.configure(options, self)
  File "/Library/Python/2.6/site-packages/nose-0.11.4-py2.6.egg/nose/plugins/manager.py", line 270, in configure
    cfg(options, config)
  File "/Library/Python/2.6/site-packages/nose-0.11.4-py2.6.egg/nose/plugins/manager.py", line 93, in __call__
    return self.call(*arg, **kw)
  File "/Library/Python/2.6/site-packages/nose-0.11.4-py2.6.egg/nose/plugins/manager.py", line 161, in simple
    result = meth(*arg, **kw)
  File "build/bdist.macosx-10.6-universal/egg/nosegae.py", line 84, in configure
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 51, in <module>
    import fancy_urllib
ImportError: No module named fancy_urllib

我可以加载tipfy hello_world项目而没有任何错误,我在同一台机器上有其他app引擎项目,所有运行正常。

使用mac os x 10.6.6,我安装了鼻子和鼻子。我也尝试从/ Users / me / Documents / python / project /文件夹中执行相同的命令,但是得到了相同的结果

6 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,这是我的快速解决方法:

修改此文件“/usr/local/bin/dev_appserver.py”

......
if version_tuple == (2, 4):
  sys.stderr.write('Warning: Python 2.4 is not supported; this program may '
                   'break. Please use version 2.5 or greater.\n')
#Start Change
#DIR_PATH = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))
DIR_PATH = "/usr/local/google_appengine"
#End Change

SCRIPT_DIR = os.path.join(DIR_PATH, 'google', 'appengine', 'tools')
......

到目前为止对我有用。

答案 1 :(得分:1)

尝试使用选项运行它:

--gae-lib-root=/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine

请显示Python sys.path。

答案 2 :(得分:0)

我也使用Nose / NoseGAE遇到了这个问题。尝试各种--gae-lib-root值时,我没有运气,但我最终确实运气了dev_appserver.py(位于我的MacOS安装中的/usr/local/google_appengine/google/appengine/tools/),如下所示:

...
try:
  import distutils.util
except ImportError:
  pass

# ----- start of new code -----
import os, sys

DIR_PATH = '/usr/local/google_appengine'
EXTRA_PATHS = [
    DIR_PATH,
    os.path.join(DIR_PATH, 'lib', 'antlr3'),
    os.path.join(DIR_PATH, 'lib', 'django_0_96'),
    os.path.join(DIR_PATH, 'lib', 'fancy_urllib'),
    os.path.join(DIR_PATH, 'lib', 'ipaddr'),
    os.path.join(DIR_PATH, 'lib', 'webob'),
    os.path.join(DIR_PATH, 'lib', 'yaml', 'lib'),
    os.path.join(DIR_PATH, 'lib', 'simplejson'),
    os.path.join(DIR_PATH, 'lib', 'graphy'),
]
sys.path = EXTRA_PATHS + sys.path
# ----- end of new code -----

import dummy_thread
...

这紧跟在GAE issue ticket #3597中提到的appcfg.pyfix_sys_paths())中的一些代码之后。我怀疑问题在于Nose如何设置执行路径,尽管我现在无法证明这一点。

答案 3 :(得分:0)

事实证明,当您在GoogleAppengineLuncher的首选项中设置“Python路径”时,会出现UI错误。它需要输入以确认设置:

    sudo port install python2.7

然后将“Python Path”设置为

    /opt/local/bin/python2.7

输入以确认

See here

答案 4 :(得分:0)

如果您正在运行独立脚本,那么在使用任何appengine内容之前,您必须链接到dirs

import sys
sys.path.append('/usr/local/google_appengine/')
sys.path.append('/usr/local/google_appengine/lib')
sys.path.append('/usr/local/google_appengine/lib/yaml/lib/')
if 'google' in sys.modules:
    del sys.modules['google']

答案 5 :(得分:0)

现在(2016)GAE Python建议在名为“appengine_config.py”的根级别的文件中加载项目库。

因此,如果您仍然面临一些令人讨厌的问题,请确保还添加os目录路径以加载库文件夹“lib”(可以在下面的代码中看到):

"""`appengine_config` gets loaded when starting a new application instance."""
import os
from google.appengine.ext import vendor
# insert `lib` as a site directory so our `main` module can load
# third-party libraries, and override built-ins with newer
# versions.
vendor.add(os.path.join(os.path.dirname(__file__), 'lib'))

完成上述操作后,我能够从IntelliJ(PyCharm)成功运行测试。 此外,请注意我在intelliJ(PyCharm)上设置的测试设置

IDE Settings

希望以上内容可以帮助一些Python GAE开发人员,因为我在使NoseGAE简单设置工作方面遇到了一些挑战。小心!