We have a package named model
In model, we have a TopicM module that defines a class Topic
We import it in a module named GeneralM in the same package.
Sometimes (rarely) we get this error:
What could be the cause?
Could it be circular imports?
Should we perhaps put something in '__init__.py'?
Please advise.
(I apologize for the lengthy error)
–> –> –>
<type 'exceptions.ImportError'> Python 2.7.2: C:\Python27\pythonw.exe
Fri Jun 08 11:23:46 2012
A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.
D:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py in _HandleRequest(self=<google.appengine.tools.dev_appserver.DevAppServerRequestHandler instance>)
2779 outfile = cStringIO.StringIO()
2780 try:
=> 2781 self._Dispatch(dispatcher, self.rfile, outfile, env_dict)
2782 finally:
2783 self.module_manager.UpdateModuleFileModificationTimes()
self = <google.appengine.tools.dev_appserver.DevAppServerRequestHandler instance>, self._Dispatch = <bound method DevAppServerRequestHandler._Dispat...v_appserver.DevAppServerRequestHandler instance>>, dispatcher = <google.appengine.tools.dev_appserver.MatcherDispatcher object>, self.rfile = <socket._fileobject object>, outfile = <cStringIO.StringO object>, env_dict = {'APPENGINE_RUNTIME': 'python', 'APPLICATION_ID': 'dev~greatest-app-ever', 'CURRENT_VERSION_ID': '1.1', 'REMOTE_ADDR': '127.0.0.1', 'REQUEST_ID_HASH': 'F1F836CB', 'REQUEST_METHOD': 'GET', 'SDK_VERSION': '1.6.5', 'SERVER_NAME': 'localhost', 'SERVER_PORT': '8080', 'SERVER_PROTOCOL': 'HTTP/1.0', ...}
D:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py in _Dispatch(self=<google.appengine.tools.dev_appserver.DevAppServerRequestHandler instance>, dispatcher=<google.appengine.tools.dev_appserver.MatcherDispatcher object>, socket_infile=<socket._fileobject object>, outfile=<cStringIO.StringO object>, env_dict={'APPENGINE_RUNTIME': 'python', 'APPLICATION_ID': 'dev~greatest-app-ever', 'CURRENT_VERSION_ID': '1.1', 'REMOTE_ADDR': '127.0.0.1', 'REQUEST_ID_HASH': 'F1F836CB', 'REQUEST_METHOD': 'GET', 'SDK_VERSION': '1.6.5', 'SERVER_NAME': 'localhost', 'SERVER_PORT': '8080', 'SERVER_PROTOCOL': 'HTTP/1.0', ...})
2667 dispatcher.Dispatch(app_server_request,
2668 outfile,
=> 2669 base_env_dict=env_dict)
2670 finally:
2671 request_file.close()
base_env_dict undefined, env_dict = {'APPENGINE_RUNTIME': 'python', 'APPLICATION_ID': 'dev~greatest-app-ever', 'CURRENT_VERSION_ID': '1.1', 'REMOTE_ADDR': '127.0.0.1', 'REQUEST_ID_HASH': 'F1F836CB', 'REQUEST_METHOD': 'GET', 'SDK_VERSION': '1.6.5', 'SERVER_NAME': 'localhost', 'SERVER_PORT': '8080', 'SERVER_PROTOCOL': 'HTTP/1.0', ...}
D:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py in Dispatch(self=<google.appengine.tools.dev_appserver.MatcherDispatcher object>, request=<AppServerRequest relative_url: /prof?lectureKey...mp', mode 'rb' at 0x0384A860> force_admin: False>, outfile=<cStringIO.StringO object>, base_env_dict={'APPENGINE_RUNTIME': 'python', 'APPLICATION_ID': 'dev~greatest-app-ever', 'CURRENT_VERSION_ID': '1.1', 'REMOTE_ADDR': '127.0.0.1', 'REQUEST_ID_HASH': 'F1F836CB', 'REQUEST_METHOD': 'GET', 'SDK_VERSION': '1.6.5', 'SERVER_NAME': 'localhost', 'SERVER_PORT': '8080', 'SERVER_PROTOCOL': 'HTTP/1.0', ...})
690 forward_request = dispatcher.Dispatch(request,
691 outfile,
=> 692 base_env_dict=base_env_dict)
693
694 if forward_request:
base_env_dict = {'APPENGINE_RUNTIME': 'python', 'APPLICATION_ID': 'dev~greatest-app-ever', 'CURRENT_VERSION_ID': '1.1', 'REMOTE_ADDR': '127.0.0.1', 'REQUEST_ID_HASH': 'F1F836CB', 'REQUEST_METHOD': 'GET', 'SDK_VERSION': '1.6.5', 'SERVER_NAME': 'localhost', 'SERVER_PORT': '8080', 'SERVER_PROTOCOL': 'HTTP/1.0', ...}
D:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py in Dispatch(self=<google.appengine.tools.dev_appserver.CGIDispatcher object>, request=<AppServerRequest relative_url: /prof?lectureKey...mp', mode 'rb' at 0x0384A860> force_admin: False>, outfile=<cStringIO.StringO object>, base_env_dict={'APPENGINE_RUNTIME': 'python', 'APPLICATION_ID': 'dev~greatest-app-ever', 'CURRENT_VERSION_ID': '1.1', 'REMOTE_ADDR': '127.0.0.1', 'REQUEST_ID_HASH': 'F1F836CB', 'REQUEST_METHOD': 'GET', 'SDK_VERSION': '1.6.5', 'SERVER_NAME': 'localhost', 'SERVER_PORT': '8080', 'SERVER_PROTOCOL': 'HTTP/1.0', ...})
1729 memory_file,
1730 outfile,
=> 1731 self._module_dict)
1732 finally:
1733 logging.root.level = before_level
self = <google.appengine.tools.dev_appserver.CGIDispatcher object>, self._module_dict = {'Cookie': <module 'Cookie' from 'C:\Python27\lib\Cookie.pyc'>, 'StringIO': <module 'StringIO' from 'C:\Python27\lib\StringIO.pyc'>, 'UserDict': <module 'UserDict' from 'C:\Python27\lib\UserDict.pyc'>, '__builtin__': <module '__builtin__' (built-in)>, '__future__': <module '__future__' from 'C:\Python27\lib\__future__.pyc'>, '__main__': <module 'prof' from 'C:\Current Project\study-wise\src\prof.py'>, '_abcoll': <module '_abcoll' from 'C:\Python27\lib\_abcoll.pyc'>, '_bisect': <module '_bisect' (built-in)>, '_collections': <module '_collections' (built-in)>, '_functools': <module '_functools' (built-in)>, ...}
D:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py in ExecuteCGI(config=<AppInfoExternal error_handlers=None b...one api_version=1 api_config=None >, root_path=r'C:\Current Project\study-wise\src', handler_path='prof.py', cgi_path=r'C:\Current Project\study-wise\src\prof.py', env={'APPENGINE_RUNTIME': 'python', 'APPLICATION_ID': 'dev~greatest-app-ever', 'AUTH_DOMAIN': 'gmail.com', 'CONTENT_LENGTH': '', 'CONTENT_TYPE': 'application/x-www-form-urlencoded', 'CURRENT_VERSION_ID': '1.1', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'HTTP_ACCEPT_LANGUAGE': 'en-us,en;q=0.5', 'HTTP_CACHE_CONTROL': 'max-age=0', ...}, infile=<cStringIO.StringO object>, outfile=<cStringIO.StringO object>, module_dict={'Cookie': <module 'Cookie' from 'C:\Python27\lib\Cookie.pyc'>, 'StringIO': <module 'StringIO' from 'C:\Python27\lib\StringIO.pyc'>, 'UserDict': <module 'UserDict' from 'C:\Python27\lib\UserDict.pyc'>, '__builtin__': <module '__builtin__' (built-in)>, '__future__': <module '__future__' from 'C:\Python27\lib\__future__.pyc'>, '__main__': <module 'prof' from 'C:\Current Project\study-wise\src\prof.py'>, '_abcoll': <module '_abcoll' from 'C:\Python27\lib\_abcoll.pyc'>, '_bisect': <module '_bisect' (built-in)>, '_collections': <module '_collections' (built-in)>, '_functools': <module '_functools' (built-in)>, ...}, exec_script=<function ExecuteOrImportScript>, exec_py27_handler=<function ExecutePy27Handler>)
1629 reset_modules = exec_py27_handler(config, handler_path, cgi_path, hook)
1630 else:
=> 1631 reset_modules = exec_script(config, handler_path, cgi_path, hook)
1632 except SystemExit, e:
1633 logging.debug('CGI exited with status: %s', e)
reset_modules = True, exec_script = <function ExecuteOrImportScript>, config = <AppInfoExternal error_handlers=None b...one api_version=1 api_config=None >, handler_path = 'prof.py', cgi_path = r'C:\Current Project\study-wise\src\prof.py', hook = <google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>
D:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver.py in ExecuteOrImportScript(config=<AppInfoExternal error_handlers=None b...one api_version=1 api_config=None >, handler_path='prof.py', cgi_path=r'C:\Current Project\study-wise\src\prof.py', import_hook=<google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>)
1317
1318 if module_code:
=> 1319 exec module_code in script_module.__dict__
1320 else:
1321 script_module.main()
module_code = <code object <module> at 03760E78, file "C:\Current Project\study-wise\src\prof.py", line 2>, script_module = <module 'prof' from 'C:\Current Project\study-wise\src\prof.py'>, script_module.__dict__ = {'__builtins__': {'ArithmeticError': <type 'exceptions.ArithmeticError'>, 'AssertionError': <type 'exceptions.AssertionError'>, 'AttributeError': <type 'exceptions.AttributeError'>, 'BaseException': <type 'exceptions.BaseException'>, 'BufferError': <type 'exceptions.BufferError'>, 'BytesWarning': <type 'exceptions.BytesWarning'>, 'DeprecationWarning': <type 'exceptions.DeprecationWarning'>, 'EOFError': <type 'exceptions.EOFError'>, 'Ellipsis': Ellipsis, 'EnvironmentError': <type 'exceptions.EnvironmentError'>, ...}, '__doc__': None, '__file__': r'C:\Current Project\study-wise\src\prof.py', '__loader__': <google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, '__name__': 'prof', '__package__': None, 'run_wsgi_app': <function run_wsgi_app>, 'template': <module 'google.appengine.ext.webapp.template' f...engine\google\appengine\ext\webapp\template.pyc'>, 'webapp': <module 'google.appengine.ext.webapp' from 'D:\P...engine\google\appengine\ext\webapp\__init__.pyc'>}
C:\Current Project\study-wise\src\prof.py in ()
3 from google.appengine.ext.webapp.util import run_wsgi_app
4 from google.appengine.ext.webapp import template
=> 5 from model import TopicM
6 from model import LectureM
7 from model import GeneralM
model undefined, TopicM undefined
D:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py in Decorate(self=<google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, *args=('model.TopicM',), **kwargs={})
674 self._indent_level += 1
675 try:
=> 676 return func(self, *args, **kwargs)
677 finally:
678 self._indent_level -= 1
func = <function load_module>, self = <google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, args = ('model.TopicM',), kwargs = {}
D:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py in load_module(self=<google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, fullname='model.TopicM')
1856 search_path = parent_module.__path__
1857
=> 1858 return self.FindAndLoadModule(submodule, fullname, search_path)
1859
1860 @Trace
self = <google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, self.FindAndLoadModule = <bound method HardenedModulesHook.Decorate of <g...ppserver_import_hook.HardenedModulesHook object>>, submodule = 'TopicM', fullname = 'model.TopicM', search_path = [r'C:\Current Project\study-wise\src\model', r'C:\Current Project\study-wise\src\model']
D:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py in Decorate(self=<google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, *args=('TopicM', 'model.TopicM', [r'C:\Current Project\study-wise\src\model', r'C:\Current Project\study-wise\src\model']), **kwargs={})
674 self._indent_level += 1
675 try:
=> 676 return func(self, *args, **kwargs)
677 finally:
678 self._indent_level -= 1
func = <function FindAndLoadModule>, self = <google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, args = ('TopicM', 'model.TopicM', [r'C:\Current Project\study-wise\src\model', r'C:\Current Project\study-wise\src\model']), kwargs = {}
D:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py in FindAndLoadModule(self=<google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, submodule='TopicM', submodule_fullname='model.TopicM', search_path=[r'C:\Current Project\study-wise\src\model', r'C:\Current Project\study-wise\src\model'])
1720 source_file,
1721 pathname,
=> 1722 description)
1723
1724
description = ('.py', 'U', 1)
D:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py in Decorate(self=<google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, *args=('model.TopicM', <closed file 'C:\Current Project\study-wise\src\model\TopicM.py', mode 'U'>, r'C:\Current Project\study-wise\src\model\TopicM.py', ('.py', 'U', 1)), **kwargs={})
674 self._indent_level += 1
675 try:
=> 676 return func(self, *args, **kwargs)
677 finally:
678 self._indent_level -= 1
func = <function LoadModuleRestricted>, self = <google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, args = ('model.TopicM', <closed file 'C:\Current Project\study-wise\src\model\TopicM.py', mode 'U'>, r'C:\Current Project\study-wise\src\model\TopicM.py', ('.py', 'U', 1)), kwargs = {}
D:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py in LoadModuleRestricted(self=<google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, submodule_fullname='model.TopicM', source_file=<closed file 'C:\Current Project\study-wise\src\model\TopicM.py', mode 'U'>, pathname=r'C:\Current Project\study-wise\src\model\TopicM.py', description=('.py', 'U', 1))
1663 source_file,
1664 pathname,
=> 1665 description)
1666 except:
1667
description = ('.py', 'U', 1)
C:\Current Project\study-wise\src\model\TopicM.py in ()
2 from google.appengine.ext import db
=> 3 import GeneralM
4 import LectureM
5
6 def getTopicsByLecture(lecture):
GeneralM undefined
D:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py in Decorate(self=<google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, *args=('model.GeneralM',), **kwargs={})
674 self._indent_level += 1
675 try:
=> 676 return func(self, *args, **kwargs)
677 finally:
678 self._indent_level -= 1
func = <function load_module>, self = <google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, args = ('model.GeneralM',), kwargs = {}
D:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py in load_module(self=<google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, fullname='model.GeneralM')
1856 search_path = parent_module.__path__
1857
=> 1858 return self.FindAndLoadModule(submodule, fullname, search_path)
1859
1860 @Trace
self = <google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, self.FindAndLoadModule = <bound method HardenedModulesHook.Decorate of <g...ppserver_import_hook.HardenedModulesHook object>>, submodule = 'GeneralM', fullname = 'model.GeneralM', search_path = [r'C:\Current Project\study-wise\src\model', r'C:\Current Project\study-wise\src\model']
D:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py in Decorate(self=<google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, *args=('GeneralM', 'model.GeneralM', [r'C:\Current Project\study-wise\src\model', r'C:\Current Project\study-wise\src\model']), **kwargs={})
674 self._indent_level += 1
675 try:
=> 676 return func(self, *args, **kwargs)
677 finally:
678 self._indent_level -= 1
func = <function FindAndLoadModule>, self = <google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, args = ('GeneralM', 'model.GeneralM', [r'C:\Current Project\study-wise\src\model', r'C:\Current Project\study-wise\src\model']), kwargs = {}
D:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py in FindAndLoadModule(self=<google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, submodule='GeneralM', submodule_fullname='model.GeneralM', search_path=[r'C:\Current Project\study-wise\src\model', r'C:\Current Project\study-wise\src\model'])
1720 source_file,
1721 pathname,
=> 1722 description)
1723
1724
description = ('.py', 'U', 1)
D:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py in Decorate(self=<google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, *args=('model.GeneralM', <closed file 'C:\Current Project\study-wise\src\model\GeneralM.py', mode 'U'>, r'C:\Current Project\study-wise\src\model\GeneralM.py', ('.py', 'U', 1)), **kwargs={})
674 self._indent_level += 1
675 try:
=> 676 return func(self, *args, **kwargs)
677 finally:
678 self._indent_level -= 1
func = <function LoadModuleRestricted>, self = <google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, args = ('model.GeneralM', <closed file 'C:\Current Project\study-wise\src\model\GeneralM.py', mode 'U'>, r'C:\Current Project\study-wise\src\model\GeneralM.py', ('.py', 'U', 1)), kwargs = {}
D:\Program Files\Google\google_appengine\google\appengine\tools\dev_appserver_import_hook.py in LoadModuleRestricted(self=<google.appengine.tools.dev_appserver_import_hook.HardenedModulesHook object>, submodule_fullname='model.GeneralM', source_file=<closed file 'C:\Current Project\study-wise\src\model\GeneralM.py', mode 'U'>, pathname=r'C:\Current Project\study-wise\src\model\GeneralM.py', description=('.py', 'U', 1))
1663 source_file,
1664 pathname,
=> 1665 description)
1666 except:
1667
description = ('.py', 'U', 1)
C:\Current Project\study-wise\src\model\GeneralM.py in ()
2 from google.appengine.ext import db
3 from google.appengine.api import users
=> 4 from TopicM import Topic
5 from LectureM import Lecture
6
TopicM undefined, Topic undefined
<type 'exceptions.ImportError'>: cannot import name Topic
args = ('cannot import name Topic',)
message = 'cannot import name Topic'
Try moving all possible imports to the bottom of the module,
If you planned your classes relations properly that should solve your problem!
Read this awesome answer if your problem refuse to vanish:
https://stackoverflow.com/a/894885/988434
Have fun hacking!