没有名为markdown App Engine的模块

时间:2012-02-20 20:07:16

标签: google-app-engine

我在app引擎中的目录结构是这样的:

project 
    app.yaml
    main.py
    lib
      markdown
        markdown_files 

main.py正在from lib.markdown import markdown 导入Markdown。此时,dev服务器开始给我以下堆栈跟踪。我想知道这里出了什么问题!我在lib中有一个 init .py。

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

我认为这个问题是Import Python module with PyImport_ImportModuleEx for a gedit plugin

的欺骗

答案:

  

如果你想使用markdown而不修改它,那么你将不得不把它放在Python库所期望的地方,比如在site-packages /中。否则,您将不得不修改它以使用相对导入而不是绝对导入。

更新2 我通过在app engine中修改我的sys.path解决了这个问题:

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

感谢Murat的帮助,

3 个答案:

答案 0 :(得分:0)

我相信这个问题是使用PyImport_ImportModuleEx导入Python模块以获取gedit插件

答案:

如果你想使用markdown而不修改它,那么你将不得不把它放在Python库所期望的地方,比如在site-packages /中。否则,您将不得不修改它以使用相对导入而不是绝对导入。

更新2我通过修改app engine中的sys.path解决了这个问题:

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

感谢Murat的帮助,

答案 1 :(得分:0)

该文件需要调用__init__.py才能生效。

将lib目录添加到pythonpath也可以。

  

如果你想使用markdown而不修改它,那么你将不得不把它放在Python库所期望的地方,比如在site-packages /

这是不正确的,app引擎有自己的导入机制,只允许通过此方法导入明确列出白名单的包。

答案 2 :(得分:-1)

你想要的是你的PYTHONPATH,这是Python看起来你尝试导入的东西的路径。正如您所发现的,一种方法是将lib添加到sys.path。

创建 init .py文件不是您想要的,因为这使lib成为包含markdown的包。那时,你应该可以做到

from lib import markdown

虽然这不是推荐的方法。