Normally when installing a package that I'm working on I'm using a virtualenv so it's installed within that environment only, but I wanted to test part of my code that was using ssh to run a command that I didn't want to install system-wide. Creating a virtualenv for the test-user and activating it before running the command via ssh seemed excessive (and maybe not possible - I didn't try) but it turns out that you can install packages at the user-level using the 'setup.py' file.
In this case I wanted the setup.py to create a command-line command called 'rotate' and install it in the user's ~/bin folder so I could run it something like this:
ssh test@localhost rotate 90
First I changed the .bashrc to add the bin folder to the PATH:
PATH=$HOME/bin:$PATH
This has to be added to the top of the .bashrc file because the first thing there by default is a conditional that prevents it from using the things in the .bashrc file:
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
Next I changed into the directory where the package's setup.py file was and installed the package:
python setup.py install --install-scripts=$HOME/bin --user
The --user option is what tells python to install it for the local user instead of /usr/local/bin and the --install-scripts tells it where to put the commands it creates. Without the --install-scripts option it will install it in .local/bin so another option would be to change the PATH variable instead:
PATH=$HOME/.local/bin:$PATH
But I use ~/bin for other commands anyway so it seemed to make more sense to put it there.
OS : Ubuntu 14.04.1 LTS
Python: 2.7.6