blob: 40e37cc93b252da2cc029933e4d63573e8e6b713 (
plain) (
tree)
|
|
I've started to do some Clojure in my spare time. The default tool
adopted by the community to manage projects is
[[http://leiningen.org][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
[[https://github.com/technomancy/leiningen/blob/preview/doc/FAQ.md][FAQ]]:
#+BEGIN_QUOTE
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.
#+END_QUOTE
For Python projects at [[http://www.saymedia.com/careers][$work]] I use
[[http://virtualenvwrapper.readthedocs.org/en/latest/][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*:
#+BEGIN_SRC sh
#!/bin/bash
# move to the directory of the project
proj_name=$(echo $VIRTUAL_ENV|awk -F'/' '{print $NF}')
proj_path=/home/vagrant/src/$proj_name
cd $proj_path
if [ -d checkouts ]; then
for ext in $(ls checkouts); do
export PYTHONPATH=proj_path/checkouts/$ext:$PYTHONPATH
done
fi
#+END_SRC
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*.
|