[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Amend Debian Python Proposal to Include More Python Metadata?



On Saturday, January 23, 2016 03:13:48 AM Scott Kitterman wrote:
> On Friday, January 22, 2016 10:54:54 AM Donald Stufft wrote:
> > > On Jan 22, 2016, at 10:36 AM, Piotr Ożarowski <piotr@debian.org> wrote:
> > > 
> > > to be honest, I still don't know what you're asking for. What do you
> > > want us to do? Patch 2.7's distutils?
> > 
> > Essentially, ensure that setuptools not distutils is used in a setup.py.
> > There are generally three kinds of setup.py files:
> > 
> > 1) Ones that use setuptools unconditionally - These ones you just leave
> > alone, they are already correct and you should already have a build
> > depends
> > on python-setuptools.
> > 2) Ones that conditionally use setuptools - These ones you just need to
> > satisfy whatever condition the setup.py uses to enable setuptools.
> > Typically this is just checking if setuptools is importable but sometimes
> > they use environment variables or similar.
> > 3) Ones that use distutils unconditionally - These ones you switch to
> > making them use setuptools instead of distutils.
> > 
> > Now, that’s the high level overview, there’s an easier, more automatic way
> > that could maybe just be added to pybuild (Not sure exactly how pybuild
> > 
> > works) where instead of invoking the setup.py as:
> >     python setup.py install (or whatever commands/args you’re passing)
> > 
> > You do it as (taken from pip):
> >     python -c "import setuptools,
> > 
> > tokenize;__file__='$PWD/setup.py';exec(compile(getattr(tokenize, 'open',
> > open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))” install
> > (or whatever commands/args you’re passing).
> > 
> > The thing is kind of ugly, but that will install things using setuptools
> > (just like pip does) regardless of if it imports setuptools or distutils
> > in
> > it’s setup.py file.
> 
> I decided to work on switching something I'm upstream for from distutils to
> setuptools today (since hey, it's the future) and discovered there aren't
> three kinds as listed above.  There are four:
> 
> 4) Packages that use distutils features that aren't available in setuptools
> and break horribly when switched.
> 
> As a result, I think I global change is a non-starter.
> 
> In my particular case, here's what I have (snipped from setup.py) to install
> man pages and a configuration file for an application written in python3:
> 
>     data_files=[(os.path.join('share', 'man', 'man1'),
>       ['policyd-spf.1']), (os.path.join('share', 'man', 'man5'),
>       ['policyd-spf.conf.5']), (os.path.join('/etc', 'python-policyd-spf'),
>       ['policyd-spf.conf']), (os.path.join('share', 'man', 'man5'),
>       ['policyd-spf.peruser.5'])],
> 
> The man pages end up in build/bdist.linux-x86_64/egg as does the config file
> if I remove the leading "/", but it still won't install it.
> 
> codesearch.debian.net claims 720 packages using data_files.  I doubt they
> are all using that pythonically, but they'll need to be checked for
> breakage.
> 
> The standard Google answer to the question of how to install man pages using
> setuptools seems to be use distutils.
> 
> No way can we do any automagic switching.

BTW, it's probably worth mentioning that this particularly burns because the 
setuptools describes this as a feature[1].

> Note, by the way, that this encapsulation of data files means that you can’t
> actually install data files to some arbitrary location on a user’s machine;
> this is a feature, not a bug. You can always include a script in your
> distribution that extracts and copies your the documentation or data files
> to a user-specified location, at their discretion.

Scott K

[1] http://pythonhosted.org/setuptools/setuptools.html#including-data-files

Attachment: signature.asc
Description: This is a digitally signed message part.


Reply to: