Friday, January 22, 2016

PyDev 4.5.3: Debugger fixes and improvements in PyUnit view

PyDev 4.5.3 is now available for download.

This release was done in such a short notice from the last release because a critical issue was fixed in the debugger (although it also added a few improvements to the PyUnit view, making the history dropdown show more information on the run and providing a way to export the results of a run to the clipboard, which are pretty nice).

As a note, LiClipse users (especially those using dark themes) should benefit a lot from the latest release, as it themes the trees and tables scrollbars (with the support from https://github.com/fappel/xiliary), so, it's a highly recommended download ;)

Anyways, I'll take the chance to talk about the bug which actually triggered this release (which was https://sw-brainwy.rhcloud.com/tracker/PyDev/650):

The PyDev debugger by default will monkey-patch all the calls which create a new process to automatically connect the debugger to the spawned processes if those are also Python processes -- and it also monkey-patches the os.fork to connect the forked process to the debugger.

Now, in os.fork it always connected the new process to the debugger, as it expected the new process to be a Python process, but there's a catch here: on Linux, subprocess.Popen will first fork the current process and then will do an os.execvp to replace the forked process with a new process, but in the latest version this was making the debugger crash (although it's still not 100% clear to me why that same process wasn't crashing before as the debugger already did this in previous versions -- anyways, os.execvp did some incantation under the hood which crashed when the debugger was setup when it was doing something as subprocess.Popen(['uname', '-m']), which first forked the process, connected it to the debugger and then replaced it with the uname executable).

So, the actual fix was detecting that it was forking for a subprocess.Popen and refrain from setting up the debugger if it was not executing a new Python program ;)

Enjoy!

Thursday, January 14, 2016

PyDev 4.5.1: debug faster

PyDev 4.5.1 brings niceties such as an improvement on the code-completion so that properties declared with @property no longer show arguments parenthesis and Ctrl+1 can be used inside a bracketed statement to wrap/unwrap its contents over multiple lines (thanks to yohell). Also, the refactoring, parsing and search had some fixes, but the major changes were in the debugger.

The debugger is much faster and has optional Cython modules for even additional speedups.

In short, the debugger is overall 40% faster without Cython and 138% faster with Cython in the benchmarks created -- although in real world cases I expect even better gains as the benchmarks were done for the cases where the debugger has more overhead than usual.

Graphs with more details on the improvements may be seen at:

https://www.speedtin.com/reports/7_pydevd_cython (performance results with cython).

https://www.speedtin.com/reports/8_pydevd_pure_python (performance results without cython).

Also, the debugger backend is now also available through "pip install pydevd" (https://pypi.python.org/pypi/pydevd), so, it's easier to setup the remote debugging in a different machine (note that users shouldn't need to install the debugger, only if doing a remote debugging session).

As a note, I'd like to thank JetBrains, which helped on sponsoring the performance improvements in the PyDev Debugger (as it's also the debugger backend used by PyCharm).

For LiClipse users, 2.5.1 (just released too) includes the latest PyDev.

Tuesday, October 06, 2015

PyDev 4.4.0 released

PyDev 4.4.0 is now available for download

The main changes in this release include:

  • Improved PyDev Package Explorer to give more information when all elements are filtered -- it seems it was common for new users to end up in a state where there was no working set selected while having a working set filter...
  • Code completion improvements: when a parameter is typed in the docstring, assigning it to an instance gives proper code-completion results when accessing the instance.
  • Fixed issues dealing with ansi colors in the interactive console.
  • When autopep8 is applied as the code formatting engine, the region selected is used to specify the lines for formatting.
  • Minor improvements in the debugger.
For those using LiClipse, there's a critical fix dealing with TextMate/SublimeText bundles (and PyDev has also been upgraded), so, please upgrade...

Thursday, August 20, 2015

PyDev 4.3.0 (improved searching)

PyDev 4.3.0 is out now ;)

The main focus on this release was on ironing out the new search dialog (which makes searching even huge codebases almost instant).

Also, there was a high-priority fix which made the Python 3.x parser accept async and await as regular names and not only keywords.

LiClipse 4.3.0, which had several enhancements in its parsing structure to make the editor even faster was also released to include the new PyDev version.

And as always, thank you very much to the PyDev supporters which help on keeping the PyDev development going strong.

Tuesday, July 07, 2015

PyDev 4.2.0 released (improved searching and type inference)

PyDev 4.2.0 is out now.

This release improves the Python search capabilities to use Lucene indexes, which makes the searching faster.

This also means that actions which depend on searches such as the search for references (Ctrl + Shift + G) and hierarchy view (F4) became much faster as a result.

Also, the searches now have an improved results page which allows matches to be flattened and grouped by project, folders and modules. Also, the results page now allows additional filtering based on the module name.


As a note, LiClipse 2.2.0, also supports Lucene based searching now, adding support for searching other languages.

Also, this release continues on the path of improving code-completion when unpacking compound types (such as dicts, tuples, sets...), which should be really good now (but if I still missed some use-case, please report it to https://sw-brainwy.rhcloud.com/tracker/PyDev/).

This release also includes some bug-fixes, including a critical issue (which affected Linux users) which could lead to high CPU usage when using the vertical indent guides (see http://pydev.org for more information on the bug-fixes).

To finish, a special thanks to all the PyDev supporters (it definitely wouldn't be possible to keep PyDev going without your help -- for those that want to help supporting it, please access the related links at http://pydev.org).

Thursday, June 04, 2015

mu-repo 1.1.1 (cloning multiple git repositories)

One tool I use daily for my git workflows (which are almost always composed of several git repositories) is mu-repo (which is a tool written in Python for dealing with multiple git repositories), so, I'm happy to announce that version 1.1.1 has just been released with a workflow which allows cloning multiple git repositories.

See: http://fabioz.github.io/mu-repo/cloning/ for details.

Also, given that it's gaining some traction recently, I decided to spend some time to actually do a homepage for it to help newcomers (the README on Github was becoming too big already):

http://fabioz.github.io/mu-repo/

As a note, I believe even long time users may benefit from taking a quick look at the Tips & Tricks section ;)

p.s.: mu-repo can now be installed through pip: pip install mu-repo.

p.s.2: Kudos to http://www.mkdocs.org for providing a nice tool to build a homepage from Markdown docs :)

Wednesday, May 27, 2015

PyDev 4.1.0 (code completion improvements, Python 3.5 grammar)

Ok, PyDev 4.1.0 is out now.

Improvements in this release include supporting more use cases when unpacking lists/tuples/sets -- this is the current focus in PyDev right now: making its type inference/code-completion best in class ;)

Also, the new constructs on Python 3.5 are already supported in PyDev in its Python 3 grammar (i.e.: async/await, and @ matrix multiplication).

Another nice feature added in this release is that it's possible to select constructs to be folded by default when an editor is opened (as the image below shows):