[Distutils] Get install prefix for module at runtime
Wolodja Wentland
wentland at cl.uni-heidelberg.de
Sun Oct 4 13:04:56 CEST 2009
On Thu, Sep 17, 2009 at 21:05 +0200, Wolodja Wentland wrote:
> On Thu, Sep 17, 2009 at 18:51 +0200, Tarek Ziadé wrote:
> > you might be able to alter it on-the-fly by overriding the build_py command
> > instead of the install command
>
> That worked perfectly! Thanks again for the help and pointers you gave
> me. I really appreciate that.
>
> The solution i came up with is:
>
> --- snip ---
> class build_py(_build_py):
> """build_py command
>
> This specific build_py command will modify module 'foo.build_config' so that it
> contains information on installation prefixes afterwards.
> """
> def build_module (self, module, module_file, package):
> if type(package) is StringType:
> _package = string.split(package, '.')
> elif type(package) not in (ListType, TupleType):
> raise TypeError, \
> "'package' must be a string (dot-separated), list, or tuple"
>
> if ( module == 'build_info' and len(_package) == 1 and
> package[0] == 'foo'):
> iobj = self.distribution.command_obj['install']
>
> with open(module_file, 'w') as module_fp:
> module_fp.write('# -*- coding: UTF-8 -*-\n\n')
> module_fp.write("DATA_DIR = '%s'\n"%(
> os.path.join(iobj.install_data, 'share')))
> module_fp.write("LIB_DIR = '%s'\n"%(iobj.install_lib))
> module_fp.write("SCRIPT_DIR = '%s'\n"%(iobj.install_scripts))
>
> _build_py.build_module(self, module, module_file, package)
> --- snip ---
>
> I might change the 'detect my module' logic a little because i rely on
> python short circuit evaluation a bit too much.
>
> I have some final questions:
>
> 1. Is the distutils API i am using here likely to change?
>
> 2. Is there a better way to access install_{lib,scripts,data} than going
> through the install command object available from distribution?
>
> 3. Could you include something like this in distutils? My idea on how to
> handle this would be to define an additional argument 'foo_bar' for
> core.setup() which will take a user defined dotted module name in
> which information like this will be saved.
>
> So if a user defines:
>
> core.setup( ...
> foo_bar : 'foo.build_info',
> ...
> )
>
> A file lib_prefix/foo/build_info.py will be injected into the
> library or an already one would be altered according to user defined
> string templates.
>
> Something like this would end module.__file__ hacks once and for all
> and is IMHO a much cleaner way to advertise this information to
> libraries/application than trying to take care of this externally.
Bump.
Is this approach a feasible one, or am I better served by using the
Distribute API, which I am not familiar at this point?
What about the distutils internal I am using here?
TIA
Wolodja
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 835 bytes
Desc: Digital signature
URL: <http://mail.python.org/pipermail/distutils-sig/attachments/20091004/b611842c/attachment.pgp>
More information about the Distutils-SIG
mailing list