Skip to main content

Setting up Python/Pylab environment on machine with no root access

Often you will get the opportunity to run your code on a cluster, or even simply a guest computer, where you don't have root access (sudo does not work). The great thing about Python is that Python and any modules can be completely installed in user space (in your account) without disturbing any one else. In the computer I am accessing (Partners' HPC setup) they are hip and have all versions of Python. In case your setup doesn't you first want to do:
cd /tmp #(We have write access here)
curl -O http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2 #Or whatever the version you want
tar -xzf Python-2.7.5.tar.bz2 
cd Python-2.7.5
./configure --prefix=$HOME/local/Python #Or where ever you want it
make
make install
Make sure this directory is in your path such that you can call python.
#Add this path to .bash_profile
PATH=$HOME/local/Python/bin:$PATH
Python has a very neat, principled, way of storing its infrastructure (modules) that is detailed here. A quick way to figure out where this is is to do
python -m site --user-site
We need to add this to our path too. In my case is was ~/.local/bin
#Add this path to .bash_profile
PATH=$PATH:$HOME/.local/bin
Next you will want pip, which is a more modern package manager than easy_install, but first you'll want setup tools:
wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py -O - | python

cd /tmp #(We have write access here)
curl -O https://pypi.python.org/packages/source/p/pip/pip-1.3.tar.gz
tar -xzf pip-1.3.tar.gz
cd pip-1.3/
python setup.py install --user
Python informs us pip is now installed under
~/.local/bin/
. The magic from now on is to simply add --user to our pip install commands to install packages in our userspace. Let's try this out:
pip install matplotlib --user
pip install ipython --user
pip install --upgrade nose --user #(The server had an older version of nose)
And we have our environment. The HPC cluster I went into already had numpy and scipy, but you may need to install those as well.

Comments

Popular posts from this blog

A note on Python's __exit__() and errors

Python's context managers are a very neat way of handling code that needs a teardown once you are done. Python objects have do have a destructor method ( __del__ ) called right before the last instance of the object is about to be destroyed. You can do a teardown there. However there is a lot of fine print to the __del__ method. A cleaner way of doing tear-downs is through Python's context manager , manifested as the with keyword. class CrushMe: def __init__(self): self.f = open('test.txt', 'w') def foo(self, a, b): self.f.write(str(a - b)) def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self.f.close() return True with CrushMe() as c: c.foo(2, 3) One thing that is important, and that got me just now, is error handling. I made the mistake of ignoring all those 'junk' arguments ( exc_type, exc_val, exc_tb ). I just skimmed the docs and what popped out is that you need to return True or

Using adminer on Mac OS X

adminer is a nice php based sqlite manager. I prefer the firefox plugin "sqlite manager" but it currently has a strange issue with FF5 that basically makes it unworkable, so I was looking for an alternative to tide me over. I really don't want apache running all the time on my computer and don't want people browsing to my computer, so what I needed to do was: Download the adminer php script into /Library/WebServer/Documents/ Change /etc/apache2/httpd.conf to allow running of php scripts (uncomment the line that begins: LoadModule php5_module Start the apache server: sudo apachectl -k start Operate the script by going to localhost Stop the server: sudo apachectl -k stop