Building an egg from Subversion using zc.buildout
I'm using zc.buildout for deploying a handful of applications, and one of our dependencies doesn't have eggs or "correctly" formatted pages (that would allow easy_install to track down the repository for direct building from source). Does zc.buildout provide any way to build an egg from a Subversion URL? Something with similar behavior to: easy_install -m -d ./eggs http://path/to/svn/repos I'm happy to write a recipe if necessary, just thought I'd make sure someone else hadn't already scratched this itch. Thanks, Nathan
At 12:21 PM 11/19/2006 -0500, Nathan R. Yergler wrote:
I'm using zc.buildout for deploying a handful of applications, and one of our dependencies doesn't have eggs or "correctly" formatted pages (that would allow easy_install to track down the repository for direct building from source). Does zc.buildout provide any way to build an egg from a Subversion URL? Something with similar behavior to:
easy_install -m -d ./eggs http://path/to/svn/repos
I'm happy to write a recipe if necessary, just thought I'd make sure someone else hadn't already scratched this itch.
If it's a dependency declared in your setup.py, you can do something like this: dependency_links=['http://path/to/svn/repos#egg=Foo-dev'], install_requires=['Foo>=1.2,==dev'], in your setup() call, to depend on version 1.2 or greater of Foo; the ==dev and the #egg=Foo-dev will allow it to be found via SVN. See also these two manual sections that document the use of ==dev and #egg=: http://peak.telecommunity.com/DevCenter/setuptools#managing-continuous-relea... http://peak.telecommunity.com/DevCenter/setuptools#making-your-package-avail...
Phillip J. Eby wrote:
At 12:21 PM 11/19/2006 -0500, Nathan R. Yergler wrote:
I'm using zc.buildout for deploying a handful of applications, and one of our dependencies doesn't have eggs or "correctly" formatted pages (that would allow easy_install to track down the repository for direct building from source). Does zc.buildout provide any way to build an egg from a Subversion URL? Something with similar behavior to: easy_install -m -d ./eggs http://path/to/svn/repos
I'm happy to write a recipe if necessary, just thought I'd make sure someone else hadn't already scratched this itch.
If it's a dependency declared in your setup.py, you can do something like this:
dependency_links=['http://path/to/svn/repos#egg=Foo-dev'], install_requires=['Foo>=1.2,==dev'],
in your setup() call, to depend on version 1.2 or greater of Foo; the ==dev and the #egg=Foo-dev will allow it to be found via SVN.
See also these two manual sections that document the use of ==dev and #egg=:
http://peak.telecommunity.com/DevCenter/setuptools#managing-continuous-relea...
http://peak.telecommunity.com/DevCenter/setuptools#making-your-package-avail...
I found myself searching for this very thing, and couldn't find a way to do it with zc.buildout. Listing an svn URL in the 'eggs' section gave a syntax error (with or without the #egg=Foo-dev bit). Listing the svn URL in 'find-links' didn't work either. I'm not sure I understand zc.recipe.egg and setuptools well enough to be able to guess what may be wrong. Since zc.buildout uses setuptools though, if there is a standard setuptools way of doing this, I'd hope it should be possible to do it in zc.buildout? Martin
Martin Aspeli wrote:
http://peak.telecommunity.com/DevCenter/setuptools#managing-continuous-relea...
http://peak.telecommunity.com/DevCenter/setuptools#making-your-package-avail...
I found myself searching for this very thing, and couldn't find a way to do it with zc.buildout. Listing an svn URL in the 'eggs' section gave a syntax error (with or without the #egg=Foo-dev bit). Listing the svn URL in 'find-links' didn't work either.
I'm not sure I understand zc.recipe.egg and setuptools well enough to be able to guess what may be wrong. Since zc.buildout uses setuptools though, if there is a standard setuptools way of doing this, I'd hope it should be possible to do it in zc.buildout?
Is there a way to do find-links in buildout? I think so, maybe named something like find-links. Then you'd point at a page that has the link with #egg=.... IIRC you have to point find-links at a real HTML page. I sometimes put on in svn (maybe actually in the buildout), and point it there. Annoying part is you have to commit it to test. buildout, kind of like install_requires, I think needs you to give it something it can actually fulfill. So you'd need Foo==dev,>1.1 or somesuch. -- Ian Bicking | ianb@colorstudy.com | http://blog.ianbicking.org
Ian Bicking wrote:
Is there a way to do find-links in buildout? I think so, maybe named something like find-links.
Yep.
Then you'd point at a page that has the link with #egg=.... IIRC you have to point find-links at a real HTML page.
Right. But I don't have such a page. Basically, I want my buildout to track e.g.: http://svn.plone.org/svn/plone/plone.portlets/trunk This having a setup.py and I hope other necessary info to check it out and build it. What would I need in terms of find-links for this to work?
I sometimes put on in svn (maybe actually in the buildout), and point it there. Annoying part is you have to commit it to test. buildout, kind of like install_requires, I think needs you to give it something it can actually fulfill. So you'd need Foo==dev,>1.1 or somesuch.
You mean in buildout's list of eggs-to-install? Basically, my buildout.cfg now has: find-links = http://download.zope.org/distribution/ http://effbot.org/downloads eggs = elementtree python-yadis python-openid python-urljr I believe I can do foo==dev or whatever in that list of eggs as well. But I'm not sure how that relates to svn link above. Martin
Martin Aspeli wrote:
Ian Bicking wrote:
Is there a way to do find-links in buildout? I think so, maybe named something like find-links.
Yep.
Then you'd point at a page that has the link with #egg=.... IIRC you have to point find-links at a real HTML page.
Right. But I don't have such a page. Basically, I want my buildout to track e.g.:
http://svn.plone.org/svn/plone/plone.portlets/trunk
This having a setup.py and I hope other necessary info to check it out and build it.
What would I need in terms of find-links for this to work?
I think you need to create such a page.
I sometimes put on in svn (maybe actually in the buildout), and point it there. Annoying part is you have to commit it to test. buildout, kind of like install_requires, I think needs you to give it something it can actually fulfill. So you'd need Foo==dev,>1.1 or somesuch.
You mean in buildout's list of eggs-to-install? Basically, my buildout.cfg now has:
find-links = http://download.zope.org/distribution/ http://effbot.org/downloads
eggs = elementtree python-yadis python-openid python-urljr
I believe I can do foo==dev or whatever in that list of eggs as well. But I'm not sure how that relates to svn link above.
There seems to need to be a page you can point to with an #dev anchor that specified the project name. Jim -- Jim Fulton mailto:jim@zope.com Python Powered! CTO (540) 361-1714 http://www.python.org Zope Corporation http://www.zope.com http://www.zope.org
At 04:25 PM 1/28/2007 -0600, Ian Bicking wrote:
Is there a way to do find-links in buildout? I think so, maybe named something like find-links. Then you'd point at a page that has the link with #egg=.... IIRC you have to point find-links at a real HTML page.
Not for easy_install, you don't. If buildout doesn't support it, that's a bug or limitation of buildout.
Phillip J. Eby wrote:
At 04:25 PM 1/28/2007 -0600, Ian Bicking wrote:
Is there a way to do find-links in buildout? I think so, maybe named something like find-links. Then you'd point at a page that has the link with #egg=.... IIRC you have to point find-links at a real HTML page.
Not for easy_install, you don't. If buildout doesn't support it, that's a bug or limitation of buildout.
Okay, then given that I'm trying to install the egg at http://svn.plone.org/svn/plone/plone.portlets/trunk which is called plone.portlets, what should the find-link and the egg name + version specifier be? Martin
At 10:52 PM 1/28/2007 +0000, Martin Aspeli wrote:
Phillip J. Eby wrote:
At 04:25 PM 1/28/2007 -0600, Ian Bicking wrote:
Is there a way to do find-links in buildout? I think so, maybe named something like find-links. Then you'd point at a page that has the link with #egg=.... IIRC you have to point find-links at a real HTML page.
Not for easy_install, you don't. If buildout doesn't support it, that's a bug or limitation of buildout.
Okay, then given that I'm trying to install the egg at http://svn.plone.org/svn/plone/plone.portlets/trunk which is called plone.portlets, what should the find-link and the egg name + version specifier be?
If you look at the setup.py and setup.cfg that are there, it would appear you want to use #egg=plone.portlets-0.1dev as your tag and plone.portlets>=0.1dev as your requirement.
Phillip J. Eby wrote:
At 10:52 PM 1/28/2007 +0000, Martin Aspeli wrote:
At 04:25 PM 1/28/2007 -0600, Ian Bicking wrote:
Is there a way to do find-links in buildout? I think so, maybe named something like find-links. Then you'd point at a page that has the link with #egg=.... IIRC you have to point find-links at a real HTML page. Not for easy_install, you don't. If buildout doesn't support it, that's a bug or limitation of buildout. Okay, then given that I'm trying to install the egg at http://svn.plone.org/svn/plone/plone.portlets/trunk which is called
Phillip J. Eby wrote: plone.portlets, what should the find-link and the egg name + version specifier be?
If you look at the setup.py and setup.cfg that are there, it would appear you want to use #egg=plone.portlets-0.1dev as your tag and plone.portlets>=0.1dev as your requirement.
You're absolutely right. I finally got this working now. :) The syntax in buildout.cfg is: [buildout] parts = instance zopepy # XXX: The links below are needed to track unreleased eggs; once they are # in the cheeseshop we can remove all but the first two find-links = http://download.zope.org/distribution/ http://effbot.org/downloads http://codespeak.net/svn/kukit/kss.core/trunk#egg=kss.core-0.1dev ... # Add additional eggs here eggs = elementtree python-yadis python-openid python-urljr ... kss.core ... Thank you! Martin
On Jan 29, 2007, at 4:31 PM, Martin Aspeli wrote:
Phillip J. Eby wrote:
At 10:52 PM 1/28/2007 +0000, Martin Aspeli wrote:
At 04:25 PM 1/28/2007 -0600, Ian Bicking wrote:
Is there a way to do find-links in buildout? I think so, maybe named something like find-links. Then you'd point at a page that has the link with #egg=.... IIRC you have to point find-links at a real HTML page. Not for easy_install, you don't. If buildout doesn't support it, that's a bug or limitation of buildout. Okay, then given that I'm trying to install the egg at http://svn.plone.org/svn/plone/plone.portlets/trunk which is called
Phillip J. Eby wrote: plone.portlets, what should the find-link and the egg name + version specifier be?
If you look at the setup.py and setup.cfg that are there, it would appear you want to use #egg=plone.portlets-0.1dev as your tag and plone.portlets>=0.1dev as your requirement.
You're absolutely right. I finally got this working now. :)
Yay! I'm glad you figured this out.
The syntax in buildout.cfg is:
[buildout]
parts = instance zopepy
# XXX: The links below are needed to track unreleased eggs; once they are # in the cheeseshop we can remove all but the first two find-links = http://download.zope.org/distribution/ http://effbot.org/downloads
http://codespeak.net/svn/kukit/kss.core/trunk#egg=kss.core-0.1dev ...
# Add additional eggs here eggs = elementtree python-yadis python-openid python-urljr ... kss.core ...
Thank you!
So do you get a develop egg and egg link or a regular egg for each of these packages? If the later, as I fear, I think you have a problem. Jim -- Jim Fulton mailto:jim@zope.com Python Powered! CTO (540) 361-1714 http://www.python.org Zope Corporation http://www.zope.com http://www.zope.org
Jim Fulton wrote:
So do you get a develop egg and egg link or a regular egg for each of these packages? If the later, as I fear, I think you have a problem.
I think the latter (I *just* deleted my test instance and I don't want to do it all again now), but why is it a problem? Martin
On Jan 29, 2007, at 4:52 PM, Martin Aspeli wrote:
Jim Fulton wrote:
So do you get a develop egg and egg link or a regular egg for each of these packages? If the later, as I fear, I think you have a problem.
I think the latter (I *just* deleted my test instance and I don't want to do it all again now), but why is it a problem?
So, from your example, you now have a kss.core-0.1dev egg. It isn't a real release. It reflects the state of your subversion repository at the time you happened to run the buildout. My guess is that if you run the buildout again, the egg won't be recreated. You won't be tracking subversion changes as you wished. Further, if you use a shared eggs directory, any other buildouts will likely use that same egg, which has a more or less random snapshot of the software. I suggest that this is a bad thing. IMO, this is what you really want: - You want something to check out your project and make it a develop egg. - When you run buildout later, you want something to do an svn up in the checkout and to rerun setup (in case there are extensions). I think this "something" should probably be a recipe (or a feature of some existing recipe). I wonder what easy_install does in a case like this. For example, I wonder if easy_install would download and rebuild the egg every time you ran it. Of course, with easy_install, you probably would only run it once, but, again, then you wouldn't be tracking subversion. Jim -- Jim Fulton mailto:jim@zope.com Python Powered! CTO (540) 361-1714 http://www.python.org Zope Corporation http://www.zope.com http://www.zope.org
Jim Fulton wrote:
So, from your example, you now have a kss.core-0.1dev egg. It isn't a real release. It reflects the state of your subversion repository at the time you happened to run the buildout.
My guess is that if you run the buildout again, the egg won't be recreated. You won't be tracking subversion changes as you wished.
Further, if you use a shared eggs directory, any other buildouts will likely use that same egg, which has a more or less random snapshot of the software. I suggest that this is a bad thing.
IMO, this is what you really want:
- You want something to check out your project and make it a develop egg.
- When you run buildout later, you want something to do an svn up in the checkout and to rerun setup (in case there are extensions).
I think this "something" should probably be a recipe (or a feature of some existing recipe).
I wonder what easy_install does in a case like this. For example, I wonder if easy_install would download and rebuild the egg every time you ran it. Of course, with easy_install, you probably would only run it once, but, again, then you wouldn't be tracking subversion.
I'd need to test this, but I *think* that it considers the svn revision as part of the "version number" so that when the svn revision changes, if buildout goes online to check for a new revision, it'd re-download and re-build. That sounds like what I want, anyway. :) Martin
On Jan 29, 2007, at 5:14 PM, Martin Aspeli wrote:
Jim Fulton wrote:
So, from your example, you now have a kss.core-0.1dev egg. It isn't a real release. It reflects the state of your subversion repository at the time you happened to run the buildout.
My guess is that if you run the buildout again, the egg won't be recreated. You won't be tracking subversion changes as you wished.
Further, if you use a shared eggs directory, any other buildouts will likely use that same egg, which has a more or less random snapshot of the software. I suggest that this is a bad thing.
IMO, this is what you really want:
- You want something to check out your project and make it a develop egg.
- When you run buildout later, you want something to do an svn up in the checkout and to rerun setup (in case there are extensions).
I think this "something" should probably be a recipe (or a feature of some existing recipe).
I wonder what easy_install does in a case like this. For example, I wonder if easy_install would download and rebuild the egg every time you ran it. Of course, with easy_install, you probably would only run it once, but, again, then you wouldn't be tracking subversion.
I'd need to test this, but I *think* that it considers the svn revision as part of the "version number" so that when the svn revision changes,
I wonder if the egg it generated has the version # in it.
if buildout goes online to check for a new revision, it'd re-download and re-build. That sounds like what I want, anyway. :)
Well, it would be an improvement, but it still might not be what you want. After all, it will check out the entire project everytime, when it would be quicker to just do an svn up. In any case, you should experiment with both easy_install and buildout. I'm fairly sure that buildout won't pick up new versions -- but I could be wrong. easy_install won't pick up new versions unless you use -U, but I wonder if it will even then. Jim -- Jim Fulton mailto:jim@zope.com Python Powered! CTO (540) 361-1714 http://www.python.org Zope Corporation http://www.zope.com http://www.zope.org
At 05:07 PM 1/29/2007 -0500, Jim Fulton wrote:
On Jan 29, 2007, at 4:52 PM, Martin Aspeli wrote:
Jim Fulton wrote:
So do you get a develop egg and egg link or a regular egg for each of these packages? If the later, as I fear, I think you have a problem.
I think the latter (I *just* deleted my test instance and I don't want to do it all again now), but why is it a problem?
So, from your example, you now have a kss.core-0.1dev egg.
Nope - it'll be 0.1dev-rFOO where FOO is the repository revision in question.
I wonder what easy_install does in a case like this. For example, I wonder if easy_install would download and rebuild the egg every time you ran it.
Only if it thought the tagged version was a better match for what you were looking for.
Of course, with easy_install, you probably would only run it once, but, again, then you wouldn't be tracking subversion.
Development snapshots of setuptools can be checked out with "setuptools==dev", and that will always download a new version because the installed version is always a version like 0.6c2dev-r51290 or something. This doesn't match ==dev, thereby forcing easy_install to download a fresh copy.
On Jan 29, 2007, at 5:26 PM, Phillip J. Eby wrote:
At 05:07 PM 1/29/2007 -0500, Jim Fulton wrote:
On Jan 29, 2007, at 4:52 PM, Martin Aspeli wrote:
Jim Fulton wrote:
So do you get a develop egg and egg link or a regular egg for each of these packages? If the later, as I fear, I think you have a problem.
I think the latter (I *just* deleted my test instance and I don't want to do it all again now), but why is it a problem?
So, from your example, you now have a kss.core-0.1dev egg.
Nope - it'll be 0.1dev-rFOO where FOO is the repository revision in question.
Ah, good. I hope that's what he got from buildout. :)
I wonder what easy_install does in a case like this. For example, I wonder if easy_install would download and rebuild the egg every time you ran it.
Only if it thought the tagged version was a better match for what you were looking for.
How would it determine that? Would it try to find the current svn revision #?
Of course, with easy_install, you probably would only run it once, but, again, then you wouldn't be tracking subversion.
Development snapshots of setuptools can be checked out with "setuptools==dev", and that will always download a new version because the installed version is always a version like 0.6c2dev- r51290 or something. This doesn't match ==dev, thereby forcing easy_install to download a fresh copy.
I wonder if buildout behaves this way. Buildout will ask a PackageIndex for the best available version using the obtain method. I wonder what a package index will return in a case like this. I guess I expect he'll get a version of ==dev which, as you say, will be considered newer and cause buildout to get a new distribution. Jim -- Jim Fulton mailto:jim@zope.com Python Powered! CTO (540) 361-1714 http://www.python.org Zope Corporation http://www.zope.com http://www.zope.org
Jim Fulton wrote:
I wonder if buildout behaves this way. Buildout will ask a PackageIndex for the best available version using the obtain method. I wonder what a package index will return in a case like this. I guess I expect he'll get a version of ==dev which, as you say, will be considered newer and cause buildout to get a new distribution.
Yeah, I think that's what I want. However, if I put eggname==dev in the eggs option, I get a resolution error. See my last reply to PJE's last reply to me a few minutes ago. I've confirmed that if I just use find-links as above and then list the egg name without a version spec, it does *not* try to re-download (at least as far as I can tell). Martin
Phillip J. Eby wrote:
Development snapshots of setuptools can be checked out with "setuptools==dev", and that will always download a new version because the installed version is always a version like 0.6c2dev-r51290 or something. This doesn't match ==dev, thereby forcing easy_install to download a fresh copy.
Could you explain how the find-link would work with an ==dev version specification? Again, this may be a buildout issue, but I have: find-links = ... http://svn.plone.org/svn/archetypes/archetypes.kss/trunk#egg=archetypes.kss-... ... eggs = ... archetypes.kss==dev ... This gives me an error: Traceback (most recent call last): File "./bin/buildout", line 12, in ? zc.buildout.buildout.main() File "/private/tmp/tmp29h1vY/zc.buildout-1.0.0b19-py2.4.egg/zc/buildout/buildout.py", line 1056, in main File "/private/tmp/tmp29h1vY/zc.buildout-1.0.0b19-py2.4.egg/zc/buildout/buildout.py", line 309, in install File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/test/bot/eggs/z2c.recipe.zope2instance-0.1dev_r12104-py2.4.egg/z2c/recipe/zope2instance/__init__.py", line 36, in install requirements, ws = self.egg.working_set() File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/test/bot/eggs/zc.recipe.egg-1.0.0b4-py2.4.egg/zc/recipe/egg/egg.py", line 79, in working_set path=[options['develop-eggs-directory']] File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/test/bot/eggs/setuptools-0.6c5-py2.4.egg/easy_install.py", line 355, in install File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/test/bot/eggs/setuptools-0.6c5-py2.4.egg/easy_install.py", line 294, in _get_dist ValueError: ("Couldn't find", Requirement.parse('archetypes.kss==dev')) I have a feeling this means my find-link is wrong, but I couldn't find a permutation that works... Martin
On Jan 29, 2007, at 5:37 PM, Martin Aspeli wrote:
Phillip J. Eby wrote:
Development snapshots of setuptools can be checked out with "setuptools==dev", and that will always download a new version because the installed version is always a version like 0.6c2dev-r51290 or something. This doesn't match ==dev, thereby forcing easy_install to download a fresh copy.
Could you explain how the find-link would work with an ==dev version specification?
Again, this may be a buildout issue, but I have:
find-links = ...
http://svn.plone.org/svn/archetypes/archetypes.kss/ trunk#egg=archetypes.kss-0.1dev ...
eggs = ... archetypes.kss==dev ...
This gives me an error:
Traceback (most recent call last): File "./bin/buildout", line 12, in ? zc.buildout.buildout.main() File "/private/tmp/tmp29h1vY/zc.buildout-1.0.0b19-py2.4.egg/zc/buildout/ buildout.py", line 1056, in main File "/private/tmp/tmp29h1vY/zc.buildout-1.0.0b19-py2.4.egg/zc/buildout/ buildout.py", line 309, in install File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/ test/bot/eggs/z2c.recipe.zope2instance-0.1dev_r12104-py2.4.egg/z2c/ recipe/zope2instance/__init__.py", line 36, in install requirements, ws = self.egg.working_set() File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/ test/bot/eggs/zc.recipe.egg-1.0.0b4-py2.4.egg/zc/recipe/egg/egg.py", line 79, in working_set path=[options['develop-eggs-directory']] File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/ test/bot/eggs/setuptools-0.6c5-py2.4.egg/easy_install.py", line 355, in install
File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/ test/bot/eggs/setuptools-0.6c5-py2.4.egg/easy_install.py", line 294, in _get_dist
ValueError: ("Couldn't find", Requirement.parse ('archetypes.kss==dev'))
I have a feeling this means my find-link is wrong, but I couldn't find a permutation that works...
I think you don't need/want the the ==dev in the requirement. That is: eggs = archetypes.kss Jim -- Jim Fulton mailto:jim@zope.com Python Powered! CTO (540) 361-1714 http://www.python.org Zope Corporation http://www.zope.com http://www.zope.org
Jim Fulton wrote:
On Jan 29, 2007, at 5:37 PM, Martin Aspeli wrote:
Phillip J. Eby wrote:
Development snapshots of setuptools can be checked out with "setuptools==dev", and that will always download a new version because the installed version is always a version like 0.6c2dev-r51290 or something. This doesn't match ==dev, thereby forcing easy_install to download a fresh copy. Could you explain how the find-link would work with an ==dev version specification?
Again, this may be a buildout issue, but I have:
find-links = ...
http://svn.plone.org/svn/archetypes/archetypes.kss/ trunk#egg=archetypes.kss-0.1dev ...
eggs = ... archetypes.kss==dev ...
This gives me an error:
Traceback (most recent call last): File "./bin/buildout", line 12, in ? zc.buildout.buildout.main() File "/private/tmp/tmp29h1vY/zc.buildout-1.0.0b19-py2.4.egg/zc/buildout/ buildout.py", line 1056, in main File "/private/tmp/tmp29h1vY/zc.buildout-1.0.0b19-py2.4.egg/zc/buildout/ buildout.py", line 309, in install File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/ test/bot/eggs/z2c.recipe.zope2instance-0.1dev_r12104-py2.4.egg/z2c/ recipe/zope2instance/__init__.py", line 36, in install requirements, ws = self.egg.working_set() File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/ test/bot/eggs/zc.recipe.egg-1.0.0b4-py2.4.egg/zc/recipe/egg/egg.py", line 79, in working_set path=[options['develop-eggs-directory']] File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/ test/bot/eggs/setuptools-0.6c5-py2.4.egg/easy_install.py", line 355, in install
File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/ test/bot/eggs/setuptools-0.6c5-py2.4.egg/easy_install.py", line 294, in _get_dist
ValueError: ("Couldn't find", Requirement.parse ('archetypes.kss==dev'))
I have a feeling this means my find-link is wrong, but I couldn't find a permutation that works...
I think you don't need/want the the ==dev in the requirement. That is:
eggs = archetypes.kss
Yes, that works, but then it doesn't seem to re-check svn for a new version each time. Martin
At 10:37 PM 1/29/2007 +0000, Martin Aspeli wrote:
Phillip J. Eby wrote:
Development snapshots of setuptools can be checked out with "setuptools==dev", and that will always download a new version because the installed version is always a version like 0.6c2dev-r51290 or something. This doesn't match ==dev, thereby forcing easy_install to download a fresh copy.
Could you explain how the find-link would work with an ==dev version specification?
#egg=archetypes.kss-dev That is, use 'dev' as the version in the link. The combination of an ==dev version specification and a #egg=projectname-dev tag means that the code will be downloaded and rebuilt *every* time, however.
Phillip J. Eby wrote:
At 10:37 PM 1/29/2007 +0000, Martin Aspeli wrote:
Phillip J. Eby wrote:
Development snapshots of setuptools can be checked out with "setuptools==dev", and that will always download a new version because the installed version is always a version like 0.6c2dev-r51290 or something. This doesn't match ==dev, thereby forcing easy_install to download a fresh copy. Could you explain how the find-link would work with an ==dev version specification?
#egg=archetypes.kss-dev
That is, use 'dev' as the version in the link. The combination of an ==dev version specification and a #egg=projectname-dev tag means that the code will be downloaded and rebuilt *every* time, however.
Alas, this gives me this error: Traceback (most recent call last): File "./bin/buildout", line 12, in ? zc.buildout.buildout.main() File "/private/tmp/tmp29h1vY/zc.buildout-1.0.0b19-py2.4.egg/zc/buildout/buildout.py", line 1056, in main File "/private/tmp/tmp29h1vY/zc.buildout-1.0.0b19-py2.4.egg/zc/buildout/buildout.py", line 309, in install File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/test/bot/eggs/z2c.recipe.zope2instance-0.1dev_r12104-py2.4.egg/z2c/recipe/zope2instance/__init__.py", line 36, in install requirements, ws = self.egg.working_set() File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/test/bot/eggs/zc.recipe.egg-1.0.0b4-py2.4.egg/zc/recipe/egg/egg.py", line 79, in working_set path=[options['develop-eggs-directory']] File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/test/bot/eggs/setuptools-0.6c5-py2.4.egg/easy_install.py", line 355, in install File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/test/bot/eggs/setuptools-0.6c5-py2.4.egg/easy_install.py", line 294, in _get_dist ValueError: ("Couldn't find", Requirement.parse('archetypes.kss==dev')) Is there something else I need to do to the svn repository (http://svn.plone.org/svn/archetypes/archetypes.kss/trunk)? Or is this a zc.buildout limitation? Martin
Note that I'm not ignoring this. I just need to find some time to dig into it. Jim On Jan 29, 2007, at 6:14 PM, Martin Aspeli wrote:
Phillip J. Eby wrote:
At 10:37 PM 1/29/2007 +0000, Martin Aspeli wrote:
Phillip J. Eby wrote:
Development snapshots of setuptools can be checked out with "setuptools==dev", and that will always download a new version because the installed version is always a version like 0.6c2dev-r51290 or something. This doesn't match ==dev, thereby forcing easy_install to download a fresh copy. Could you explain how the find-link would work with an ==dev version specification?
#egg=archetypes.kss-dev
That is, use 'dev' as the version in the link. The combination of an ==dev version specification and a #egg=projectname-dev tag means that the code will be downloaded and rebuilt *every* time, however.
Alas, this gives me this error:
Traceback (most recent call last): File "./bin/buildout", line 12, in ? zc.buildout.buildout.main() File "/private/tmp/tmp29h1vY/zc.buildout-1.0.0b19-py2.4.egg/zc/buildout/ buildout.py", line 1056, in main File "/private/tmp/tmp29h1vY/zc.buildout-1.0.0b19-py2.4.egg/zc/buildout/ buildout.py", line 309, in install File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/ test/bot/eggs/z2c.recipe.zope2instance-0.1dev_r12104-py2.4.egg/z2c/ recipe/zope2instance/__init__.py", line 36, in install requirements, ws = self.egg.working_set() File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/ test/bot/eggs/zc.recipe.egg-1.0.0b4-py2.4.egg/zc/recipe/egg/egg.py", line 79, in working_set path=[options['develop-eggs-directory']] File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/ test/bot/eggs/setuptools-0.6c5-py2.4.egg/easy_install.py", line 355, in install
File "/Users/optilude/Development/Plone/Code/Products/ZopeSkel/trunk/ test/bot/eggs/setuptools-0.6c5-py2.4.egg/easy_install.py", line 294, in _get_dist
ValueError: ("Couldn't find", Requirement.parse ('archetypes.kss==dev'))
Is there something else I need to do to the svn repository (http://svn.plone.org/svn/archetypes/archetypes.kss/trunk)? Or is this a zc.buildout limitation?
Martin
_______________________________________________ Distutils-SIG maillist - Distutils-SIG@python.org http://mail.python.org/mailman/listinfo/distutils-sig
-- Jim Fulton mailto:jim@zope.com Python Powered! CTO (540) 361-1714 http://www.python.org Zope Corporation http://www.zope.com http://www.zope.org
Martin Aspeli wrote:
Is there something else I need to do to the svn repository (http://svn.plone.org/svn/archetypes/archetypes.kss/trunk)? Or is this a zc.buildout limitation?
I think this is an issue with indicating ways that you find a package (==dev), and the requirement you have (which might be, I dunno, >1.0). Setuptools/easy_install can find the package given ==dev, but once it's installed the thing that was just installed doesn't satisfy the requirement ==dev. The typical way to deal with this is something like archetypes.kss==dev,>1.0. -- Ian Bicking | ianb@colorstudy.com | http://blog.ianbicking.org
On Jan 29, 2007, at 6:14 PM, Martin Aspeli wrote:
Phillip J. Eby wrote:
At 10:37 PM 1/29/2007 +0000, Martin Aspeli wrote:
Phillip J. Eby wrote:
Development snapshots of setuptools can be checked out with "setuptools==dev", and that will always download a new version because the installed version is always a version like 0.6c2dev-r51290 or something. This doesn't match ==dev, thereby forcing easy_install to download a fresh copy. Could you explain how the find-link would work with an ==dev version specification?
#egg=archetypes.kss-dev
That is, use 'dev' as the version in the link. The combination of an ==dev version specification and a #egg=projectname-dev tag means that the code will be downloaded and rebuilt *every* time, however.
Alas, this gives me this error:
...
ValueError: ("Couldn't find", Requirement.parse ('archetypes.kss==dev'))
I finally found some time to look into this. Buildout uses setuptools APIs. It uses a PackageIndex to download the distribution and this actually works. It then uses an environment best_match method to get a distribution object and best_match returns None. If I remove the ==dev from the requirement, then best_match is able to find the distribution. This happens because apparently no distributions match a requirement for the "dev" version. Should I view this as a bug in setuptools? Or does buildout need to special case the version "dev"? Martin, If this worked, then buildout would checkout, build, and download these eggs every time it was run in "newest" mode, which is the default mode. I'll make this work on principle, but I suggest that it would be much more efficient and useful to have a recipe that checked out the source and built a develop egg on install and updated it on update. Jim -- Jim Fulton mailto:jim@zope.com Python Powered! CTO (540) 361-1714 http://www.python.org Zope Corporation http://www.zope.com http://www.zope.org
Jim Fulton wrote:
On Jan 29, 2007, at 6:14 PM, Martin Aspeli wrote:
Phillip J. Eby wrote:
At 10:37 PM 1/29/2007 +0000, Martin Aspeli wrote:
Phillip J. Eby wrote:
Development snapshots of setuptools can be checked out with "setuptools==dev", and that will always download a new version because the installed version is always a version like 0.6c2dev-r51290 or something. This doesn't match ==dev, thereby forcing easy_install to download a fresh copy. Could you explain how the find-link would work with an ==dev version specification? #egg=archetypes.kss-dev
That is, use 'dev' as the version in the link. The combination of an ==dev version specification and a #egg=projectname-dev tag means that the code will be downloaded and rebuilt *every* time, however. Alas, this gives me this error:
...
ValueError: ("Couldn't find", Requirement.parse ('archetypes.kss==dev'))
I finally found some time to look into this.
Thanks Jim!
Buildout uses setuptools APIs. It uses a PackageIndex to download the distribution and this actually works. It then uses an environment best_match method to get a distribution object and best_match returns None. If I remove the ==dev from the requirement, then best_match is able to find the distribution. This happens because apparently no distributions match a requirement for the "dev" version. Should I view this as a bug in setuptools? Or does buildout need to special case the version "dev"?
How come it works with easy_install on the command line?
Martin,
If this worked, then buildout would checkout, build, and download these eggs every time it was run in "newest" mode, which is the default mode. I'll make this work on principle, but I suggest that it would be much more efficient and useful to have a recipe that checked out the source and built a develop egg on install and updated it on update.
I think that's what I'd expect, yes. For small eggs and where you're tracking svn closely, it makes sense. We do have a recipe (z2c.recipe.bundlecheckout) which can check out things and then you can list them as development eggs (which you do manually in buildout.cfg). We use this for Plone source code, for example, in "ploneout" the plone 3 buildout. However, if I'm not actually interested in editing the thing, I'd rather not have it in src/. Martin
At 05:26 PM 2/9/2007 -0500, Jim Fulton wrote:
ValueError: ("Couldn't find", Requirement.parse ('archetypes.kss==dev'))
I finally found some time to look into this.
Buildout uses setuptools APIs. It uses a PackageIndex to download the distribution and this actually works. It then uses an environment best_match method to get a distribution object and best_match returns None. If I remove the ==dev from the requirement, then best_match is able to find the distribution. This happens because apparently no distributions match a requirement for the "dev" version. Should I view this as a bug in setuptools?
The normal usage is "==dev,>=realver" where 'realver' is the real version you want.
Or does buildout need to special case the version "dev"?
I don't think so.
On Feb 9, 2007, at 6:49 PM, Phillip J. Eby wrote:
At 05:26 PM 2/9/2007 -0500, Jim Fulton wrote:
ValueError: ("Couldn't find", Requirement.parse ('archetypes.kss==dev'))
I finally found some time to look into this.
Buildout uses setuptools APIs. It uses a PackageIndex to download the distribution and this actually works. It then uses an environment best_match method to get a distribution object and best_match returns None. If I remove the ==dev from the requirement, then best_match is able to find the distribution. This happens because apparently no distributions match a requirement for the "dev" version. Should I view this as a bug in setuptools?
The normal usage is "==dev,>=realver" where 'realver' is the real version you want.
Is using just ==dev is correct usage? It works with easy_install. I think the user's desire is to get the most recent version. It's not clear to me that they'd know what other revision to specify.
Or does buildout need to special case the version "dev"?
I don't think so.
If ==dev is considered valid and if the environment best_match method isn't going to consider it a match against installed distributions, then I'll need to special case it or use some other API. People using buildout are generally going to expect things that work with easy_install to work with buildout. (Note: Buildout uses PackageIndex to locate and fetch distributions. It then installs distributions itself. if the distribution is already an egg, then this is straightforward. Otherwise, buildout invokes easy_install to do the installation. It can't get a return value from easy_install, so it uses an Environment to find the egg that easy_install created.) Jim -- Jim Fulton mailto:jim@zope.com Python Powered! CTO (540) 361-1714 http://www.python.org Zope Corporation http://www.zope.com http://www.zope.org
At 12:54 PM 2/10/2007 -0500, Jim Fulton wrote:
On Feb 9, 2007, at 6:49 PM, Phillip J. Eby wrote:
At 05:26 PM 2/9/2007 -0500, Jim Fulton wrote:
ValueError: ("Couldn't find", Requirement.parse ('archetypes.kss==dev'))
I finally found some time to look into this.
Buildout uses setuptools APIs. It uses a PackageIndex to download the distribution and this actually works. It then uses an environment best_match method to get a distribution object and best_match returns None. If I remove the ==dev from the requirement, then best_match is able to find the distribution. This happens because apparently no distributions match a requirement for the "dev" version. Should I view this as a bug in setuptools?
The normal usage is "==dev,>=realver" where 'realver' is the real version you want.
Is using just ==dev is correct usage? It works with easy_install.
Yes, if you put it on the command line. No, if it's a dependency declared in an egg; it'll have the same problem as you're having with buildout.
I think the user's desire is to get the most recent version. It's not clear to me that they'd know what other revision to specify.
Actually, the reason to use an ==dev (or other similar tag) in a dependency is to allow it to pick up a package that's *only* available via SVN.
(Note: Buildout uses PackageIndex to locate and fetch distributions. It then installs distributions itself. if the distribution is already an egg, then this is straightforward. Otherwise, buildout invokes easy_install to do the installation. It can't get a return value from easy_install, so it uses an Environment to find the egg that easy_install created.)
Note that easy_install can be told to --record what files it installs, so you could build a WorkingSet or Environment from that list.
On Feb 10, 2007, at 2:16 PM, Phillip J. Eby wrote:
At 12:54 PM 2/10/2007 -0500, Jim Fulton wrote: ...
(Note: Buildout uses PackageIndex to locate and fetch distributions. It then installs distributions itself. if the distribution is already an egg, then this is straightforward. Otherwise, buildout invokes easy_install to do the installation. It can't get a return value from easy_install, so it uses an Environment to find the egg that easy_install created.)
Note that easy_install can be told to --record what files it installs, so you could build a WorkingSet or Environment from that list.
I looked at that a while back. I don't remember why I didn't take that approach. At this point, I think it would be easier to special-case ==dev. :) Jim -- Jim Fulton mailto:jim@zope.com Python Powered! CTO (540) 361-1714 http://www.python.org Zope Corporation http://www.zope.com http://www.zope.org
At 02:20 PM 2/10/2007 -0500, Jim Fulton wrote:
On Feb 10, 2007, at 2:16 PM, Phillip J. Eby wrote:
At 12:54 PM 2/10/2007 -0500, Jim Fulton wrote: ...
(Note: Buildout uses PackageIndex to locate and fetch distributions. It then installs distributions itself. if the distribution is already an egg, then this is straightforward. Otherwise, buildout invokes easy_install to do the installation. It can't get a return value from easy_install, so it uses an Environment to find the egg that easy_install created.)
Note that easy_install can be told to --record what files it installs, so you could build a WorkingSet or Environment from that list.
I looked at that a while back. I don't remember why I didn't take that approach.
At this point, I think it would be easier to special-case ==dev. :)
Ah, but setuptools has a ==dev06, and I think other people have used other tags to denote various SVN branches. The name used to denote the version is incidental, IOW, so that way lies N special cases, all different. :)
On Feb 10, 2007, at 7:44 PM, Phillip J. Eby wrote:
At 02:20 PM 2/10/2007 -0500, Jim Fulton wrote:
On Feb 10, 2007, at 2:16 PM, Phillip J. Eby wrote:
At 12:54 PM 2/10/2007 -0500, Jim Fulton wrote: ...
(Note: Buildout uses PackageIndex to locate and fetch distributions. It then installs distributions itself. if the distribution is already an egg, then this is straightforward. Otherwise, buildout invokes easy_install to do the installation. It can't get a return value from easy_install, so it uses an Environment to find the egg that easy_install created.)
Note that easy_install can be told to --record what files it installs, so you could build a WorkingSet or Environment from that list.
I looked at that a while back. I don't remember why I didn't take that approach.
At this point, I think it would be easier to special-case ==dev. :)
Ah, but setuptools has a ==dev06, and I think other people have used other tags to denote various SVN branches. The name used to denote the version is incidental, IOW, so that way lies N special cases, all different. :)
I really don't understand this feature. So far I have had to resort to experimentation to get a loose grip on it. I think this needs to be much better documented (or dropped). Unfortunately, I think you are the only one who can document it because I think that you are the only one who truly understands it. Jim -- Jim Fulton mailto:jim@zope.com Python Powered! CTO (540) 361-1714 http://www.python.org Zope Corporation http://www.zope.com http://www.zope.org
At 01:01 PM 2/11/2007 -0500, Jim Fulton wrote:
On Feb 10, 2007, at 7:44 PM, Phillip J. Eby wrote:
At 02:20 PM 2/10/2007 -0500, Jim Fulton wrote:
On Feb 10, 2007, at 2:16 PM, Phillip J. Eby wrote:
At 12:54 PM 2/10/2007 -0500, Jim Fulton wrote: ...
(Note: Buildout uses PackageIndex to locate and fetch distributions. It then installs distributions itself. if the distribution is already an egg, then this is straightforward. Otherwise, buildout invokes easy_install to do the installation. It can't get a return value from easy_install, so it uses an Environment to find the egg that easy_install created.)
Note that easy_install can be told to --record what files it installs, so you could build a WorkingSet or Environment from that list.
I looked at that a while back. I don't remember why I didn't take that approach.
At this point, I think it would be easier to special-case ==dev. :)
Ah, but setuptools has a ==dev06, and I think other people have used other tags to denote various SVN branches. The name used to denote the version is incidental, IOW, so that way lies N special cases, all different. :)
I really don't understand this feature.
That's because there is no feature, at least not the way you're thinking about it. Marking a link with "#egg=projname-version" simply indicates that easy_install should consider that link to be for that project and version, regardless of what the link appears to be pointing to. Using a version of "dev" to denote a subversion repository link is therefore merely a *convention*, not a feature; it has NO special handling in easy_install. Meanwhile, the use of two versions in a requirement string (so that a subversion link tagged "dev" would be accepted for download, and the installed version would appear to meet the requirement) was a hack invented by a user, not me. :) And that hack, along with all the other behavior being seen, is merely an emergent property of the fact that you can label links, and easy_install's normal link-seeking behavior.
Phillip J. Eby wrote:
At 04:25 PM 1/28/2007 -0600, Ian Bicking wrote:
Is there a way to do find-links in buildout? I think so, maybe named something like find-links. Then you'd point at a page that has the link with #egg=.... IIRC you have to point find-links at a real HTML page.
Not for easy_install, you don't. If buildout doesn't support it, that's a bug or limitation of buildout.
buildout does support find-links (and index, for that matter). Jim -- Jim Fulton mailto:jim@zope.com Python Powered! CTO (540) 361-1714 http://www.python.org Zope Corporation http://www.zope.com http://www.zope.org
Ian Bicking wrote:
Martin Aspeli wrote:
http://peak.telecommunity.com/DevCenter/setuptools#managing-continuous-relea...
http://peak.telecommunity.com/DevCenter/setuptools#making-your-package-avail... I found myself searching for this very thing, and couldn't find a way to do it with zc.buildout. Listing an svn URL in the 'eggs' section gave a syntax error (with or without the #egg=Foo-dev bit). Listing the svn URL in 'find-links' didn't work either.
I'm not sure I understand zc.recipe.egg and setuptools well enough to be able to guess what may be wrong. Since zc.buildout uses setuptools though, if there is a standard setuptools way of doing this, I'd hope it should be possible to do it in zc.buildout?
Is there a way to do find-links in buildout? I think so, maybe named something like find-links.
Yup. Jim -- Jim Fulton mailto:jim@zope.com Python Powered! CTO (540) 361-1714 http://www.python.org Zope Corporation http://www.zope.com http://www.zope.org
At 10:01 PM 1/28/2007 +0000, Martin Aspeli wrote:
I found myself searching for this very thing, and couldn't find a way to do it with zc.buildout. Listing an svn URL in the 'eggs' section gave a syntax error (with or without the #egg=Foo-dev bit). Listing the svn URL in 'find-links' didn't work either.
Hm. easy_install accepts svn: URLs in --find-links as long as they have the #egg part, so that sounds like a problem with zc.buildout.
Phillip J. Eby wrote:
At 10:01 PM 1/28/2007 +0000, Martin Aspeli wrote:
I found myself searching for this very thing, and couldn't find a way to do it with zc.buildout. Listing an svn URL in the 'eggs' section gave a syntax error (with or without the #egg=Foo-dev bit). Listing the svn URL in 'find-links' didn't work either.
Hm. easy_install accepts svn: URLs in --find-links as long as they have the #egg part, so that sounds like a problem with zc.buildout.
Or a problem between the chair and the keyboard. :) To my knowledge, zc.buildout does use a custom version of easy_install.py though. I'm sure Jim can explain more. I will try a few more permutations to see if I can figure it out. Martin
Phillip J. Eby wrote:
At 10:01 PM 1/28/2007 +0000, Martin Aspeli wrote:
I found myself searching for this very thing, and couldn't find a way to do it with zc.buildout. Listing an svn URL in the 'eggs' section gave a syntax error (with or without the #egg=Foo-dev bit). Listing the svn URL in 'find-links' didn't work either.
Hm. easy_install accepts svn: URLs in --find-links as long as they have the #egg part, so that sounds like a problem with zc.buildout.
I don't know if it's a buildout thing. I was only doing it indirectly, and you can't point to something that isn't a URL or HTML page with --find-links AFAICT. I thought you couldn't point directly to a package with find-links (hence dependency_links), but I think I'm just confusing setup.py with easy_install. -- Ian Bicking | ianb@colorstudy.com | http://blog.ianbicking.org
Phillip J. Eby wrote:
At 10:01 PM 1/28/2007 +0000, Martin Aspeli wrote:
I found myself searching for this very thing, and couldn't find a way to do it with zc.buildout. Listing an svn URL in the 'eggs' section gave a syntax error (with or without the #egg=Foo-dev bit). Listing the svn URL in 'find-links' didn't work either.
Hm. easy_install accepts svn: URLs in --find-links as long as they have the #egg part, so that sounds like a problem with zc.buildout.
buildout uses setuptools.package_index.PackageIndex to find and download distributions. Does that support svn urls? Jim -- Jim Fulton mailto:jim@zope.com Python Powered! CTO (540) 361-1714 http://www.python.org Zope Corporation http://www.zope.com http://www.zope.org
Martin Aspeli wrote:
Phillip J. Eby wrote:
At 12:21 PM 11/19/2006 -0500, Nathan R. Yergler wrote:
I'm using zc.buildout for deploying a handful of applications, and one of our dependencies doesn't have eggs or "correctly" formatted pages (that would allow easy_install to track down the repository for direct building from source). Does zc.buildout provide any way to build an egg from a Subversion URL? Something with similar behavior to: easy_install -m -d ./eggs http://path/to/svn/repos
I'm happy to write a recipe if necessary, just thought I'd make sure someone else hadn't already scratched this itch. If it's a dependency declared in your setup.py, you can do something like this:
dependency_links=['http://path/to/svn/repos#egg=Foo-dev'], install_requires=['Foo>=1.2,==dev'],
in your setup() call, to depend on version 1.2 or greater of Foo; the ==dev and the #egg=Foo-dev will allow it to be found via SVN.
See also these two manual sections that document the use of ==dev and #egg=:
http://peak.telecommunity.com/DevCenter/setuptools#managing-continuous-relea...
http://peak.telecommunity.com/DevCenter/setuptools#making-your-package-avail...
I need to: - try this myself, and - work up some documentation on using this with buildout. I'll add this to my to-do list.
I found myself searching for this very thing, and couldn't find a way to do it with zc.buildout. Listing an svn URL in the 'eggs' section gave a syntax error (with or without the #egg=Foo-dev bit). Listing the svn URL in 'find-links' didn't work either.
I think you got lots of hints in various responses, although I'm not sure you have the setup foo to make semse of them. :)
I'm not sure I understand zc.recipe.egg and setuptools well enough to be able to guess what may be wrong.
As Ian pointed out, this doesn't seem to be a buildout thing, although I can't be sure until I try to make it work myself.
Since zc.buildout uses setuptools though, if there is a standard setuptools way of doing this, I'd hope it should be possible to do it in zc.buildout?
I think it should be, although I'm not sure it will have the semantics you want, although I won't be sure until I try it myself. I will try to do this this week. Feel free to nag me. :) Jim -- Jim Fulton mailto:jim@zope.com Python Powered! CTO (540) 361-1714 http://www.python.org Zope Corporation http://www.zope.com http://www.zope.org
participants (5)
-
Ian Bicking
-
Jim Fulton
-
Martin Aspeli
-
Nathan R. Yergler
-
Phillip J. Eby