On 3/31/11 8:48 PM, Vincent Ren wrote:
Hey, everyone, I'm trying to use ipython recently. It's very nice,
however, when I run this(from Programming Python 3rd) in ipython, I'll
get a NameError:


In [1]: import settime, timer, set

In [2]: import profile

In [3]: profile.run('timer.test(100, settime.setops, set.Set)')
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call
last)

/home/vincent/hacking/python/<ipython console>  in<module>()

/usr/lib/python2.6/profile.pyc in run(statement, filename, sort)
      68     prof = Profile()
      69     try:
--->  70         prof = prof.run(statement)
      71     except SystemExit:
      72         pass

/usr/lib/python2.6/profile.pyc in run(self, cmd)
     454         import __main__
     455         dict = __main__.__dict__
-->  456         return self.runctx(cmd, dict, dict)
     457
     458     def runctx(self, cmd, globals, locals):

/usr/lib/python2.6/profile.pyc in runctx(self, cmd, globals, locals)
     460         sys.setprofile(self.dispatcher)
     461         try:
-->  462             exec cmd in globals, locals
     463         finally:
     464             sys.setprofile(None)

/usr/lib/pymodules/python2.6/IPython/FakeModule.pyc in<module>()

NameError: name 'timer' is not defined

In order to support pickling and its %run feature, IPython makes a fake __main__ module. It looks like profile.run() explicitly imports __main__ to try to run the statement there. Honestly, it's been a thorn in our side for a long time, but it's a confusing bit of the code. Most interactive shells actually written in Python are going to have a similar need to do a workaround, since they already have a __main__. The regular shell is not written in Python, so it has no problem.

You will want to ask on the IPython list for future IPython questions.

  http://mail.scipy.org/mailman/listinfo/ipython-user

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
 that is made terrible by our own mad attempt to interpret it as though it had
 an underlying truth."
  -- Umberto Eco

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to