pip 0.03 released. Making it easy to install non-CPAN code

Alias on 2006-10-15T16:58:20

I've wanted to have this working for the longest time.

I write about as much proprietary code for clients as I do modules for CPAN (although the CPAN modules are done in smaller parts).

If anyone has seen the structure of my CPAN repository, I use the same structure for commercial code.

For each client, I have a repository with a trunk, that holds the main dists, a tools directory, and a releases directory, which holds master copies of the distribution tarballs, as they are created.

Since I moved to svn this also means that I can then pull releases on remote machines directly out the repository, and every release has an identifying URI.

As time has gone on, and I write larger and larger commercial apps, I find I want my commercial code to match my CPAN code more and more.

Now, I don't always have time to doc and test quite as thoroughly as for CPAN code, and it's the client's money so sometimes I skimp a bit if the implementation is clean. I'm moderately happy to do this.

But one area that I find really hurts me is that more and more I want to break up commercial distributions into smaller parts, in a CPAN-like resusable fashion.

But since some of my commercial apps are heading into the 20-30 distribution territory, it gets quite painful to install them. And remember that each of these 20-30 dists are going to have a number of CPAN dependencies as well.

What I've needed, at the very least, has been a way to take a list of distributions, and install them in order, while also recursing into their CPAN dependencies.

So far the only way I've seen to do this is via a minicpan mirror and the CPAN::Mini::Inject.

But maintaining a minicpan mirror repository in this way stinks to me of sysadmin work, and I'm a terrible sysadmin, so I've wanted a way to just install the dists directly.

With the creation of the LOCAL reserved CPAN author and the CPAN::Inject module to inject a distribution into the local CPAN cache without needing a mirror, I can finally achieve this.

With a mind to needing more functionality later, I've created an initial console implementation of this process of installing a set of distributions in order, but that I can extend later to add more functionality.

I've created a simple plan file, called a .p5i file (for Perl 5 Installer) that looks something like the following. Module::Plan::Lite Process-0.17.tar.gz YAML-Tiny-0.10.tar.gz subdir/Dist-Whatever-1.00.tar.gz The first line is a class header, that specifies the class that implements the plan (Module::Plan::Lite comes by default, but I'll add more later), and each of the lines below is the name of a distribution tarball (where relative paths are relative to the .p5i file) to install, in the order they are to be installed.

This is quite rudimentary, but now I can at least keep a list of distributions in a simple file and then just run... > sudo pip dir/program.p5i And all those distributions will be installed in order, and the installer will automatically recurse up into CPAN modules that are dependencies of your third-party code and install them as normal.

This isn't quite as low-maintenance as I want, but it does reduce of the bulk of the typing.

It also means that down the track a bit, once we get access to cross-platform filename association capabilities, I can associate .p5i with pip and make a clickable cross-platform installer script for Perl 5 source installs, whether they are CPAN or non-CPAN or mixed.

This is also the first console application where I've moved the bulk of the console interface part of the code to a matching module, pip.pm.

So finally you can just install it by using > sudo cpan pip

... and it will just Do What You Mean.

Finally, please note that this is a bit experimental still, and so a few things might move a bit yet.

But the basics of this should work just fine.