views:

880

answers:

9

I just downloaded wxPython, and was running some of the sample programs from here. However, on every line that uses a variable from wx.*, I get a "Undefined variable from import error"

For example, the following program generates five errors on lines 1,4,8, and two on line 5:

import wx
class MyFrame(wx.Frame):
    """ We simply derive a new class of Frame. """
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title, size=(200,100))
        self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)
        self.Show(True)
app = wx.App(False)
frame = MyFrame(None, 'Small editor')
app.MainLoop()

The program, however, compiles and runs perfectly. I haven't made any significant modifications to pydev or eclipse, and the wxPython install is fresh.

+2  A: 

Some of the newer versions of pydev have a hard time tracking down imported names. It's probably nothing.

Report the bug to aptana, though no doubt they already know about it.

I frequently get this problem when working with packages I've just recently downloaded, and eventually the errors go away. Just recently with pygame.

Chris Cameron
I don't think this is a bug, although it may have been in January. See my answer below.
oob
With pydev 1.5.6.2010033101, today I still had the import error when trying to include networkx for the first time. The procedure you mentioned in your answer is what I have been using since Jan 2010 to overcome the issue. Occasionally simply restarting Eclipse has been enough (e.g. with pygame back in Jan 2010), though the interpreter remove/add works every time.
Chris Cameron
Also, I think I remember reading somewhere on the aptana site a recommendation to use the remove/add method you listed below as a solution.
Chris Cameron
A: 

I'm having the same problem. Is any solution for this problem available besides waiting for the devolpers to fix it?

kaju
A: 

I had the same problem and it went away when I updated to PyDev 1.5.6.

iku
+1  A: 

Use CTRL+1 key combination on error text and add #@UndefinedVariable or #@UnresolvedImport in the end of corresponding lines with errors, it will remove these warnings temporary. See this answer: http://stackoverflow.com/questions/2112715/how-do-i-fix-pydev-undefined-variable-from-import-errors#answer-2248987

shaman.sir
A: 

Try

wx = wx

Don't ask why. This approach (that I found when trying to break the problem in smaller parts) just seems to remove the wx undefined variables problem.

Juho
A: 

"wx = wx" solution worked for me. But that's pretty ugly. Also, it will not report if you actually use an invalid attribute of wx. That is, "wx.dafoo()" does not show up as an unresolved import.

If anyone knows how to fix this without adding this hack to every file that uses wx, please post.

sunspider
A: 

import wx

from wx import wx #@UnresolvedImport

will fix. N3nn

N3nn
+3  A: 

This happened to me. I had installed PyDev and configured it and went on my merry way. A few months later, I installed wxPython and had this same problem. An easy way to fix is in eclipse:

Window -> Preferences -> Pydev -> Interpreter - Python

Just remove the default interpreter and add a new one (it can be the same one you had before). Pydev/Eclipse searches through your Python Installation directory and adds the correct paths to your PYTHONPATH. I restarted and all was well. I noticed it added

C:\Python26\lib\site-packages\wx-2.8-msw-unicode

So you could probably just add that to the PYTHONPATH instead of going through all the above, assuming that path is where this directory is installed.

By the way, I am using:

  1. Eclipse Helios
  2. Pydev 1.6.2.2010090812
  3. Python 2.6
  4. wxPython2.8-win32-unicode-2.8.11.0-py26

But I think this should be a pretty general solution to the problem.

oob
Cheers! Note for OsX: the wxpython installer apparently puts wxpython in a different location -- after adding "/usr/local/lib/wxPython-unicode-2.8.11.0/lib/python2.6/site-packages/wx-2.8-mac-unicode" it worked for me
snowchicken
A: 

PyDev finds the references when you setup the interpreter in

Window -> Preferences -> Pydev -> Interpreter - Python

If wxPython was not in your site-packages directory when you first setup the interpreter, then the references to the wx objects and names will not be known to the editor lookup function. To fix this, remove the interpreter from

Window -> Preferences -> Pydev -> Interpreter - Python

and then select new. Re-add the python installation again and press apply. At this time, Pydev will import all of the site-package objects again and should populate the lookup dictionary. You'll want to restart Eclipse for changes to take place.

Davejavu