The Python module ruffus is a great companion for setting up pipelines easily and quickly. Unfortunately the development has been focused on Python 2.x ... until recently. There are some recent adaptations to get it running under Python 3.x but there are some modifications needed.
At first download the development version of ruffus:
$ svn checkout http://ruffus.googlecode.com/svn/trunk/ ruffus-read-only
Then use the 2to3 tool to for the code conversion:
$ 2to3 -w ruffus-read-only/
Let's check if this works by running a small script:
$ cd ruffus-read-only/
$ emacs -nw test.py
$ cat test.py
from ruffus import *
def first_task():
print("One")
@follows(first_task)
def second_task():
print("Two")
pipeline_run(second_task)
$ python --version
Python 3.2
$ python test.py
Traceback (most recent call last):
File "test.py", line 10, in
pipeline_run(second_task)
File "[...]/ruffus-read-only/ruffus/task.py", line 2675, in
pipeline_run
pool_func = imap
NameError: global name 'imap' is not defined
As you can see 2to3 did not do the full job. But the code needs only a small adaptation to be Python 3.x compatible (it is a tiny problem due to changes in itertools):
$ cp ruffus/task.py ruffus/task.py.org
$ emacs -nw ruffus/task.py
$ diff ruffus/task.py.org ruffus/task.py
2675c2675
pool_func = imap
---
> pool_func = map
$ python test.py
One
Job completed
Completed Task = first_task
Two
Job completed
Completed Task = second_task
Now it works!


