Stories
Slash Boxes
Comments
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

Alias (5735)

Alias
  (email not shown publicly)
http://ali.as/

Journal of Alias (5735)

Sunday October 15, 2006
11:58 AM

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

[ #31323 ]

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.

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.