我正在尝试使用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 /文件夹中执行相同的命令,但是得到了相同的结果
答案 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.py
(fix_sys_paths()
)中的一些代码之后。我怀疑问题在于Nose如何设置执行路径,尽管我现在无法证明这一点。
答案 3 :(得分:0)
事实证明,当您在GoogleAppengineLuncher的首选项中设置“Python路径”时,会出现UI错误。它需要输入以确认设置:
sudo port install python2.7
然后将“Python Path”设置为
/opt/local/bin/python2.7
输入以确认
答案 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)上设置的测试设置
希望以上内容可以帮助一些Python GAE开发人员,因为我在使NoseGAE简单设置工作方面遇到了一些挑战。小心!