[Distutils] easy_install: bugs with pathing and multi-version
Phillip J. Eby
pje at telecommunity.com
Sat Mar 18 04:07:29 CET 2006
At 10:11 PM 3/16/2006 +0000, Maris Fogels wrote:
>All of our applications are installed in a flat structure; an
>application directory is one big file-soup. The applications are so
>large that we do not have the budget to correct them, so I must
>emulate this flat structure in the installation target directory. The
>emulations requires the use of a setup.cfg and the distutils '$base'
>varible:
>
># example setup.cfg
>[install]
>install-base=/data/myproject
>install-lib=$base
>install-scripts=$base
>install-headers=$base
>install-data=$base
Note that easy_install only has the equivalent of an install_lib and
install_scripts; it doesn't install headers or any data other than package
data embedded in eggs.
>1. I unpacked the project sources in ~/src/myproject-1.0. When I tried to
>use easy_install from the ~/src directory it ignores the install-base
>directory
>setting specified in setup.cfg:
By design, easy_install only loads its own settings from ./setup.cfg. Any
setup scripts it runs will read their own setup.cfg files, but since
easy_install only runs "setup.py bdist_egg" on its targets,
installation-related settings have no effect.
This is intentional, since it's not good practice for a distributed
setup.cfg to customize the install location. If easy_install honored those
settings in the general case, it could result in quite a bit of chaos.
>The command works if I cd into the project directory itself, or if I
>specify the install directory with '-d'
Yes, those are the two ways you can do that.
>2. After successfully installing I attempted to uninstall the project
>as per the instructions on the EasyInstall wiki page, by changing the
>installed files to use a multi-install. It produces the following error:
>
>$ cd ~/src/myproject-1.0
>$ easy_install -m .
I suggest using "easy_install -m myproject", as this does not need to run a
setup script. Instead, it will simply detect that 'myproject' is already
installed and remove it from sys.path.
>zipimport.ZipImportError: bad local file header in
>/data/myproject/myproject-1.0-py2.3.egg
>
>If I re-run the 'easy_install -m .' command it works properly.
>Everything in the installed .egg file appears to work correctly, so I
>could not figure out why a ZipImportError was being raised by a
>working .egg.
Me either. The only time I've seen anything like that happen is with
Python 2.3 on a 64-bit platform. If you can figure out how to reproduce
it, please let me know.
>3. This may be a problem with distutils or setuptools, depending on
>how the install command is dispatched. I thought it would be nice to put the
>install record in the same directory I installed the other files in,
>so I appended the following to setup.cfg:
>
>record=$base/uninstall.dat
>
>Alas, $base is not expanded for the 'record' configuration option.
I think this feature can be added by simply inlcuding 'record' in the list
of variables that are expanded in line 125 of
setuptools/command/easy_install.py. If you have a chance to try that,
please let me know if it works for you, and then I'll add it to the
official version.
More information about the Distutils-SIG
mailing list