[Distutils] Egg support for system packages (including bdist_wininst)
Phillip J. Eby
pje at telecommunity.com
Thu Dec 22 16:42:41 CET 2005
At 12:48 PM 12/22/2005 +0100, M.-A. Lemburg wrote:
>I'd just wish that this would be the default and the .egg ZIP
>file installation approach be made an option.
>setuptools would then finally be compatible to the rest of the
>distutils world again and avoid all the added overhead and
>problems of ZIP file imports.
>Perhaps you could have two commands, e.g. the default install
>would create the normal package directory (with added .egg-info
>dir) and a new install_eggfile to install the .egg ZIP file
The only way this could happen is to add a manifest of installed files, in
order to allow uninstallation and upgrades to be made safe in the absence
of a packaging system. The .egg file/directory technique currently makes
uninstallation as simple as "rm -rf package-version.egg", and multi-version
installs work with no special action.
Note, too, that using .egg files or directories means that installation
*never breaks existing programs* as long as they have specified their
dependencies accurately. Traditional distutils installation is destructive
in the absence of a system packager.
However, if you *have* a system packager, then you should not be using
"setup.py install" anyway, so I'm not sure I see how this is an issue. You
should be simply building system packages. And it's quite straightforward
to make most bdist_* commands work: bdist_wininst and bdist_dumb work with
setuptools "out of the box" because they call the "install" command
internally; only bdist_rpm required some monkeypatching to add
--single-version-externally-managed, because it writes script files that
run "install" later.
Anyway, I guess what I'm saying is, if you want traditional distutils-style
installation, you should use system packages, since they're the only way to
allow uninstallation and avoid corrupted upgrades. Otherwise, you should
use .egg files or directories, in which case easy_install (and in the
future, nest) will be your package manager.
More information about the Distutils-SIG