python's setuptools (eggs) vs ruby's gems survey/discussion

Alia Khouri alia_khouri at yahoo.com
Sun Jun 1 04:47:55 EDT 2008


Can we open up the discussion here about how to improve setuptools
which has become the de facto standard for distributing / installing
python software. I've been playing around with ruby's gems which seems
to be more more mature and  usable.

>From my perspective, the relative immaturity of setuptools and its
simultaneous widespread use is a clear python weakness and can make
python less easy to absorb than it should be.

A few questions (please add more) so far are:

(1) Should setuptools be standard?

(2) What bugs you most about the current featureset?

(3) Which features do you need the most (list in order of need)?

(4) Shouldn't we just port gems to python?

(5) What's the best community process to improve setuptools?

(6) What's your ideal conception of the 'standard python package
manager?


To give this discussion some ammunition, I will post the output of the
different '--help' for either tool:

==================================================
SETUPTOOLS
==================================================


C:\TMP>easy_install --help

Global options:
  --verbose (-v)  run verbosely (default)
  --quiet (-q)    run quietly (turns verbosity off)
  --dry-run (-n)  don't actually do anything
  --help (-h)     show detailed help message

Options for 'easy_install' command:
  --prefix                       installation prefix
  --zip-ok (-z)                  install package as a zipfile
  --multi-version (-m)           make apps have to require() a version
  --upgrade (-U)                 force upgrade (searches PyPI for
latest
                                 versions)
  --install-dir (-d)             install package to DIR
  --script-dir (-s)              install scripts to DIR
  --exclude-scripts (-x)         Don't install scripts
  --always-copy (-a)             Copy all needed packages to install
dir
  --index-url (-i)               base URL of Python Package Index
  --find-links (-f)              additional URL(s) to search for
packages
  --delete-conflicting (-D)      no longer needed; don't use this
  --ignore-conflicts-at-my-risk  no longer needed; don't use this
  --build-directory (-b)         download/extract/build in DIR; keep
the
                                 results
  --optimize (-O)                also compile with optimization: -O1
for
                                 "python -O", -O2 for "python -OO",
and -O0 to
                                 disable [default: -O0]
  --record                       filename in which to record list of
installed
                                 files
  --always-unzip (-Z)            don't install as a zipfile, no matter
what
  --site-dirs (-S)               list of directories where .pth files
work
  --editable (-e)                Install specified packages in
editable form
  --no-deps (-N)                 don't install dependencies
  --allow-hosts (-H)             pattern(s) that hostnames must match
  --local-snapshots-ok (-l)      allow building eggs from local
checkouts

usage: easy_install-script.py [options] requirement_or_url ...
   or: easy_install-script.py --help

==================================================
GEMS
==================================================
C:\TMP>gem --help

  RubyGems is a sophisticated package manager for Ruby.  This is a
  basic help message containing pointers to more information.

    Usage:
      gem -h/--help
      gem -v/--version
      gem command [arguments...] [options...]

    Examples:
      gem install rake
      gem list --local
      gem build package.gemspec
      gem help install

    Further help:
      gem help commands            list all 'gem' commands
      gem help examples            show some examples of usage
      gem help platforms           show information about platforms
      gem help <COMMAND>           show help on COMMAND
                                     (e.g. 'gem help install')
    Further information:
      http://rubygems.rubyforge.org

C:\TMP>gem help commands
GEM commands are:

    build             Build a gem from a gemspec
    cert              Manage RubyGems certificates and signing
settings
    check             Check installed gems
    cleanup           Clean up old versions of installed gems in the
local
                      repository
    contents          Display the contents of the installed gems
    dependency        Show the dependencies of an installed gem
    environment       Display information about the RubyGems
environment
    fetch             Download a gem and place it in the current
directory
    generate_index    Generates the index files for a gem server
directory
    help              Provide help on the 'gem' command
    install           Install a gem into the local repository
    list              Display gems whose name starts with STRING
    lock              Generate a lockdown list of gems
    mirror            Mirror a gem repository
    outdated          Display all gems that need updates
    pristine          Restores installed gems to pristine condition
from files
                      located in the gem cache
    query             Query gem information in local or remote
repositories
    rdoc              Generates RDoc for pre-installed gems
    search            Display all gems whose name contains STRING
    server            Documentation and gem repository HTTP server
    sources           Manage the sources and cache file RubyGems uses
to search
                      for gems
    specification     Display gem specification (in yaml)
    uninstall         Uninstall gems from the local repository
    unpack            Unpack an installed gem to the current directory
    update            Update the named gems (or all installed gems) in
the local

                      repository
    which             Find the location of a library

For help on a particular command, use 'gem help COMMAND'.

Commands may be abbreviated, so long as they are unambiguous.
e.g. 'gem i rake' is short for 'gem install rake'.

=======================================================

Hope this discussion can be constructive. In any case, I do appreciate
the effort that went into creating setuptools (Thanks Phillip J.
Eby :-). It's existence is clearly better than otherwise.

Best,

AK



More information about the Python-list mailing list