[GRASS-dev] problem with CheckForWx in wxGUI

Michael Barton michael.barton at asu.edu
Sun Jul 27 03:17:55 EDT 2008


A little more investigation has shown this. The following code does  
not work on a Mac with new versions of wxPython.

def CheckForWx():
     """Try to import wx module and check its version"""

     majorVersion = 2.8
     minorVersion = 1.1

     try:
         import wxversion
         wxversion.select(str(majorVersion))
         import wx

The problem lies in wxversion.select. It is looking for the SOURCE  
CODE files in a BINARY wxPython installation. They simply are not  
there. Here is what happens if I run this in the Python interpreter.

 >>> import wx
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "//Library/Frameworks/Python.framework/Versions/2.5/lib/ 
python2.5/site-packages/wx-2.8-mac-unicode/wx/__init__.py", line 45,  
in <module>
   File "//Library/Frameworks/Python.framework/Versions/2.5/lib/ 
python2.5/site-packages/wx-2.8-mac-unicode/wx/_core.py", line 4, in  
<module>
ImportError: No module named _core_
 >>>

Note, it is checking for _core.py.
I have _core.pyo and _core.pyc, but not the source _core.py. I don't  
have any source files in this binary installation. It works fine and  
takes up less space I suppose. But this sequence ...

import wxversion
wxversion.select(str(majorVersion))
import wx

...fails not because I have the wrong version, but because I do not  
have the SOURCE files that it uses to check for the version. This is a  
bug in wxversion. It should be looking for _core.*, not a specific  
source file _core.py. If I disable version checking by putting a  
return at the beginning of CheckForWx(), wxgui loads and runs fine.  
But we should have a version check (though I don't know if we need to  
check it in so many modules; at startup should be enough.

The following code works fine.

def CheckForWx():
     """Try to import wx module and check its version"""

     majorVersion = 2.8
     minorVersion = 1.1

     try:
         #import wxversion
         #wxversion.select(str(majorVersion))
         import wx
         version = wx.version().split(' ')[0]
         if float(version[:3]) < majorVersion:
             raise ValueError('You are using wxPython version %s' %  
str(version))
         if float(version[:3]) == 2.8 and \
                 float(version[4:]) < minorVersion:
             raise ValueError('You are using wxPython version %s' %  
str(version))

This checks to make sure that the default wxpython installation is  
2.8.1.1 or higher. If not, it throws an error and does not load wxgui.

Michael






On Jul 26, 2008, at 12:42 PM, Martin Landa wrote:

> Micheal,
>
> 2008/7/26 Michael Barton <michael.barton at asu.edu>:
>>>>>> import wxversion
>>>>>> wxversion.select(str(2.8))
>>>>>> import wx
>>>>>> wx.__version__
>>>
>>> '2.8.8.1'
>>
>> This version check is failing with 2.8.8.0 on the Mac even if the  
>> correct
>> version is installed. It may be failing with other version too.
>> wx.__version__ looks for wxpython SOURCE (*.py) files that are not
>> currently being included in the wxpython binary installer for some  
>> reason.
>> The object files are correct and being installed (*.pyo).
>>
>> Why not just use wx.version()? It gives the correct response  
>> regardless of
>> whether the source files are installed or not.
>
> I changed CheckForWx() to use wx.version() instead of wx.__version__.
> Hope it helps.
>
> http://trac.osgeo.org/grass/changeset/32313
>
> and
>
> http://trac.osgeo.org/grass/changeset/32314
>
> Martin
>
> -- 
> Martin Landa <landa.martin gmail.com> * http://gama.fsv.cvut.cz/ 
> ~landa *



More information about the grass-dev mailing list