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 4

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)

Настройки IDE

Надеюсь, что вышесказанное может помочь некоторым разработчикам Python GAE, так как у меня были некоторые проблемы в получении простой установки NoseGAE для работы. Берегите себя!