Cannot import Tornado submodules

Yarin picture Yarin · Jun 26, 2013 · Viewed 11.2k times · Source

Trying to install Tornado for first time (On EC2 Linux instance). I did

pip install tornado

and then tried running the hello world example: http://www.tornadoweb.org/en/stable/#hello-world

import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

application = tornado.web.Application([
    (r"/", MainHandler),
])

if __name__ == "__main__":
    application.listen(80)
    tornado.ioloop.IOLoop.instance().start()

I then try:

python hello.py

but get:

Traceback (most recent call last): File "testing/tornado.py", line 1, in
import tornado.ioloop File "/opt/pdf_engine/testing/tornado.py", line 1, in
import tornado.ioloop ImportError: No module named ioloop

Answer

Amber picture Amber · Jun 26, 2013

Don't name your file tornado.py; it shadows the actual Tornado import. Name it something like what you used in your example, e.g. hello.py

Right now, your import tornado.ioloop is trying to import the member ioloop from your own file, because it's named tornado and in the current directory which has the highest import precedence.