[SciPy-dev] what the heck is an egg ;-)
Prabhu Ramachandran
prabhu at aero.iitb.ac.in
Sat Dec 1 12:37:25 EST 2007
Joe Harrington wrote:
>> setup.py and using distutils is not novel: this is the standard way to
>> distribute python packages to be built for years (distutils was included
>> in python in 2000, 2001 ?).
>
> Well, it's a matter of perspective, and the perspective I take is that
> of a new user to Python, or even a non-Python-using system manager who
> is installing numpy and friends for others to use. To them, *anything*
> that is not a tar.gz, RPM, or Deb is novel, and most would not dare to
> use even an un-novel tar.gz in their OS directories. Then we say, here,
> execute this setup.py as root, it's code for an interpreted language and
> you have no idea what it will do. Well, that's pretty terrifying,
> especially to the security-conscious.
[...]
> But, a plethora of packagers is not our situation. It would help the
> inexperienced (including the aforementioned system manager, who will
> never be experienced in Python) to have some plain talk about what these
> Python-specific installers do, and how to use them to install,
> uninstall, and automatically update. It can probably be knocked off in
> about a page per installer, but it has to be done by someone who knows
> them well.
Here is what I do, maybe it will help.
I'll skip the blah about eggs and keep this focussed. The nice thing
about easy_install is that it will find packages for you, deal with
dependencies, optionally build them if you need to and install packages
for you. How best you use them depends on what you want to do.
I'll cover the case for an ubuntu gutsy user who does not want a system
wide install but wants to get a Python package installed. Lets say you
want to install nosetests on ubuntu gutsy and don't want the one shipped
or lets imagine said package isn't shipped. Here is how I have things
setup for *myself*.
Tell easy_install where you want stuff installed:
$ cat ~/.pydistutils.cfg
[install]
install_lib = /home/prabhu/usr/lib/python
install_scripts = /home/prabhu/usr/bin
I have ~/usr where I put all packages I need that don't get installed on
the system. If you use this you may want to do this:
$ mkdir -p ~/usr/bin
$ mkrid -p ~/usr/lib/python
Next, tell Python of the directory:
$ export PYTHONPATH=$PYTHONPATH:~/usr/lib/python
$ export PATH=~/usr/bin:$PATH
# Add this to your .bash_profile or equivalent.
You need to have easy_install installed. So you can install setuptools
via apt using
# apt-get install python-setuptools
Now if you have a direct connection to the internet you are set:
$ easy_install nose
This should check pypi grab nose for you install it along with any
dependencies. If you are behind a proxy do this:
$ export http_proxy=http://my.proxy.edu:80
It should work.
Lets say you want to install enthought.traits from the ETS-2.6.0b1.
Here you need to tell easy_install where to get the stuff from. Binary
eggs are available for ubuntu gutsy so this is really trivially easy to
do like so:
easy_install -f http://code.enthought.com/enstaller/eggs/ubuntu/gusty/
enthought.traits
Thats it.
For mayavi2 things aren't so easy since we don't package VTK as eggs
(yet), enthought has something to do this but it isn't baked enough yet
AFAIK. So you need to install the dependencies from the ubuntu universe
repo. I think this will do:
# apt-get install python-wxgtk2.6 python-numpy python-vtk
Now you are all set to try mayavi2:
easy_install -f http://code.enthought.com/enstaller/eggs/ubuntu/gusty/
enthought.mayavi
Thats it!
Now, lets say you want to remove the packages. Do this:
easy_install -m enthought.mayavi
This doesn't delete anything but "disables' the egg. It does not purge
all its dependencies. But removing them isn't a big deal. Since all you
really need to do is:
cd ~/usr/lib/python
rm -rf enthought*
edit easy-install.pth
# Remove all the packages listed in the text file.
Or easier:
cd ~/usr/lib/python
easy_install -m enthought.*
rm -rf enthought.*
That will remove all the 15 odd enthought eggs.
If you want a system wide install on Debian, its easy. Lets say you
want nosetests:
easy_install --prefix=/usr/local nose
Likewise for the others.
I think this should get you started. It does reflect the way I use it
but it seems to work OK for me.
Remember that this is easiest when binary eggs available for your
platform. For pure python packages it is unlikely there will be
problems. For for more complex stuff like scipy/tvtk/kiva etc. it isn't
always as simple. Everything isn't perfect yet but it is quite nice and
convenient when it does work.
HTH.
cheers,
prabhu
More information about the SciPy-Dev
mailing list