-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Matt Good wrote:
On Thu, 2006-12-14 at 07:15 +0100, Elvelind Grandin wrote:
Perhaps I wasn't totally clear. what I meant was something like this.
extras_require = { "default" : ["SQLObject==bugfix,>=0.7.1dev-r1860,<=0.7.99"], "future" : ["Genshi>=0.3", "SQLAlchemy>=0.3"] },
That may be ok for the example, but what happens if you add another extra "foo" for some optional feature. Installing "TurboGears[foo]" won't select either the "default" or "future" extras, so you don't really get all the requirements.
From a semantic perspective I think listing these as "extras" is odd. One of either SQLObject or SQLAlchemy is required for installation, so it's not just an "extra" feature. I think extras have been used for this as a workaround to setuptools not supporting ORed requirements, but I'd like to see that fixed. I tend to think in terms of Debian packages where stuff like SA or SO would be listed as "depends" meaning that they're strictly required, so in setuptools this would correspond to "install_requires". On the other hand I believe Paste is still an optional package used in TurboGears for stuff like the interactive traceback display, so it'd be a Debian "recommends", or setuptools "extras".
Using "|" as a separator for ORing TurboGear's requirements might look something like this (ignoring version numbers for simplicity):
install_requires = [ "SQLObject | SQLAlchemy", "Kid | Genshi", ], extras_require = { "fancy_tb": ["Paste"], }
+1 for the pipe symbol: to my eye, it means "pick the first of these", which is what you want.
Setuptools would check if either SQLObject or SQLAlchemy was already installed, if not it'd try from left to right until it successfully installed one of the requirements.
I suppose extras could still be used as aliases for something like the "future" requirements to make it easier for users to install this set of packages:
extras_require = { "standard": ["Kid", "SQLObject"], "future": ["Genshi", "SQLAlchemy"], "fancy_tb": ["Paste"], }
Alternatively tuples could be substituted to define ORed requirements like:
install_requires = [ ("SQLObject", "SQLAlchemy"), ("Kid", "Genshi"), ]
Comments?
I have a need for the "alternate dependencies" myself, e.g.: install_requires = ['lxml | elementtree'] where my package prefers lxml, but can fall back to using elementtree. Tres. - -- =================================================================== Tres Seaver +1 540-429-0999 tseaver@palladion.com Palladion Software "Excellence by Design" http://palladion.com -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2.2 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFFzIU/+gerLs4ltQ4RAseRAJ4xhRcRmJbPegE1+ExInh9/VlZ4cgCbBhHO WlAJp1wRhxvnWQgoJ/T61oU= =yDKv -----END PGP SIGNATURE-----