[Distutils] setup.cfg new format proposal

Sridhar Ratnakumar sridharr at activestate.com
Tue Sep 15 22:46:08 CEST 2009


On Mon, 14 Sep 2009 07:13:55 -0700, Glyph Lefkowitz  
<glyph at twistedmatrix.com> wrote:

>> So you can for example define a list of dependencies that changes wether
>> > you are under windows or linux, etc..
>>
>> OK. I've never had that situation. I'm sure someone has, but it
>> doesn't see common.
>
>
> Twisted actually has this.  On Windows, we need pywin32 to implement  
> many of
> the features which can be implemented with just the stdlib on Posix.  But
> this is the only thing I can imagine computing based on the execution
> environment.

I believe virtualenv requires pywin32. Maybe several other Python packages  
too.

> I may be missing some context, but I did about an hour of googling around
> before responding here, and for the life of me I can't find a simple  
> answer
> to the question: how do I currently programatically get the metadata out  
> of
> a distribution?

http://pypi.python.org/pypi/pkginfo/

> [...]  Before
> adding conditional support to setup.cfg I would want to have a separate
> 'metadata.py' whose responsibilities were clearer: just produce the
> metadata, don't do any pre-build steps.  Ideally that would be easy to  
> load
> correctly from setup.py as well.

I double users would follow this proposed convention. Once in a while, I  
stumble upon Python packages that do not even succeed at the "python  
setup.py" stage.

Even if they did, what prevents them from making metadata.py a little more  
sophisticated so as to introduce inadvertent bugs on other platforms?  
(Just today, argparse's new release broke on linux and mac, but not on  
Windows .. due to regex parsing behavior)

I vote for static metadata anyday.

> Inspecting metadata could also be made easier by having an API more like
> this for setup.py:
>
> d = Distribution(... metadata ....)
> if d.installing:
>     my_project.custom_prepare_for_build()
> d.setup()
>
> since you can't really tell what setup() is going to do until you've  
> already
> called it.

I doubt this would happen in practice even if widely suggested by  
distutils/setuptools.

> So finally, if there's still no standard programmatic way to get at the
> distribution metadata after setup.cfg is modified to have conditional
> expressions in it, what exactly is the point?

...

Conditional metadata for Python versions does not have to be very  
complicated in my opinion. Simply have the following in setup.cfg, and  
thus in PKG-INFO:

install_requires = ['lxml', 'multiprocessing[pyver<(2,6)]', 'argparse',  
'pywin32[platform.name=windows]']

>>> metadata.get_install_requires(for_pyver=(2,6),  
>>> platform=Platform(name='windows', arch='x86'))
['lxml', 'argparse', 'pywin32']

I don't imagine fields other than `install_requires` to vary based on the  
target environment.

Simple, no?

-srid


More information about the Distutils-SIG mailing list