tipfy nosetest ImportError: нет модуля с именем fancy urllib
Я пытаюсь запустить nosetest с помощью tipfy и Google app engine, но постоянно получаю ошибку импорта:
Из каталога 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 без каких-либо ошибок, и у меня есть другие проекты движка приложений на той же машине, все работает нормально.
Использую mac os x 10.6.6 и у меня есть нос и носогубки установленный. Я также попытался выполнить ту же команду из папки /Users/me/Documents/python/project/, но получил тот же результат
6 ответов:
У меня была та же проблема, и вот мое быстрое решение:
Изменить этот файл "/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') ......
Работает на меня до сих пор.
Попробуйте запустить его с опцией:
--gae-lib-root=/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine
И, пожалуйста, покажите Python sys.путь.
Я также столкнулся с этой проблемой, используя Nose / NoseGAE. Мне не удалось попробовать различные значения
--gae-lib-root
, но в конечном итоге мне повезло исправитьdev_appserver.py
(расположенный в/usr/local/google_appengine/google/appengine/tools/
в моей установке MacOS) следующим образом:... 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 ...
Это близко следует некоторому коду в
appcfg.py
(fix_sys_paths()
) упоминается в Гае выдачи билета №3597 . Я подозреваю, что проблема заключается в том, как нос устанавливает путь исполнения, хотя в данный момент я не могу этого доказать.
Оказывается, что это из-за ошибки пользовательского интерфейса, когда вы устанавливаете "путь Python" в настройках GoogleAppengineLuncher. Для подтверждения настройки требуется ввести:
sudo port install python2.7
Затем установите "путь Python" в
/opt/local/bin/python2.7
Введите для подтверждения
Если вы запускаете автономные скрипты, то перед использованием любого материала 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']
В настоящее время (2016) GAE Python рекомендует загружать библиотеки проектов в файл на корневом уровне под названием "appengine_config.py".
Таким образом, если вы все еще сталкиваетесь с некоторыми неприятными проблемами, пожалуйста, не забудьте также добавить путь os dir для загрузки папки библиотеки " 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 для работы. Берегите себя!