[Distutils] Disabling --single-version-externally-managed
Phillip J. Eby
pje at telecommunity.com
Sat Sep 1 20:07:57 CEST 2007
At 09:20 PM 8/31/2007 -0700, Toshio Kuratomi wrote:
>Just to illustrate what I'm trying to achieve. I've updated the Fedora
>Packaging Guidelines[1]_ to allow two versions of a package to coexist.
> I'll list here the sqlalchemy-0.4 and -0.3 build steps, filelists, and
>the output of the test-sql.sh script using this procedure. The end
>result is what we want but the build step to get there seem a tad
>fragile and kludgey. Since these are going to become guidelines for all
>of our python packages, I'd like to know if either: 1) there's a better
>way to do this or 2) the results I'm achieving are not expected and
>could disappear with a random upgrade of setuptools.
>
>.. _[1]: http://fedoraproject.org/wiki/PackagingDrafts/PythonEggs
Here's the thing: if you want multiple installed versions of a
package, *and* you want there to be a default version, then you
*have* to have easy_install (or zc.buildout, or some similar tool)
generate the startup scripts for anything that wants to use a
non-default version.
This is true irrespective of the formats of the versions involved,
whether they're zipfiles, directories, single-version, or
whatever. It's just the nature of the beast, due to the fact that
there is a global 'working_set' that lists the projects that are
currently on sys.path, and it is initialized when pkg_resources is
imported. (And currently, there is no way to *remove* a distribution
from the working set.)
Thus, if you want multiple versions *and* want to be able to select a
version after pkg_resources has been imported, you *cannot* have a
default version. In other words, the egg must not be on sys.path
when pkg_resources is imported. Then, pkg_resources can locate the
desired version and add it.
(By the way: "on sys.path" means, "is importable", not "is in a
directory on sys.path". An .egg file or directory in site-packages
is not "on sys.path" unless its filename is actually listed in
sys.path. A single-version egg in site-packages, however, *is* on sys.path).
More information about the Distutils-SIG
mailing list