Update 2010-10-10: Added Eric.
Update 2010-10-10: Updated PyCharm, added Komodo
I’m currently a user of WingIDE, but sometimes I feel the need for something better, mainly something that is a bit more stable. WingIDE often hangs when switching projects, sometimes the file listing decides that you must double-click on the expand arrow instead of just click on it, etc. It still doesn’t have macros despite this being a much requested feature (how hard can it be to add, really?) and I never really get the hang of the SVN integration, so I just ignore it. And they keep recommending me to use WingIDE’s separate instance of GTK instead of the System GTK, which is daft. Their designs are ugly, and it should work with the system GTK so it looks the same. Anything else is just silly.
But all in all it’s pretty good. I’m not unhappy with WingIDE. But I just have the feeling that there should be something better. So I’m testing other IDE’s. And so far my conclusion is that: No, WingIDE still is the best. But there are many Python IDE’s out there, so maybe I missed some. So this is your chance to tell me that there is one I’ve missed, or tell me that a feature I’m missing from the ones I tested actually *do* exist.And from this testing, this is the features I’d really want, but only WingIDE has:
1. Project management.
You know, adding to a project which files actually are included in the project. I probably could accept if it looks at what is versioned and ignored everything else, but I can’t just tell an IDE that this is my base root directory for the project, and then have the IDE analyze every single file under that directory. I use buildout, and my project directories often include things like Varnish and NGinX, which gets downloaded and compiled as a part of the buildout. I don’t want my editor to care about those files. However, I *do* want it to care about a lot of other files in that directory, so I can’t just select a subdirectory either. No, I do really need a project, not just a workspace, to which I specifically add files and directories, and say which Python interpreter to use, etc.
All of the IDE’s below fail on this count, some more, some less.
2. CTRL-click to go to definition
With WingIDE I can just CRTL-click on any Python variable, and I’ll go to the definition. If I set up the project correctly (see point 3) this includes anything I have imported from no matter what. WingIDE fails sometimes on this, but works most of the time, unless you just ‘from X import *’. Of the IDE’s I tested below I think only PyCharm supports this.
3. Get paths from a script
WingIDE as well as PyCharm has the possibility to analyze a Python-file and look for additions to sys.path, add them to the project and analyze them. That is for me most helpful for the CTRL-Click function above. I couldn’t find this in any other IDE.
4. Remote debugging support
WingIDE can debug processes via TCP/IP. The neat thing with this is that you can write modules for your web framework, which means you can debug it without running the whole web framework as a subprocess of your editor. If your webframework is small, the subprocess technique is feasible. With Plone it is not. Also you can connect and debug your customers server. Nice! But, yes, this is a minor requirement compared to the others. I can survive without it.
So here are the results of the Swedish Jury:
PyScripter
Is brain-dead windows only. FAIL.
SPE (Stanis Python Editor) and Spyder
Yeah, I know that’s two different editors. But I have the same to say about them. They both seem to be really nice little editors, starts fast and has a decent feature set. But neither of them actually have any sort of project management. They are often listed amongst IDE’s, but they aren’t IDE’s, they are editors.
PyCharm
Annoyingly written in Java, this is a really good IDE with loads of stupendous features. However, it is very slow in certain cases, and one of the reasons is because the project handling is lacking. Once again you only set a root directory for the project, and it will import and analyze everything in there. For a small Plone project this took some 15 minutes on my computer, and PyCharm ended up using 800MB of memory. Not fun. Especially since many buildout development projects involve something called “Omelette”, which will make virtual links to all your eggs, in a nice hierarchical structure that’s easy to browser and search through. PyCharm will take your start script, add all the eggs in the path to the project and analyze them, and then analyze everything in the omelette directory again, in practice analyzing all files twice. Now, you say, you don’t need an omelette directory when using PyCharm, and you are right. But in a typical project, most people will not use PyCharm. After some digging though, I found that you could go into the settings and there in “Project structure” exlude directories. So all is good. By why isn’t that option already in the file list? Weird.
PyCharm doesn’t support remote debugging. But that is as mentioned a minor feature. It seems really good, even if it chews up memory like crazy, and stays on the list of things to check out further. Too bad it doesn’t hook into Ubuntu’s UI settings, but uses different fonts for menues etc, it makes it look like shit, but I can survive that.
Eric
Eric is complex. Indeed, confusing. This is another failure of usability in open source. The weirdest thing is that when creating a project, it also tries to create a skeleton for Python. But obviously, the first thing I do to test is to start using the editor in an ongoing project. Maybe it’s possible to create your own project templates, but an empty one would be nice as default. Eric does have the feature to add specific files and folders to the project, hooray! It also supports remote debugging. I can’t find a way to add existing paths to the project though, not even manually.
Komodo
Due to the many recommendations I bumped up Komodo to the next thing to look at. Expensive, but nice. Looks good, works smoothly. It doesn’t let you exclude files from the project on a per-file or directory basis, but it let’s you set up a filter for which files to exlude which is a bit more involved, but it has the setting both per project and globally, so you only need to set it up and it will work for new projects. Nice. But with point 3 above, the support is not perfect. Or rather, there is no support, but what I can do is to have the buildout create a custom python interpreter with the sys.path set up correctly. I usually do this in most of my buildouts using he zc.recipe.egg recipe. By selecting that interpreter, Komodo will use it’s sys.path as a basis for analyzing files. That would do very nicely, if this was a per-project setting, but it isn’t. But it’s good enough to continue looking into Komodo. Another option is to use the Omelette recipe that confuses PyCharm, and add the Omelette directory it to the per-project sys.path, but that requires Omelette in thebuildout, but that’s a small concession to make I guess.
It’s support for having a remote directory as the project directory is intriguing, as well.
EMACS and vi
After articles in Python Magazine I decided to try this out. I hate both EMACS and vi, but it’s worth a try, they have GUI modes, and can be configured to have key-bindings that are not insane, etc. But the fact is that both of them still ended up feeling like editors from the 1970′s and you still feel like 40 years of user interface development somehow just got lost. Even if most commands now can be assigned to reasonable keys, things are still called “yank” and “pull” instead of “copy” and “paste” and you still end up in weird modes you can’t get out of except by pressing escape two hundred times. Yes, I’m sure both are great if you dedicate your life to learning all their intricate features, but in the meantime the rest of the computer world have been trying to teach computers how to understand people, not the other way around. Both EMACS and vi sucks. If you use them: Get your head out of the 70′s you bloody hippie.
So… what now?
Did I misunderstand the editors above? Is there other editors I should try? Tell me in the comments.
Filed under: plone, python Tagged: editor, IDE
