Find file
Fetching contributors…
Cannot retrieve contributors at this time
28 lines (18 sloc) 1.88 KB

I've started to do some Clojure in my spare time. The default tool adopted by the community to manage projects is leiningen. For those of you who don't know what lein is, it's a tool to automate your Clojure project: it will boostrap a new project, install the dependencies, and there's a plugin mechanism to extend the default possibilities of the tool.

One of the nice feature of the tool is the checkouts directory. From the FAQ:

If you create a directory named checkouts in your project root and symlink some other project roots into it, Leiningen will allow you to hack on them in parallel.

For Python projects at $work I use virtualenvwrapper to easily work on them without having to deal with conflicting dependencies. When I need to change a library that is used by one of the project, usually I go to the virtualenv directory and create a symlink so it uses the one I'm editing.

What I really want is a mechanism similar to lein, where I can have a checkouts/ directory inside the main project, where I can clone a library or create a symlink. Since virtualenvwrapper provides a hook mechanism, I wrote a small hook inside ~/.virtualenvs/postactivate:


    # move to the directory of the project
    proj_name=$(echo $VIRTUAL_ENV|awk -F'/' '{print $NF}')

    cd $proj_path

    if [ -d checkouts ]; then
        for ext in $(ls checkouts); do
            export PYTHONPATH=proj_path/checkouts/$ext:$PYTHONPATH

Then, when I type workon $project_name in my shell, the environment is activated, I'm moved to the right directory, and the library inside the checkouts/ directory are added to my PYTHONPATH.