मैं थिंसेफ मोड में नए पायथन 2.7 रनटाइम और जीएई 1.6.0 प्री-रिलीज एसडीके का उपयोग करके जिन्जा 2 के साथ पिरामिड चलाने की कोशिश कर रहा हूं। मैंने here की रूपरेखा के रूप में मेरे ऐप में संशोधन किए हैं, यानी मैंने runtime: python27
, threadsafe: true
app.yaml
में सेट किया है और main()
फ़ंक्शन से छुटकारा पा लिया है। जब मैं अपने आप को द्वारा प्रतिक्रिया उत्पन्न यह ठीक काम करता है, लेकिन जब मैं समीकरण में jinja2 लाने के लिए प्रयास करते हैं, मैं निम्नलिखित अपवाद:पिरामिड + जिन्जा 2 और नया जीएई रनटाइम
ERROR 2011-11-07 00:10:34,356 wsgi.py:170]
Traceback (most recent call last):
File "/gae/google/appengine/runtime/wsgi.py", line 168, in Handle
[...]
File "/myapp/source/myapp-tip/main.py", line 29, in <module>
config.include('pyramid_jinja2')
File "/myapp/source/myapp-tip/lib/dist/pyramid/config/__init__.py", line 616, in include
c(configurator)
File "lib/dist/pyramid_jinja2/__init__.py", line 390, in includeme
_get_or_build_default_environment(config.registry)
File "/lib/dist/pyramid_jinja2/__init__.py", line 217, in _get_or_build_default_environment
_setup_environment(registry)
File "/lib/dist/pyramid_jinja2/__init__.py", line 253, in _setup_environment
package = _caller_package(('pyramid_jinja2', 'jinja2', 'pyramid.config'))
File "/lib/dist/pyramid_jinja2/__init__.py", line 136, in caller_package
for t in self.inspect.stack():
File "/usr/lib/python2.7/inspect.py", line 1056, in stack
return getouterframes(sys._getframe(1), context)
File "/usr/lib/python2.7/inspect.py", line 1034, in getouterframes
framelist.append((frame,) + getframeinfo(frame, context))
File "/usr/lib/python2.7/inspect.py", line 1009, in getframeinfo
lines, lnum = findsource(frame)
File "/usr/lib/python2.7/inspect.py", line 534, in findsource
module = getmodule(object, file)
File "/usr/lib/python2.7/inspect.py", line 506, in getmodule
main = sys.modules['__main__']
KeyError: '__main__'
मैं इस समस्या के समाधान के लिए pyramid_jinja2 कोड के साथ एक सा चारों ओर गंदगी की कोशिश की, केवल एक और अपवाद के साथ छोड़ा जा सकता:
ERROR 2011-11-04 12:06:38,720 wsgi.py:170]
Traceback (most recent call last):
File "/gae/google/appengine/runtime/wsgi.py", line 168, in Handle
handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
[...]
File "/myapp/source/myapp-tip/main.py", line 29, in <module>
config.add_jinja2_search_path("templates")
File "/myapp/source/myapp-tip/lib/dist/pyramid/config/util.py", line 28, in wrapper
result = wrapped(self, *arg, **kw)
File "/lib/dist/pyramid_jinja2/__init__.py", line 311, in add_jinja2_search_path
env.loader.searchpath.append(abspath_from_resource_spec(d))
File "/myapp/source/myapp-tip/lib/dist/pyramid/asset.py", line 38, in abspath_from_asset_spec
return pkg_resources.resource_filename(pname, filename)
File "/myapp/source/myapp-tip/pkg_resources.py", line 840, in resource_filename
return get_provider(package_or_requirement).get_resource_filename(
File "/myapp/source/myapp-tip/pkg_resources.py", line 160, in get_provider
__import__(moduleOrReq)
File "/gae/google/appengine/tools/dev_appserver_import_hook.py", line 640, in Decorate
return func(self, *args, **kwargs)
File "/gae/google/appengine/tools/dev_appserver_import_hook.py", line 1756, in load_module
return self.FindAndLoadModule(submodule, fullname, search_path)
File "/gae/google/appengine/tools/dev_appserver_import_hook.py", line 640, in Decorate
return func(self, *args, **kwargs)
File "/gae/google/appengine/tools/dev_appserver_import_hook.py", line 1628, in FindAndLoadModule
description)
File "/gae/google/appengine/tools/dev_appserver_import_hook.py", line 640, in Decorate
return func(self, *args, **kwargs)
File "/gae/google/appengine/tools/dev_appserver_import_hook.py", line 1571, in LoadModuleRestricted
description)
ImportError: Cannot re-init internal module __main__
मैं अगर किसी को क्या पिरामिड हुड के नीचे करने के लिए कोशिश कर रहा है पर कुछ प्रकाश डाला सकता है खुशी होगी। बाद के स्टैक ट्रेस के आधार पर ऐसा लगता है कि यह एक संपत्ति को हल करने की कोशिश कर रहा है, लेकिन यह __main__
को फिर से लोड करने का प्रयास क्यों कर रहा है? मुझे यह भी यकीन नहीं है कि मेरी समस्या पिरामिड या जीएई के कारण होती है।
इस मुद्दे पर किसी भी अंतर्दृष्टि के लिए धन्यवाद।
प्रतिस्थापन आयात प्रणाली dev_appserver के लिए विशिष्ट है से पहले उत्पादन वातावरण के प्रतिबंध की नकल करने के लिए जोड़ init__.py,। –
यदि यह सत्य है, तो आप "pyramid_jinja2 आयात करें; config.include (pyramid_jinja2)" (मॉड्यूल नाम के लिए स्ट्रिंग पास करने के बजाय, मॉड्यूल को पास करने के बजाय; यह समतुल्य है) –
दुर्भाग्यवश इससे मदद नहीं मिली। बिल्कुल वही व्यवहार प्राप्त करना। – Docent