Wingware's Wing IDE is available in three editions: Professional, Personal, and Wing IDE 101. All versions will run on Windows, Mac, and Linux, and all support the 2.x versions of Python, as well as Python 3.0 and 3.1. (I tested with Python 2.6.) The Professional version is the most expensive and of course the most feature-rich. The Personal Edition, for noncommercial and educational uses, has slightly fewer features but is low-priced. The free edition, being free, does not include features like autocompletion, multithreaded debugging, or remote debugging. (A feature comparison chart is available at the Wingware website.) I tested the Professional edition, version 3.2.9-1 using the IDE's 30-day trial period.

The Wing IDE layout is straightforward, with the editor window being its central fixture. Supporting panes, source browser, runtime output and debug panes and so on, are arranged on the periphery. In the lower right is the eminently useful Source Assistant pane, the Wing IDE's answer to call tips. Begin typing, say, a function call, and the prototype and docstrings information for the corresponding functions are displayed in the Source Assistant. Continue typing, and the likely matches are appropriately reduced. Also, when you click a function name anywhere in the editor (whether at a definition point or a reference point), the function's information is displayed in the Source Assistant. If you select a method, and that method has overridden a parent class method, the Source Assistant displays a clickable link for the location of the overridden method.

Wingware's debugger is highly configurable. For example, you can set the debugger to stop when an exception is raised, but before the except or finally clauses have run; or you can configure the debugger to let those clauses run and then halt execution. Also, you can configure the debugger's watch system to display an object's content only when that object is in context, or hold a reference to the object and show its contents regardless of the current context.

The debugger can handle multithreaded applications, when debugging the target application is halted by, say, a breakpoint, by default the debugger stops all threads and indicates which thread caused the suspension. However, this is configurable so that, if one thread hits a breakpoint, the others can continue to run.

Wing IDE

The Wing debugger also supports remote debugging. You have to import a debugging module at the beginning of the target application, the import loads code that provides the target side of the host/target communication. This is a snap if you're remotely debugging an application on the local system. To debug on a separate machine, you must first install a debugger "core" file. Also, you have to define File Location Maps in the IDE. These maps are the means by which the debugger can match paths to source files on the local machine with paths to corresponding files on the target. Luckily, this process is well documented.

Although Wingware does not include any built-in GUI development capabilities, the documentation has how to information for several popular Python GUI toolkits, including wxPython, PyQt, and PyGTK. Similarly, the documentation includes plenty of information about working with web development frameworks, such as TurboGears, Zope, Django and others. In particular, the documentation warns that Django's feature for launching a subprocess to manage web requests can confuse the Wing debugger, but describes various remedies. Some hyperlinks in the documentation lead not to other help pages, but rather activate specific components in the IDE that the documentation is describing. This is particularly handy, instead of searching through menus for a particular feature, the help system guides you right to it.


Wingware does not support Jython or IronPython, at least, not in the debugger. The Wingware engineers explained that supporting those variants would require significant rewrites in the debugger, and they had not received enough requests to warrant that. Still, if your development language is "regular" Python, Wing is a fine IDE, and its documentation and support for frameworks is top notch.