Нет модуля с именем markdown App Engine - PullRequest
9 голосов
/ 21 февраля 2012

Моя структура каталогов в движке приложения выглядит следующим образом:

project 
    app.yaml
    main.py
    lib
      markdown
        markdown_files 

Уценка импортируется в main.py на from lib.markdown import markdown . На этом этапе сервер разработки начинает давать мне следующую трассировку стека. Мне интересно, что здесь происходит не так! У меня есть init .py в lib.

Traceback (most recent call last):
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 2769, in _HandleRequest
    self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 2654, in _Dispatch
    base_env_dict=env_dict)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 683, in Dispatch
    base_env_dict=base_env_dict)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 1718, in Dispatch
    self._module_dict)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 1622, in ExecuteCGI
    reset_modules = exec_script(config, handler_path, cgi_path, hook)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 1310, in ExecuteOrImportScript
    exec module_code in script_module.__dict__
  File "/Users/nomadali/jeeqs/git/src/jeeqs.py", line 26, in <module>
    from lib.markdown import markdown
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 676, in Decorate
    return func(self, *args, **kwargs)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1845, in load_module
    return self.FindAndLoadModule(submodule, fullname, search_path)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 676, in Decorate
    return func(self, *args, **kwargs)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1717, in FindAndLoadModule
    description)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 676, in Decorate
    return func(self, *args, **kwargs)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1660, in LoadModuleRestricted
    description)
  File "/Users/nomadali/jeeqs/git/src/lib/markdown/__init__.py", line 161, in <module>
    import preprocessors
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 676, in Decorate
    return func(self, *args, **kwargs)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1845, in load_module
    return self.FindAndLoadModule(submodule, fullname, search_path)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 676, in Decorate
    return func(self, *args, **kwargs)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1717, in FindAndLoadModule
    description)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 676, in Decorate
    return func(self, *args, **kwargs)
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_import_hook.py", line 1660, in LoadModuleRestricted
    description)
  File "/Users/nomadali/jeeqs/git/src/markdown/preprocessors.py", line 11, in <module>
ImportError: No module named markdown
INFO     2012-02-20 19:53:02,506 dev_appserver.py:2884] "GET /favicon.ico HTTP/1.0" 500 -

Update1

Я считаю, что этот вопрос является обманом Импортировать модуль Python с PyImport_ImportModuleEx для плагина gedit

Ответ:

Если вы хотите использовать разметку без ее изменения, вам нужно будет поместить ее туда, где ее ожидает библиотека Python, например, в site-packages /. В противном случае вам придется изменить его для использования относительного импорта вместо абсолютного импорта.

Обновление 2 Я решил эту проблему, изменив мой sys.path в движке приложения:

sys.path.append (os.path.join (os.path.dirname ( file ), 'lib'))

Спасибо Мурату за помощь,

Ответы [ 3 ]

0 голосов
/ 08 октября 2013

Я считаю, что этот вопрос является дублированием модуля Import Python с PyImport_ImportModuleEx для плагина gedit

Ответ:

Если вы хотите использовать разметку без ее изменения, вам нужно будет поместить ее туда, где ее ожидает библиотека Python, например, в site-packages /. В противном случае вам придется изменить его для использования относительного импорта вместо абсолютного импорта.

Обновление 2 Я решил эту проблему, изменив файл sys.path в движке приложения:

sys.path.append (os.path.join (os.path.dirname (файл), 'lib'))

Спасибо Мурату за помощь,

0 голосов
/ 06 января 2014

Файл должен называться __init__.py, чтобы это работало.

Добавление каталога lib в pythonpath также работает.

Если вы хотите использовать разметку без изменениятогда вам придется поместить его куда-нибудь, где его ожидает библиотека Python, например, в site-packages /

Это неверно, движок приложения имеет собственный механизм импорта и только пакеты, которыев явном виде белые списки разрешено импортировать с помощью этого метода.

0 голосов
/ 02 апреля 2012

То, что вы хотите, чтобы lib был в вашей PYTHONPATH, пути, по которым Python смотрит вещи, которые вы пытаетесь импортировать. Как вы обнаружили, один из способов сделать это - добавить lib в sys.path.

Создание init .py файла - это не то, что вам нужно, потому что это делает lib пакетом, содержащим уценку. В этот момент вы должны быть в состоянии сделать

from lib import markdown

хотя это не рекомендуемый способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...