{ "info": { "author": "Jim Fulton", "author_email": "jim@zope.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Framework :: Buildout", "Intended Audience :: Developers", "License :: OSI Approved :: Zope Public License", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Topic :: Software Development :: Build Tools", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "********************************\nBuildout Egg-Installation Recipe\n********************************\n\n.. contents::\n\nThe egg-installation recipe installs eggs into a buildout eggs\ndirectory. It also generates scripts in a buildout bin directory with \negg paths baked into them.\n\n\nChange History\n**************\n\n2.0.7 (2018-07-02)\n==================\n\n- For the 2.0.6 change, we require zc.buildout 2.12.0. The `install_requires`\n in `setup.py` now also says that.\n\n\n2.0.6 (2018-07-02)\n==================\n\n- Added extra keyword argument ``allow_unknown_extras`` to support zc.buildout\n 2.12.0.\n\n\n2.0.5 (2017-12-04)\n==================\n\n- Fixed #429: added sorting of working set by priority of different\n type of paths (develop-eggs-directory, eggs-directory, other paths).\n\n\n2.0.4 (2017-08-17)\n==================\n\n- Fixed #153: buildout should cache working set environments\n [rafaelbco]\n\n\n2.0.3 (2015-10-02)\n==================\n\n- Releasing zc.recipe.egg as a wheel in addition to only an sdist. No\n functional changes.\n [reinout]\n\n2.0.2 (2015-07-01)\n==================\n\n- Fixed: In ``zc.recipe.egg#custom`` recipe's ``rpath`` support, don't\n assume path elements are buildout-relative if they start with one of the\n \"special\" tokens (e.g., ``$ORIGIN``). See:\n https://github.com/buildout/buildout/issues/225.\n [tseaver]\n\n2.0.1 (2013-09-05)\n==================\n\n- Accomodated ``zc.buildout`` switch to post-merge ``setuptools``.\n\n2.0.0 (2013-04-02)\n==================\n\n- Enabled 'prefer-final' option by default.\n\n2.0.0a3 (2012-11-19)\n====================\n\n- Added support for Python 3.2 / 3.3.\n\n- Added 'MANIFEST.in'.\n\n- Support non-entry-point-based scripts.\n\n- Honor exit codes from scripts (https://bugs.launchpad.net/bugs/697913).\n\n2.0.0a2 (2012-05-03)\n====================\n\n- Always unzip installed eggs.\n\n- Switched from using 'setuptools' to 'distribute'.\n\n- Removed multi-python support.\n\n1.3.2 (2010-08-23)\n==================\n\n- Bugfix for the change introduced in 1.3.1.\n\n1.3.1 (2010-08-23)\n==================\n\n- Support recipes that are using zc.recipe.egg by passing in a dict, rather\n than a zc.buildout.buildout.Options object as was expected/tested.\n\n1.3.0 (2010-08-23)\n==================\n\n- Small further refactorings past 1.2.3b1 to be compatible with\n zc.buildout 1.5.0.\n\n1.2.3b1 (2010-04-29)\n====================\n\n- Refactored to be used with z3c.recipe.scripts and zc.buildout 1.5.0.\n No new user-visible features.\n\n1.2.2 (2009-03-18)\n==================\n\n- Fixed a dependency information. zc.buildout >1.2.0 is required.\n\n1.2.1 (2009-03-18)\n==================\n\n- Refactored generation of relative egg paths to generate simpler code.\n\n1.2.0 (2009-03-17)\n==================\n\n- Added the `dependent-scripts` option. When set to `true`, scripts will\n be generated for all required eggs in addition to the eggs named\n specifically. This idea came from two forks of this recipe,\n `repoze.recipe.egg` and `pylons_sandbox`, but the option name is\n spelled with a dash instead of underscore and it defaults to `false`.\n\n- Added a relative-paths option. When true, egg paths in scripts are generated\n relative to the script names.\n\n1.1.0 (2008-07-19)\n==================\n\n- Refactored to work honor the new buildout-level unzip option.\n\n\n1.1.0b1 (2008-06-27)\n====================\n\n- Added `environment` option to custom extension building options.\n\n1.0.0 (2007-11-03)\n==================\n\n- No code changes from last beta, just some small package meta-data\n improvements.\n\n1.0.0b5 (2007-02-08)\n====================\n\nFeature Changes\n---------------\n\n- Added support for the buildout newest option.\n\n1.0.0b4 (2007-01-17)\n====================\n\nFeature Changes\n---------------\n\n- Added initialization and arguments options to the scripts recipe.\n\n- Added an eggs recipe that *just* installs eggs.\n\n- Advertized the scripts recipe for creating scripts.\n\n1.0.0b3 (2006-12-04)\n====================\n\nFeature Changes\n---------------\n\n- Added a develop recipe for creating develop eggs.\n\n This is useful to:\n\n - Specify custom extension building options,\n\n - Specify a version of Python to use, and to\n\n - Cause develop eggs to be created after other parts.\n\n- The develop and build recipes now return the paths created, so that\n created eggs or egg links are removed when a part is removed (or\n changed).\n\n\n1.0.0b2 (2006-10-16)\n====================\n\nUpdated to work with (not get a warning from) zc.buildout 1.0.0b10.\n\n1.0.0b1\n=======\n\nUpdated to work with zc.buildout 1.0.0b3.\n\n1.0.0a3\n=======\n\n- Extra path elements to be included in generated scripts can now be\n set via the extra-paths option.\n\n- No longer implicitly generate \"py\\_\" scripts for each egg. There is\n now an interpreter option to generate a script that, when run\n without arguments, launches the Python interactive interpreter with\n the path set based on a parts eggs and extra paths. If this script\n is run with the name of a Python script and arguments, then the\n given script is run with the path set.\n\n- You can now specify explicit entry points. This is useful for use\n with packages that don't declare their own entry points.\n\n- Added Windows support.\n\n- Now-longer implicitly generate \"py\\_\" scripts for each egg. You can\n now generate a script for launching a Python interpreter or for\n running scripts based on the eggs defined for an egg part.\n\n- You can now specify custom entry points for packages that don't\n declare their entry points.\n\n- You can now specify extra-paths to be included in generated scripts.\n\n\n1.0.0a2\n=======\n\nAdded a custom recipe for building custom eggs using custom distutils\nbuild_ext arguments.\n\n1.0.0a1\n=======\n\nInitial public version\n\nDetailed Documentation\n**********************\n\nInstallation of distributions as eggs\n=====================================\n\nThe zc.recipe.egg:eggs recipe can be used to install various types if\ndistutils distributions as eggs. It takes a number of options:\n\neggs\n A list of eggs to install given as one or more setuptools\n requirement strings. Each string must be given on a separate\n line.\n\nfind-links\n A list of URLs, files, or directories to search for distributions.\n\nindex\n The URL of an index server, or almost any other valid URL. :)\n\n If not specified, the Python Package Index,\n http://cheeseshop.python.org/pypi, is used. You can specify an\n alternate index with this option. If you use the links option and\n if the links point to the needed distributions, then the index can\n be anything and will be largely ignored. In the examples, here,\n we'll just point to an empty directory on our link server. This\n will make our examples run a little bit faster.\n\nWe have a link server that has a number of distributions:\n\n >>> print_(get(link_server), end='')\n \n bigdemo-0.1-py2.3.egg
\n demo-0.1-py2.3.egg
\n demo-0.2-py2.3.egg
\n demo-0.3-py2.3.egg
\n demo-0.4rc1-py2.3.egg
\n demoneeded-1.0.zip
\n demoneeded-1.1.zip
\n demoneeded-1.2rc1.zip
\n du_zipped-1.0-pyN.N.egg
\n extdemo-1.4.zip
\n index/
\n mixedcase-0.5.zip
\n other-1.0-py2.3.egg
\n \n\nWe have a sample buildout. Let's update it's configuration file to\ninstall the demo package.\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = demo\n ...\n ... [demo]\n ... recipe = zc.recipe.egg:eggs\n ... eggs = demo<0.3\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... \"\"\" % dict(server=link_server))\n\nIn this example, we limited ourselves to revisions before 0.3. We also\nspecified where to find distributions using the find-links option.\n\nLet's run the buildout:\n\n >>> import os\n >>> print_(system(buildout), end='')\n Installing demo.\n Getting distribution for 'demo<0.3'.\n Got demo 0.2.\n Getting distribution for 'demoneeded'.\n Got demoneeded 1.1.\n\nNow, if we look at the buildout eggs directory:\n\n >>> ls(sample_buildout, 'eggs')\n d demo-0.2-py2.3.egg\n d demoneeded-1.1-py2.3.egg\n - setuptools-0.7-py2.3.egg\n d zc.buildout-1.0-py2.3.egg\n\nWe see that we got an egg for demo that met the requirement, as well\nas the egg for demoneeded, which demo requires. (We also see an egg\nlink for the recipe in the develop-eggs directory. This egg link was\nactually created as part of the sample buildout setup. Normally, when\nusing the recipe, you'll get a regular egg installation.)\n\nScript generation\n-----------------\n\nThe demo egg defined a script, but we didn't get one installed:\n\n >>> ls(sample_buildout, 'bin')\n - buildout\n\nIf we want scripts provided by eggs to be installed, we should use the\nscripts recipe:\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = demo\n ...\n ... [demo]\n ... recipe = zc.recipe.egg:scripts\n ... eggs = demo<0.3\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... \"\"\" % dict(server=link_server))\n\n >>> print_(system(buildout), end='')\n Uninstalling demo.\n Installing demo.\n Generated script '/sample-buildout/bin/demo'.\n\nNow we also see the script defined by the demo script:\n\n >>> ls(sample_buildout, 'bin')\n - buildout\n - demo\n\nThe scripts recipe defines some additional options:\n\nentry-points\n A list of entry-point identifiers of the form:\n\n name=module:attrs\n\n where name is a script name, module is a dotted name resolving to a\n module name, and attrs is a dotted name resolving to a callable\n object within a module.\n\n This option is useful when working with distributions that don't\n declare entry points, such as distributions not written to work\n with setuptools.\n\n Examples can be seen in the section \"Specifying entry points\" below.\n\nscripts\n Control which scripts are generated. The value should be a list of\n zero or more tokens. Each token is either a name, or a name\n followed by an '=' and a new name. Only the named scripts are\n generated. If no tokens are given, then script generation is\n disabled. If the option isn't given at all, then all scripts\n defined by the named eggs will be generated.\n\ndependent-scripts\n If set to the string \"true\", scripts will be generated for all\n required eggs in addition to the eggs specifically named.\n\ninterpreter\n The name of a script to generate that allows access to a Python\n interpreter that has the path set based on the eggs installed.\n\nextra-paths\n Extra paths to include in a generated script.\n\ninitialization\n Specify some Python initialization code. This is very limited. In\n particular, be aware that leading whitespace is stripped from the\n code given.\n\narguments\n Specify some arguments to be passed to entry points as Python source.\n\nrelative-paths\n If set to true, then egg paths will be generated relative to the\n script path. This allows a buildout to be moved without breaking\n egg paths. This option can be set in either the script section or\n in the buildout section.\n\nLet's add an interpreter option:\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = demo\n ...\n ... [demo]\n ... recipe = zc.recipe.egg\n ... eggs = demo<0.3\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... interpreter = py-demo\n ... \"\"\" % dict(server=link_server))\n\nNote that we omitted the entry point name from the recipe\nspecification. We were able to do this because the scripts recipe is\nthe default entry point for the zc.recipe.egg egg.\n\n >>> print_(system(buildout), end='')\n Uninstalling demo.\n Installing demo.\n Generated script '/sample-buildout/bin/demo'.\n Generated interpreter '/sample-buildout/bin/py-demo'.\n\nNow we also get a py-demo script for giving us a Python prompt with\nthe path for demo and any eggs it depends on included in sys.path.\nThis is useful for debugging and testing.\n\n >>> ls(sample_buildout, 'bin')\n - buildout\n - demo\n - py-demo\n\nIf we run the demo script, it prints out some minimal data:\n\n >>> print_(system(join(sample_buildout, 'bin', 'demo')), end='')\n 2 1\n\nThe value it prints out happens to be some values defined in the\nmodules installed.\n\nWe can also run the py-demo script. Here we'll just print_(out)\nthe bits if the path added to reflect the eggs:\n\n >>> print_(system(join(sample_buildout, 'bin', 'py-demo'),\n ... \"\"\"import os, sys\n ... for p in sys.path:\n ... if 'demo' in p:\n ... _ = sys.stdout.write(os.path.basename(p)+'\\\\n')\n ...\n ... \"\"\").replace('>>> ', '').replace('... ', ''), end='')\n ... # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE\n demo-0.2-py2.4.egg\n demoneeded-1.1-py2.4.egg...\n\nEgg updating\n------------\n\nThe recipe normally gets the most recent distribution that satisfies the\nspecification. It won't do this is the buildout is either in\nnon-newest mode or in offline mode. To see how this works, we'll\nremove the restriction on demo:\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = demo\n ...\n ... [demo]\n ... recipe = zc.recipe.egg\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... \"\"\" % dict(server=link_server))\n\nand run the buildout in non-newest mode:\n\n >>> print_(system(buildout+' -N'), end='')\n Uninstalling demo.\n Installing demo.\n Generated script '/sample-buildout/bin/demo'.\n\nNote that we removed the eggs option, and the eggs defaulted to the\npart name. Because we removed the eggs option, the demo was\nreinstalled.\n\nWe'll also run the buildout in off-line mode:\n\n >>> print_(system(buildout+' -o'), end='')\n Updating demo.\n\nWe didn't get an update for demo:\n\n >>> ls(sample_buildout, 'eggs')\n d demo-0.2-py2.3.egg\n d demoneeded-1.1-py2.3.egg\n - setuptools-0.7-py2.3.egg\n d zc.buildout-1.0-py2.3.egg\n\nIf we run the buildout on the default online and newest modes,\nwe'll get an update for demo:\n\n >>> print_(system(buildout), end='')\n Updating demo.\n Getting distribution for 'demo'.\n Got demo 0.3.\n Generated script '/sample-buildout/bin/demo'.\n\nThen we'll get a new demo egg:\n\n >>> ls(sample_buildout, 'eggs')\n d demo-0.2-py2.3.egg\n d demo-0.3-py2.3.egg\n d demoneeded-1.1-py2.3.egg\n - setuptools-0.7-py2.4.egg\n d zc.buildout-1.0-py2.4.egg\n\nThe script is updated too:\n\n >>> print_(system(join(sample_buildout, 'bin', 'demo')), end='')\n 3 1\n\nControlling script generation\n-----------------------------\n\nYou can control which scripts get generated using the scripts option.\nFor example, to suppress scripts, use the scripts option without any\narguments:\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = demo\n ...\n ... [demo]\n ... recipe = zc.recipe.egg\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... scripts =\n ... \"\"\" % dict(server=link_server))\n\n\n >>> print_(system(buildout), end='')\n Uninstalling demo.\n Installing demo.\n\n >>> ls(sample_buildout, 'bin')\n - buildout\n\nYou can also control the name used for scripts:\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = demo\n ...\n ... [demo]\n ... recipe = zc.recipe.egg\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... scripts = demo=foo\n ... \"\"\" % dict(server=link_server))\n\n >>> print_(system(buildout), end='')\n Uninstalling demo.\n Installing demo.\n Generated script '/sample-buildout/bin/foo'.\n\n >>> ls(sample_buildout, 'bin')\n - buildout\n - foo\n\nSpecifying extra script paths\n-----------------------------\n\nIf we need to include extra paths in a script, we can use the\nextra-paths option:\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = demo\n ...\n ... [demo]\n ... recipe = zc.recipe.egg\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... scripts = demo=foo\n ... extra-paths =\n ... /foo/bar\n ... ${buildout:directory}/spam\n ... \"\"\" % dict(server=link_server))\n\n >>> print_(system(buildout), end='')\n Uninstalling demo.\n Installing demo.\n Generated script '/sample-buildout/bin/foo'.\n\nLet's look at the script that was generated:\n\n >>> cat(sample_buildout, 'bin', 'foo') # doctest: +NORMALIZE_WHITESPACE\n #!/usr/local/bin/python2.7\n \n import sys\n sys.path[0:0] = [\n '/sample-buildout/eggs/demo-0.3-py2.4.egg',\n '/sample-buildout/eggs/demoneeded-1.1-py2.4.egg',\n '/foo/bar',\n '/sample-buildout/spam',\n ]\n \n import eggrecipedemo\n \n if __name__ == '__main__':\n sys.exit(eggrecipedemo.main())\n\nRelative egg paths\n------------------\n\nIf the relative-paths option is specified with a true value, then\npaths will be generated relative to the script. This is useful when\nyou want to be able to move a buildout directory around without\nbreaking scripts.\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = demo\n ...\n ... [demo]\n ... recipe = zc.recipe.egg\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... scripts = demo=foo\n ... relative-paths = true\n ... extra-paths =\n ... /foo/bar\n ... ${buildout:directory}/spam\n ... \"\"\" % dict(server=link_server))\n\n >>> print_(system(buildout), end='')\n Uninstalling demo.\n Installing demo.\n Generated script '/sample-buildout/bin/foo'.\n\nLet's look at the script that was generated:\n\n >>> cat(sample_buildout, 'bin', 'foo') # doctest: +NORMALIZE_WHITESPACE\n #!/usr/local/bin/python2.7\n \n import os\n \n join = os.path.join\n base = os.path.dirname(os.path.abspath(os.path.realpath(__file__)))\n base = os.path.dirname(base)\n \n import sys\n sys.path[0:0] = [\n join(base, 'eggs/demo-0.3-pyN.N.egg'),\n join(base, 'eggs/demoneeded-1.1-pyN.N.egg'),\n '/foo/bar',\n join(base, 'spam'),\n ]\n \n import eggrecipedemo\n \n if __name__ == '__main__':\n sys.exit(eggrecipedemo.main())\n\nYou can specify relative paths in the buildout section, rather than in\neach individual script section:\n\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = demo\n ... relative-paths = true\n ...\n ... [demo]\n ... recipe = zc.recipe.egg\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... scripts = demo=foo\n ... extra-paths =\n ... /foo/bar\n ... ${buildout:directory}/spam\n ... \"\"\" % dict(server=link_server))\n\n >>> print_(system(buildout), end='')\n Uninstalling demo.\n Installing demo.\n Generated script '/sample-buildout/bin/foo'.\n\n >>> cat(sample_buildout, 'bin', 'foo') # doctest: +NORMALIZE_WHITESPACE\n #!/usr/local/bin/python2.7\n \n import os\n \n join = os.path.join\n base = os.path.dirname(os.path.abspath(os.path.realpath(__file__)))\n base = os.path.dirname(base)\n \n import sys\n sys.path[0:0] = [\n join(base, 'eggs/demo-0.3-pyN.N.egg'),\n join(base, 'eggs/demoneeded-1.1-pyN.N.egg'),\n '/foo/bar',\n join(base, 'spam'),\n ]\n \n import eggrecipedemo\n \n if __name__ == '__main__':\n sys.exit(eggrecipedemo.main())\n\nSpecifying initialization code and arguments\n-----------------------------------------------\n\nSometimes, we need to do more than just calling entry points. We can\nuse the initialization and arguments options to specify extra code\nto be included in generated scripts:\n\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = demo\n ...\n ... [demo]\n ... recipe = zc.recipe.egg\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... scripts = demo=foo\n ... extra-paths =\n ... /foo/bar\n ... ${buildout:directory}/spam\n ... initialization = a = (1, 2\n ... 3, 4)\n ... interpreter = py\n ... arguments = a, 2\n ... \"\"\" % dict(server=link_server))\n\n >>> print_(system(buildout), end='')\n Uninstalling demo.\n Installing demo.\n Generated script '/sample-buildout/bin/foo'.\n Generated interpreter '/sample-buildout/bin/py'.\n\n >>> cat(sample_buildout, 'bin', 'foo') # doctest: +NORMALIZE_WHITESPACE\n #!/usr/local/bin/python2.7\n \n import sys\n sys.path[0:0] = [\n '/sample-buildout/eggs/demo-0.3-py2.4.egg',\n '/sample-buildout/eggs/demoneeded-1.1-py2.4.egg',\n '/foo/bar',\n '/sample-buildout/spam',\n ]\n \n a = (1, 2\n 3, 4)\n \n import eggrecipedemo\n \n if __name__ == '__main__':\n sys.exit(eggrecipedemo.main(a, 2))\n\nHere we see that the initialization code we specified was added after\nsetting the path. Note, as mentioned above, that leading whitespace\nhas been stripped. Similarly, the argument code we specified was\nadded in the entry point call (to main).\n\nOur interpreter also has the initialization code:\n\n >>> cat(sample_buildout, 'bin', 'py')\n ... # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS\n #!/usr/local/bin/python2.7\n \n import sys\n \n sys.path[0:0] = [\n '/sample-buildout/eggs/demo-0.3-py3.3.egg',\n '/sample-buildout/eggs/demoneeded-1.1-py3.3.egg',\n '/foo/bar',\n '/sample-buildout/spam',\n ]\n \n a = (1, 2\n 3, 4)\n \n \n _interactive = True\n ...\n\nSpecifying entry points\n-----------------------\n\nScripts can be generated for entry points declared explicitly. We can\ndeclare entry points using the entry-points option:\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = demo\n ...\n ... [demo]\n ... recipe = zc.recipe.egg\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... extra-paths =\n ... /foo/bar\n ... ${buildout:directory}/spam\n ... entry-points = alt=eggrecipedemo:alt other=foo.bar:a.b.c\n ... \"\"\" % dict(server=link_server))\n\n >>> print_(system(buildout), end='')\n Uninstalling demo.\n Installing demo.\n Generated script '/sample-buildout/bin/demo'.\n Generated script '/sample-buildout/bin/alt'.\n Generated script '/sample-buildout/bin/other'.\n\n >>> ls(sample_buildout, 'bin')\n - alt\n - buildout\n - demo\n - other\n\n >>> cat(sample_buildout, 'bin', 'other')\n #!/usr/local/bin/python2.7\n \n import sys\n sys.path[0:0] = [\n '/sample-buildout/eggs/demo-0.3-py2.4.egg',\n '/sample-buildout/eggs/demoneeded-1.1-py2.4.egg',\n '/foo/bar',\n '/sample-buildout/spam',\n ]\n \n import foo.bar\n \n if __name__ == '__main__':\n sys.exit(foo.bar.a.b.c())\n\nGenerating all scripts\n----------------------\n\nThe `bigdemo` package doesn't have any scripts, but it requires the `demo`\npackage, which does have a script. Specify `dependent-scripts = true` to\ngenerate all scripts in required packages:\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = bigdemo\n ...\n ... [bigdemo]\n ... recipe = zc.recipe.egg\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... dependent-scripts = true\n ... \"\"\" % dict(server=link_server))\n >>> print_(system(buildout+' -N'), end='')\n Uninstalling demo.\n Installing bigdemo.\n Getting distribution for 'bigdemo'.\n Got bigdemo 0.1.\n Generated script '/sample-buildout/bin/demo'.\n\nOffline mode\n------------\n\nIf the buildout offline option is set to \"true\", then no attempt will\nbe made to contact an index server:\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = demo\n ... offline = true\n ...\n ... [demo]\n ... recipe = zc.recipe.egg\n ... index = eek!\n ... scripts = demo=foo\n ... \"\"\" % dict(server=link_server))\n\n >>> print_(system(buildout), end='')\n Uninstalling bigdemo.\n Installing demo.\n Generated script '/sample-buildout/bin/foo'.\n\nCreating eggs with extensions needing custom build settings\n=============================================================\n\nSometimes, It's necessary to provide extra control over how an egg is\ncreated. This is commonly true for eggs with extension modules that\nneed to access libraries or include files.\n\nThe zc.recipe.egg:custom recipe can be used to define an egg with\ncustom build parameters. The currently defined parameters are:\n\ninclude-dirs\n A new-line separated list of directories to search for include\n files.\n\nlibrary-dirs\n A new-line separated list of directories to search for libraries\n to link with.\n\nrpath\n A new-line separated list of directories to search for dynamic libraries\n at run time.\n\ndefine\n A comma-separated list of names of C preprocessor variables to\n define.\n\nundef\n A comma-separated list of names of C preprocessor variables to\n undefine.\n\nlibraries\n The name of an additional library to link with. Due to limitations\n in distutils and despite the option name, only a single library\n can be specified.\n\nlink-objects\n The name of an link object to link against. Due to limitations\n in distutils and despite the option name, only a single link object\n can be specified.\n\ndebug\n Compile/link with debugging information\n\nforce\n Forcibly build everything (ignore file timestamps)\n\ncompiler\n Specify the compiler type\n\nswig\n The path to the swig executable\n\nswig-cpp\n Make SWIG create C++ files (default is C)\n\nswig-opts\n List of SWIG command line options\n\nIn addition, the following options can be used to specify the egg:\n\negg\n An specification for the egg to be created, to install given as a\n setuptools requirement string. This defaults to the part name.\n\nfind-links\n A list of URLs, files, or directories to search for distributions.\n\nindex\n The URL of an index server, or almost any other valid URL. :)\n\n If not specified, the Python Package Index,\n http://cheeseshop.python.org/pypi, is used. You can specify an\n alternate index with this option. If you use the links option and\n if the links point to the needed distributions, then the index can\n be anything and will be largely ignored. In the examples, here,\n we'll just point to an empty directory on our link server. This\n will make our examples run a little bit faster.\n\nenvironment\n The name of a section with additional environment variables. The\n environment variables are set before the egg is built.\n\nTo illustrate this, we'll define a buildout that builds an egg for a\npackage that has a simple extension module::\n\n #include \n #include \n\n static PyMethodDef methods[] = {};\n\n PyMODINIT_FUNC\n initextdemo(void)\n {\n PyObject *m;\n m = Py_InitModule3(\"extdemo\", methods, \"\");\n #ifdef TWO\n PyModule_AddObject(m, \"val\", PyInt_FromLong(2));\n #else\n PyModule_AddObject(m, \"val\", PyInt_FromLong(EXTDEMO));\n #endif\n }\n\nThe extension depends on a system-dependent include file, extdemo.h,\nthat defines a constant, EXTDEMO, that is exposed by the extension.\n\nThe extension module is available as a source distribution,\nextdemo-1.4.tar.gz, on a distribution server.\n\nWe have a sample buildout that we'll add an include directory to with\nthe necessary include file:\n\n >>> mkdir('include')\n >>> write('include', 'extdemo.h',\n ... \"\"\"\n ... #define EXTDEMO 42\n ... \"\"\")\n\nWe'll also update the buildout configuration file to define a part for\nthe egg:\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... parts = extdemo\n ...\n ... [extdemo]\n ... recipe = zc.recipe.egg:custom\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... include-dirs = include\n ...\n ... \"\"\" % dict(server=link_server))\n\n >>> print_(system(buildout), end='') # doctest: +ELLIPSIS\n Installing extdemo...\n\nWe got the zip_safe warning because the source distribution we used\nwasn't setuptools based and thus didn't set the option.\n\nThe egg is created in the develop-eggs directory *not* the eggs\ndirectory because it depends on buildout-specific parameters and the\neggs directory can be shared across multiple buildouts.\n\n >>> ls(sample_buildout, 'develop-eggs')\n d extdemo-1.4-py2.4-unix-i686.egg\n - zc.recipe.egg.egg-link\n\nNote that no scripts or dependencies are installed. To install\ndependencies or scripts for a custom egg, define another part and use\nthe zc.recipe.egg recipe, listing the custom egg as one of the eggs to\nbe installed. The zc.recipe.egg recipe will use the installed egg.\n\nLet's define a script that uses out ext demo:\n\n >>> mkdir('demo')\n >>> write('demo', 'demo.py',\n ... \"\"\"\n ... import extdemo, sys\n ... def print_(*args):\n ... sys.stdout.write(' '.join(map(str, args)) + '\\\\n')\n ... def main():\n ... print_(extdemo.val)\n ... \"\"\")\n\n >>> write('demo', 'setup.py',\n ... \"\"\"\n ... from setuptools import setup\n ... setup(name='demo')\n ... \"\"\")\n\n\n >>> write('buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... develop = demo\n ... parts = extdemo demo\n ...\n ... [extdemo]\n ... recipe = zc.recipe.egg:custom\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... include-dirs = include\n ...\n ... [demo]\n ... recipe = zc.recipe.egg\n ... eggs = demo\n ... extdemo\n ... entry-points = demo=demo:main\n ... \"\"\" % dict(server=link_server))\n\n >>> print_(system(buildout), end='')\n Develop: '/sample-buildout/demo'\n Updating extdemo.\n Installing demo.\n Generated script '/sample-buildout/bin/demo'...\n\nWhen we run the script, we'll 42 printed:\n\n >>> print_(system(join('bin', 'demo')), end='')\n 42\n\nUpdating\n--------\n\nThe custom recipe will normally check for new source distributions\nthat meet the given specification. This can be suppressed using the\nbuildout non-newest and offline modes. We'll generate a new source\ndistribution for extdemo:\n\n >>> update_extdemo()\n\nIf we run the buildout in non-newest or offline modes:\n\n >>> print_(system(buildout+' -N'), end='')\n Develop: '/sample-buildout/demo'\n Updating extdemo.\n Updating demo.\n\n >>> print_(system(buildout+' -o'), end='')\n Develop: '/sample-buildout/demo'\n Updating extdemo.\n Updating demo.\n\nWe won't get an update.\n\n >>> ls(sample_buildout, 'develop-eggs')\n - demo.egg-link\n d extdemo-1.4-py2.4-unix-i686.egg\n - zc.recipe.egg.egg-link\n\nBut if we run the buildout in the default on-line and newest modes, we\nwill. This time we also get the test-variable message again, because the new\nversion is imported:\n\n >>> print_(system(buildout), end='') # doctest: +ELLIPSIS\n Develop: '/sample-buildout/demo'\n Updating extdemo.\n zip_safe flag not set; analyzing archive contents...\n Updating demo.\n ...\n\n >>> ls(sample_buildout, 'develop-eggs')\n - demo.egg-link\n d extdemo-1.4-py2.4-linux-i686.egg\n d extdemo-1.5-py2.4-linux-i686.egg\n - zc.recipe.egg.egg-link\n\nControlling the version used\n----------------------------\n\nWe can specify a specific version using the egg option:\n\n >>> write('buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... develop = demo\n ... parts = extdemo demo\n ...\n ... [extdemo]\n ... recipe = zc.recipe.egg:custom\n ... egg = extdemo ==1.4\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... include-dirs = include\n ...\n ... [demo]\n ... recipe = zc.recipe.egg\n ... eggs = demo\n ... extdemo ==1.4\n ... entry-points = demo=demo:main\n ... \"\"\" % dict(server=link_server))\n\n >>> print_(system(buildout+' -D'), end='') # doctest: +ELLIPSIS\n Develop: '/sample-buildout/demo'\n ...\n\n >>> ls(sample_buildout, 'develop-eggs')\n - demo.egg-link\n d extdemo-1.4-py2.4-linux-i686.egg\n - zc.recipe.egg.egg-link\n\n\nControlling environment variables\n+++++++++++++++++++++++++++++++++\n\nTo set additional environment variables, the `environment` option is used.\n\nLet's create a recipe which prints out environment variables. We need this to\nmake sure the set environment variables are removed after the egg:custom\nrecipe was run.\n\n >>> mkdir(sample_buildout, 'recipes')\n >>> write(sample_buildout, 'recipes', 'environ.py',\n ... \"\"\"\n ... import logging, os, zc.buildout\n ...\n ... class Environ:\n ...\n ... def __init__(self, buildout, name, options):\n ... self.name = name\n ...\n ... def install(self):\n ... logging.getLogger(self.name).info(\n ... 'test-variable left over: %s' % (\n ... 'test-variable' in os.environ))\n ... return []\n ...\n ... def update(self):\n ... self.install()\n ... \"\"\")\n >>> write(sample_buildout, 'recipes', 'setup.py',\n ... \"\"\"\n ... from setuptools import setup\n ...\n ... setup(\n ... name = \"recipes\",\n ... entry_points = {'zc.buildout': ['environ = environ:Environ']},\n ... )\n ... \"\"\")\n\n\nCreate our buildout:\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... develop = recipes\n ... parts = extdemo checkenv\n ...\n ... [extdemo-env]\n ... test-variable = foo\n ...\n ... [extdemo]\n ... recipe = zc.recipe.egg:custom\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... include-dirs = include\n ... environment = extdemo-env\n ...\n ... [checkenv]\n ... recipe = recipes:environ\n ...\n ... \"\"\" % dict(server=link_server))\n >>> print_(system(buildout), end='') # doctest: +ELLIPSIS\n Develop: '/sample-buildout/recipes'\n Uninstalling demo.\n Uninstalling extdemo.\n Installing extdemo.\n Have environment test-variable: foo\n zip_safe flag not set; analyzing archive contents...\n Installing checkenv.\n ...\n\n\nThe setup.py also printed out that we have set the environment `test-variable`\nto foo. After the buildout the variable is reset to its original value (i.e.\nremoved).\n\nWhen an environment variable has a value before zc.recipe.egg:custom is run,\nthe original value will be restored:\n\n >>> import os\n >>> os.environ['test-variable'] = 'bar'\n >>> print_(system(buildout), end='')\n Develop: '/sample-buildout/recipes'\n Updating extdemo.\n Updating checkenv.\n checkenv: test-variable left over: True\n\n >>> os.environ['test-variable']\n 'bar'\n\n\nSometimes it is required to prepend or append to an existing environment\nvariable, for instance for adding something to the PATH. Therefore all variables\nare interpolated with os.environ before the're set:\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... develop = recipes\n ... parts = extdemo checkenv\n ...\n ... [extdemo-env]\n ... test-variable = foo:%%(test-variable)s\n ...\n ... [extdemo]\n ... recipe = zc.recipe.egg:custom\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... include-dirs = include\n ... environment = extdemo-env\n ...\n ... [checkenv]\n ... recipe = recipes:environ\n ...\n ... \"\"\" % dict(server=link_server))\n >>> print_(system(buildout), end='') # doctest: +ELLIPSIS\n Develop: '/sample-buildout/recipes'\n Uninstalling extdemo.\n Installing extdemo.\n Have environment test-variable: foo:bar\n zip_safe flag not set; analyzing archive contents...\n Updating checkenv.\n ...\n\n >>> os.environ['test-variable']\n 'bar'\n >>> del os.environ['test-variable']\n\n\nCreate a clean buildout.cfg w/o the checkenv recipe, and delete the recipe:\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... develop = recipes\n ... parts = extdemo\n ...\n ... [extdemo]\n ... recipe = zc.recipe.egg:custom\n ... find-links = %(server)s\n ... index = %(server)s/index\n ... include-dirs = include\n ...\n ... \"\"\" % dict(server=link_server))\n >>> print_(system(buildout), end='') # doctest: +ELLIPSIS\n Develop: '/sample-buildout/recipes'\n Uninstalling checkenv.\n Uninstalling extdemo.\n Installing extdemo...\n\n >>> rmdir(sample_buildout, 'recipes')\n\n\nControlling develop-egg generation\n==================================\n\nIf you want to provide custom build options for a develop egg, you can\nuse the develop recipe. The recipe has the following options:\n\nsetup\n The path to a setup script or directory containing a startup\n script. This is required.\n\ninclude-dirs\n A new-line separated list of directories to search for include\n files.\n\nlibrary-dirs\n A new-line separated list of directories to search for libraries\n to link with.\n\nrpath\n A new-line separated list of directories to search for dynamic libraries\n at run time.\n\ndefine\n A comma-separated list of names of C preprocessor variables to\n define.\n\nundef\n A comma-separated list of names of C preprocessor variables to\n undefine.\n\nlibraries\n The name of an additional library to link with. Due to limitations\n in distutils and despite the option name, only a single library\n can be specified.\n\nlink-objects\n The name of an link object to link against. Due to limitations\n in distutils and despite the option name, only a single link object\n can be specified.\n\ndebug\n Compile/link with debugging information\n\nforce\n Forcibly build everything (ignore file timestamps)\n\ncompiler\n Specify the compiler type\n\nswig\n The path to the swig executable\n\nswig-cpp\n Make SWIG create C++ files (default is C)\n\nswig-opts\n List of SWIG command line options\n\nTo illustrate this, we'll use a directory containing the extdemo\nexample from the earlier section:\n\n >>> ls(extdemo)\n - MANIFEST\n - MANIFEST.in\n - README\n - extdemo.c\n - setup.py\n\n >>> write('buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... develop = demo\n ... parts = extdemo demo\n ...\n ... [extdemo]\n ... setup = %(extdemo)s\n ... recipe = zc.recipe.egg:develop\n ... include-dirs = include\n ... define = TWO\n ...\n ... [demo]\n ... recipe = zc.recipe.egg\n ... eggs = demo\n ... extdemo\n ... entry-points = demo=demo:main\n ... \"\"\" % dict(extdemo=extdemo))\n\nNote that we added a define option to cause the preprocessor variable\nTWO to be defined. This will cause the module-variable, 'val', to be\nset with a value of 2.\n\n >>> print_(system(buildout), end='') # doctest: +ELLIPSIS\n Develop: '/sample-buildout/demo'\n Uninstalling extdemo.\n Installing extdemo.\n Installing demo.\n ...\n\nOur develop-eggs now includes an egg link for extdemo:\n\n >>> ls('develop-eggs')\n - demo.egg-link\n - extdemo.egg-link\n - zc.recipe.egg.egg-link\n\nand the extdemo now has a built extension:\n\n >>> contents = os.listdir(extdemo)\n >>> bool([f for f in contents if f.endswith('.so') or f.endswith('.pyd')])\n True\n\nBecause develop eggs take precedence over non-develop eggs, the demo\nscript will use the new develop egg:\n\n >>> print_(system(join('bin', 'demo')), end='')\n 2\n\nEgg Recipe API for other Recipes\n================================\n\nIt is common for recipes to accept a collection of egg specifications\nand generate scripts based on the resulting working sets. The egg\nrecipe provides an API that other recipes can use.\n\nA recipe can reuse the egg recipe, supporting the eggs, find-links,\nindex, and extra-paths options. This is done by creating an\negg recipe instance in a recipes's constructor. In the recipe's\ninstall script, the egg-recipe instance's working_set method is used\nto collect the requested eggs and working set.\n\nTo illustrate, we create a sample recipe that is a very thin layer\naround the egg recipe:\n\n >>> mkdir(sample_buildout, 'sample')\n >>> write(sample_buildout, 'sample', 'sample.py', \n ... \"\"\"\n ... import logging, os, sys\n ... import zc.recipe.egg\n ...\n ... def print_(*args):\n ... sys.stdout.write(' '.join(map(str, args)) + '\\\\n')\n ...\n ... class Sample:\n ...\n ... def __init__(self, buildout, name, options):\n ... self.egg = zc.recipe.egg.Scripts(buildout, name, options)\n ... self.name = name\n ... self.options = options\n ...\n ... def install(self):\n ... extras = self.options['extras'].split()\n ... requirements, ws = self.egg.working_set(extras)\n ... print_('Part:', self.name)\n ... print_('Egg requirements:')\n ... for r in requirements:\n ... print_(r)\n ... print_('Working set:')\n ... for d in ws:\n ... print_(d)\n ... print_('extra paths:', self.egg.extra_paths)\n ... return ()\n ...\n ... update = install\n ... \"\"\")\n\nHere we instantiated the egg recipe in the constructor, saving it in\nan attribute. This also initialized the options dictionary.\n\nIn our install method, we called the working_set method on the\ninstance we saved. The working_set method takes an optional sequence\nof extra requirements to be included in the working set.\n\n >>> write(sample_buildout, 'sample', 'setup.py',\n ... \"\"\"\n ... from setuptools import setup\n ... \n ... setup(\n ... name = \"sample\",\n ... entry_points = {'zc.buildout': ['default = sample:Sample']},\n ... install_requires = 'zc.recipe.egg',\n ... )\n ... \"\"\")\n\n\n >>> write(sample_buildout, 'sample', 'README.txt', \" \")\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... develop = sample\n ... parts = sample-part\n ...\n ... [sample-part]\n ... recipe = sample\n ... eggs = demo<0.3\n ... find-links = %(server)s\n ... index = %(server)sindex\n ... extras = other\n ... \"\"\" % dict(server=link_server))\n\n >>> import os\n >>> os.chdir(sample_buildout)\n >>> buildout = os.path.join(sample_buildout, 'bin', 'buildout')\n >>> print_(system(buildout + ' -q'), end='')\n Part: sample-part\n Egg requirements:\n demo<0.3\n Working set:\n demoneeded 1.1\n other 1.0\n demo 0.2\n extra paths: []\n\nWe can see that the options were augmented with additional data\ncomputed by the egg recipe by looking at .installed.cfg:\n\n >>> cat(sample_buildout, '.installed.cfg')\n [buildout]\n installed_develop_eggs = /sample-buildout/develop-eggs/sample.egg-link\n parts = sample-part\n \n [sample-part]\n __buildout_installed__ = \n __buildout_signature__ = ...\n _b = /sample-buildout/bin\n _d = /sample-buildout/develop-eggs\n _e = /sample-buildout/eggs\n bin-directory = /sample-buildout/bin\n develop-eggs-directory = /sample-buildout/develop-eggs\n eggs = demo<0.3\n eggs-directory = /sample-buildout/eggs\n extras = other\n find-links = http://localhost:27071/\n index = http://localhost:27071/index\n recipe = sample\n\nIf we use the extra-paths option:\n\n\n >>> write(sample_buildout, 'buildout.cfg',\n ... \"\"\"\n ... [buildout]\n ... develop = sample\n ... parts = sample-part\n ...\n ... [sample-part]\n ... recipe = sample\n ... eggs = demo<0.3\n ... find-links = %(server)s\n ... index = %(server)sindex\n ... extras = other\n ... extra-paths = /foo/bar\n ... /spam/eggs\n ... \"\"\" % dict(server=link_server))\n\nThen we'll see that reflected in the extra_paths attribute in the egg\nrecipe instance:\n\n >>> print_(system(buildout + ' -q'), end='')\n Part: sample-part\n Egg requirements:\n demo<0.3\n Working set:\n demo 0.2\n other 1.0\n demoneeded 1.1\n extra paths: ['/foo/bar', '/spam/eggs']\n\n\nWorking set caching\n===================\n\nWorking sets are cached, to improve speed on buildouts with multiple similar\nparts based on ``zc.recipe.egg``.\n\nThe egg-recipe instance's ``_working_set`` helper method is used to make\nthe caching easier. It does the same job as ``working_set()`` but with some\ndifferences:\n\n- The signature is different: all information needed to build the working set\n is passed as parameters.\n- The return value is simpler: only an instance of ``pkg_resources.WorkingSet``\n is returned.\n\nHere's an example:\n\n >>> from zc.buildout import testing\n >>> from zc.recipe.egg.egg import Eggs\n >>> import os\n >>> import pkg_resources\n >>> recipe = Eggs(buildout=testing.Buildout(), name='fake-part', options={})\n >>> eggs_dir = os.path.join(sample_buildout, 'eggs')\n >>> develop_eggs_dir = os.path.join(sample_buildout, 'develop-eggs')\n >>> testing.install_develop('zc.recipe.egg', develop_eggs_dir)\n >>> ws = recipe._working_set(\n ... distributions=['zc.recipe.egg', 'demo<0.3'],\n ... eggs_dir=eggs_dir,\n ... develop_eggs_dir=develop_eggs_dir,\n ... index=link_server,\n ... )\n Getting...\n >>> isinstance(ws, pkg_resources.WorkingSet)\n True\n >>> sorted(dist.project_name for dist in ws)\n ['demo', 'demoneeded', 'setuptools', 'zc.buildout', 'zc.recipe.egg']\n\nWe'll monkey patch a method in the ``easy_install`` module in order to verify if\nthe cache is working:\n\n >>> import zc.buildout.easy_install\n >>> old_install = zc.buildout.easy_install.Installer.install\n >>> def new_install(*args, **kwargs):\n ... print('Building working set.')\n ... return old_install(*args, **kwargs)\n >>> zc.buildout.easy_install.Installer.install = new_install\n\nNow we check if the caching is working by verifying if the same working set is\nbuilt only once.\n\n >>> ws_args_1 = dict(\n ... distributions=['demo>=0.1'],\n ... eggs_dir=eggs_dir,\n ... develop_eggs_dir=develop_eggs_dir,\n ... offline=True,\n ... )\n >>> ws_args_2 = dict(ws_args_1)\n >>> ws_args_2['distributions'] = ['demoneeded']\n >>> recipe._working_set(**ws_args_1)\n Building working set.\n \n >>> recipe._working_set(**ws_args_1)\n \n >>> recipe._working_set(**ws_args_2)\n Building working set.\n \n >>> recipe._working_set(**ws_args_1)\n \n >>> recipe._working_set(**ws_args_2)\n \n\nUndo monkey patch:\n\n >>> zc.buildout.easy_install.Installer.install = old_install\n\nSince ``pkg_resources.WorkingSet`` instances are mutable, we must ensure that\n``working_set()`` always returns a pristine copy. Otherwise callers would be\nable to modify instances inside the cache.\n\nLet's create a working set:\n\n >>> ws = recipe._working_set(**ws_args_1)\n >>> sorted(dist.project_name for dist in ws)\n ['demo', 'demoneeded']\n\nNow we add a distribution to it:\n\n >>> dist = pkg_resources.get_distribution('zc.recipe.egg')\n >>> ws.add(dist)\n >>> sorted(dist.project_name for dist in ws)\n ['demo', 'demoneeded', 'zc.recipe.egg']\n\nLet's call the working_set function again and see if the result remains valid:\n\n >>> ws = recipe._working_set(**ws_args_1)\n >>> sorted(dist.project_name for dist in ws)\n ['demo', 'demoneeded']\n\nDownload\n*********", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://cheeseshop.python.org/pypi/zc.recipe.egg", "keywords": "development build", "license": "ZPL 2.1", "maintainer": "", "maintainer_email": "", "name": "zc.recipe.egg", "package_url": "https://pypi.org/project/zc.recipe.egg/", "platform": "", "project_url": "https://pypi.org/project/zc.recipe.egg/", "project_urls": { "Homepage": "http://cheeseshop.python.org/pypi/zc.recipe.egg" }, "release_url": "https://pypi.org/project/zc.recipe.egg/2.0.7/", "requires_dist": null, "requires_python": "", "summary": "Recipe for installing Python package distributions as eggs", "version": "2.0.7" }, "last_serial": 4022554, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "324dc6ce0e213140bf20980513fcc2af", "sha256": "7ed51b63184441f4da5f5035ae92081e2ec2a2115cfedb032b1531b2e3c3a522" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0.tar.gz", "has_sig": false, "md5_digest": "324dc6ce0e213140bf20980513fcc2af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28270, "upload_time": "2007-11-03T19:14:45", "url": "https://files.pythonhosted.org/packages/8c/81/63168271629e280585b6e56da63480c8c0c1b7ba3d15e1a5e75c82d83473/zc.recipe.egg-1.0.0.tar.gz" } ], "1.0.0a1": [ { "comment_text": "", "digests": { "md5": "b0e15343cf2027e4fe975c46a68e1e6a", "sha256": "6c2f94b5f1418c108b27bf0114538abc8358273d2b2d3e33bd47a12cfaa46a59" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0a1-py2.3.egg", "has_sig": false, "md5_digest": "b0e15343cf2027e4fe975c46a68e1e6a", "packagetype": "bdist_egg", "python_version": "2.3", "requires_python": null, "size": 32719, "upload_time": "2006-06-29T20:22:16", "url": "https://files.pythonhosted.org/packages/5e/7f/6661c59120be54396f8006c6e74cf3e36dddcc744524566d6485542462cb/zc.recipe.egg-1.0.0a1-py2.3.egg" }, { "comment_text": "", "digests": { "md5": "86acc191142ebfae9114b36dd410f7b8", "sha256": "e742624f20899241dbb2637546c802e7e8ec7f3c3423e7d8c1dc7d8a3895c1cf" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0a1-py2.4.egg", "has_sig": false, "md5_digest": "86acc191142ebfae9114b36dd410f7b8", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 12927, "upload_time": "2006-06-29T20:25:28", "url": "https://files.pythonhosted.org/packages/c8/50/552444f296b734336c298b80aa8f7510ee4788f54787a213a069371f9ab4/zc.recipe.egg-1.0.0a1-py2.4.egg" } ], "1.0.0a2": [ { "comment_text": "", "digests": { "md5": "5850b5e7005b704b928db03679286cb2", "sha256": "963ac1a8c013e64aaddb1a00e388e91e8d2ae844eb9ca8bb85f8cd7c4ddf2b91" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0a2-py2.3.egg", "has_sig": false, "md5_digest": "5850b5e7005b704b928db03679286cb2", "packagetype": "bdist_egg", "python_version": "2.3", "requires_python": null, "size": 47563, "upload_time": "2006-08-10T18:04:49", "url": "https://files.pythonhosted.org/packages/27/aa/67045da506ac6264e1cb5a12c200a011e66688d1158ac58ab070f86c39c9/zc.recipe.egg-1.0.0a2-py2.3.egg" }, { "comment_text": "", "digests": { "md5": "ca8159b1bf72e067632b0385ed2d3b83", "sha256": "7e53856f8917100091ee79798c9a3ae748250db034525fc968ec746945838523" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0a2-py2.4.egg", "has_sig": false, "md5_digest": "ca8159b1bf72e067632b0385ed2d3b83", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 18751, "upload_time": "2006-08-10T18:03:27", "url": "https://files.pythonhosted.org/packages/60/74/f63e999eebd83a54f9cfcb45042abd0cc56767942cbeb1e56f73050cc97f/zc.recipe.egg-1.0.0a2-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "30ff57f9a78b3001100b6b8882cadffc", "sha256": "76e9e8223e7fabf155a1cb3837ccbe0e07fc77016c3ebe06926d63db198ba3e2" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0a2.tar.gz", "has_sig": false, "md5_digest": "30ff57f9a78b3001100b6b8882cadffc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9154, "upload_time": "2006-08-10T18:04:48", "url": "https://files.pythonhosted.org/packages/99/c6/51c1ab687866eee7c6372481d6903b3a79c6293cb5b2a38664aeebd757fb/zc.recipe.egg-1.0.0a2.tar.gz" } ], "1.0.0a3": [ { "comment_text": "", "digests": { "md5": "b61d846db6bc813ccf71e9532abccd51", "sha256": "cde66e25f4ae799689155a694ac2fe7f3cc02da05699947aa512411c912c89c1" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0a3-py2.3.egg", "has_sig": false, "md5_digest": "b61d846db6bc813ccf71e9532abccd51", "packagetype": "bdist_egg", "python_version": "2.3", "requires_python": null, "size": 59848, "upload_time": "2006-09-06T12:00:07", "url": "https://files.pythonhosted.org/packages/4f/84/f743faa27064b00863fd6948ded93829df753f8a2015720d288b3b0f138e/zc.recipe.egg-1.0.0a3-py2.3.egg" }, { "comment_text": "", "digests": { "md5": "4c0278025a416649b7544811be85bcff", "sha256": "05c7cb3e6aa9bdfbecd26372f24e39493ac4c5c93557bea5df47ab8ffb5e7bfc" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0a3-py2.4.egg", "has_sig": false, "md5_digest": "4c0278025a416649b7544811be85bcff", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 21471, "upload_time": "2006-09-06T12:03:46", "url": "https://files.pythonhosted.org/packages/17/4b/e92290f275b28da016b2b8655dfaef351d30d712a55ee2c983ff98f939ba/zc.recipe.egg-1.0.0a3-py2.4.egg" } ], "1.0.0b1": [ { "comment_text": "", "digests": { "md5": "c381f4f67fcbca3aa9e70dedcd141f18", "sha256": "b334bb6b0ef3e04e142f372b372a706970b8230328b6addf7dd2f3d07dfe3d97" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0b1-py2.3.egg", "has_sig": false, "md5_digest": "c381f4f67fcbca3aa9e70dedcd141f18", "packagetype": "bdist_egg", "python_version": "2.3", "requires_python": null, "size": 59976, "upload_time": "2006-09-15T14:13:14", "url": "https://files.pythonhosted.org/packages/14/33/1d2470ffd2d896d2aa984b4c286fc64b0b20dcd281bedbb8bf072d180479/zc.recipe.egg-1.0.0b1-py2.3.egg" }, { "comment_text": "", "digests": { "md5": "47132cb0fdc2be3fd600659e034e72ee", "sha256": "dd2ab9afae8ce0e3827e7548b23ecf329767ed19734c7f2fe31a024474d64708" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0b1-py2.4.egg", "has_sig": false, "md5_digest": "47132cb0fdc2be3fd600659e034e72ee", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 21603, "upload_time": "2006-09-15T14:15:10", "url": "https://files.pythonhosted.org/packages/5a/9f/a884a9416a1cc901f731ff87ef395af6df207e73b263e82877316ac852d9/zc.recipe.egg-1.0.0b1-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "00798ea94ef4f22c1649d2abdd0af62e", "sha256": "c3cc7a43379f9d16df59b330e6e89d8132cc38d76abb7a849cfe4531d7acb628" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0b1-py2.5.egg", "has_sig": false, "md5_digest": "00798ea94ef4f22c1649d2abdd0af62e", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 25655, "upload_time": "2006-10-01T16:14:34", "url": "https://files.pythonhosted.org/packages/29/a2/9ded7312ac20b4ccbb68a6d1f8ad4a9aaa9724e2b4dffbdeaaa06ba6cfb0/zc.recipe.egg-1.0.0b1-py2.5.egg" } ], "1.0.0b2": [ { "comment_text": "", "digests": { "md5": "d6576ff27eca8f98e1c452d65b487cde", "sha256": "f27d4233f4d2007282b45194dc2516b381ddbf11d7f9308817608efc3cffdcb8" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0b2-py2.3.egg", "has_sig": false, "md5_digest": "d6576ff27eca8f98e1c452d65b487cde", "packagetype": "bdist_egg", "python_version": "2.3", "requires_python": null, "size": 79791, "upload_time": "2006-10-16T21:39:46", "url": "https://files.pythonhosted.org/packages/49/75/332d1768af36eb4e9cbe2bbfcddfdea778bee178708aa987992a286e988b/zc.recipe.egg-1.0.0b2-py2.3.egg" }, { "comment_text": "", "digests": { "md5": "fec206bc61b9e2e755df2fea48ba9bfe", "sha256": "66c1491cbb0ee08ac1bd0d76043d4eba41a1b99f218617bbca43ee97d4b032ad" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0b2-py2.4.egg", "has_sig": false, "md5_digest": "fec206bc61b9e2e755df2fea48ba9bfe", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 25724, "upload_time": "2006-10-16T21:33:44", "url": "https://files.pythonhosted.org/packages/97/47/8b382a127f4eb8f50a614fec575fe930b580d56607900f49dce98e09f3c8/zc.recipe.egg-1.0.0b2-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "e81b8e6af8740fe70e1a6b4fa5865c42", "sha256": "60cedd88658e83671cd8c961fe8c768f361c1274e3b00ca10209010de0431aa9" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0b2-py2.5.egg", "has_sig": false, "md5_digest": "e81b8e6af8740fe70e1a6b4fa5865c42", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 25717, "upload_time": "2006-10-16T21:35:20", "url": "https://files.pythonhosted.org/packages/7a/6b/2fa1f879e548840ce582711b1b2ba4979852b09991bdc17c144c7ceb3708/zc.recipe.egg-1.0.0b2-py2.5.egg" } ], "1.0.0b3": [ { "comment_text": "", "digests": { "md5": "a69effddf7c0407fb64b75a73f59e698", "sha256": "8c75f06a70716ab85690cad3996b1708ec5d09f819c9eaf8fa4ae8e78c351703" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0b3-py2.3.egg", "has_sig": false, "md5_digest": "a69effddf7c0407fb64b75a73f59e698", "packagetype": "bdist_egg", "python_version": "2.3", "requires_python": null, "size": 94860, "upload_time": "2006-12-04T21:46:43", "url": "https://files.pythonhosted.org/packages/09/b3/3e778821a08f0101f055e95bcae12676e174761ce69664e9bfe37c275cc1/zc.recipe.egg-1.0.0b3-py2.3.egg" }, { "comment_text": "", "digests": { "md5": "9ef94f56a229bb554118acf7c067834c", "sha256": "06c8bd08d3f03c97bda393a8df0fc242ca652aeb2c2b0cd55c1f6d7acf7bd7eb" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0b3-py2.4.egg", "has_sig": false, "md5_digest": "9ef94f56a229bb554118acf7c067834c", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 28313, "upload_time": "2006-12-04T21:42:53", "url": "https://files.pythonhosted.org/packages/02/e2/8de2444e140a5fb0ae6e7a4facb027d87df289b0cf0e5e1a91af6806c4dc/zc.recipe.egg-1.0.0b3-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "639bc8601033c24a1d2d758cceaf3753", "sha256": "651daf1c744a89130ce16a0eef9590b4ef9a6a95b9be63547115d133d9aae6c8" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0b3-py2.5.egg", "has_sig": false, "md5_digest": "639bc8601033c24a1d2d758cceaf3753", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 28276, "upload_time": "2006-12-04T21:44:07", "url": "https://files.pythonhosted.org/packages/db/ea/b0d7584076c2a13971a780b2fea44461d3283bd35ec36066376e4614ce47/zc.recipe.egg-1.0.0b3-py2.5.egg" } ], "1.0.0b4": [ { "comment_text": "", "digests": { "md5": "af2d914be67d74683949e5890835de50", "sha256": "c405b73b2a060f48f52584e5e10a51c3ad2468c69e4c9e74268bca52f7964d62" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0b4-py2.3.egg", "has_sig": false, "md5_digest": "af2d914be67d74683949e5890835de50", "packagetype": "bdist_egg", "python_version": "2.3", "requires_python": null, "size": 103103, "upload_time": "2007-01-17T22:04:56", "url": "https://files.pythonhosted.org/packages/47/5d/12cc075f90720901a983935f2acc9354d7f514807b24dc3efd23b308ffea/zc.recipe.egg-1.0.0b4-py2.3.egg" }, { "comment_text": "", "digests": { "md5": "c1770e49e3376722951575870c1f1fb5", "sha256": "7d932d08a743138208c7177bccb8883846832cd59b620da2400efe893453630f" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0b4-py2.4.egg", "has_sig": false, "md5_digest": "c1770e49e3376722951575870c1f1fb5", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 29765, "upload_time": "2007-01-17T22:04:24", "url": "https://files.pythonhosted.org/packages/30/2c/64ff9df706988fd67a5a885885406e1de187f3a5251d2c80a637b48d7f5e/zc.recipe.egg-1.0.0b4-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "e9a0c5ac80af36b662ca54e3e840782f", "sha256": "1211f2e2448d11c5605f98d5d2fbc06c58a67f311653e13668ff928fe2111287" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0b4-py2.5.egg", "has_sig": false, "md5_digest": "e9a0c5ac80af36b662ca54e3e840782f", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 29738, "upload_time": "2007-01-17T22:03:38", "url": "https://files.pythonhosted.org/packages/8f/07/9de0a0361fee4f48080ed04ef26fb11a36c535ae10bfa005d6d801357328/zc.recipe.egg-1.0.0b4-py2.5.egg" } ], "1.0.0b5": [ { "comment_text": "", "digests": { "md5": "6e612c2ff66a2204c747f694d552f2aa", "sha256": "5f9da2508282980d8c5fa1c61d05e393c5265fa8be64c647be08f0646a6859af" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0b5-py2.3.egg", "has_sig": false, "md5_digest": "6e612c2ff66a2204c747f694d552f2aa", "packagetype": "bdist_egg", "python_version": "2.3", "requires_python": null, "size": 107600, "upload_time": "2007-02-08T17:47:34", "url": "https://files.pythonhosted.org/packages/41/b8/ddbc6ea2c2c75bbd21add88b3f38d5a2f984f559f3f2101c44f6baa456ba/zc.recipe.egg-1.0.0b5-py2.3.egg" }, { "comment_text": "", "digests": { "md5": "b57d4e02fe71f31e3e11e27fda53cb78", "sha256": "a9b22f108e8584ca49831ac1724f214add6ad2d4a57c8bc1b1bb1b1b34756351" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0b5-py2.4.egg", "has_sig": false, "md5_digest": "b57d4e02fe71f31e3e11e27fda53cb78", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 30540, "upload_time": "2007-02-08T17:47:15", "url": "https://files.pythonhosted.org/packages/24/be/2a03e0057cf6e24286ece1dab211a344eaf635dca4d7f314c3e7ba69ce27/zc.recipe.egg-1.0.0b5-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "8a2004ef8e5d0e65bb32867462c4d5ce", "sha256": "76331115440f03ff77761942fd6c12b3db719ad55e89d8499eb9011d2c04c861" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0b5-py2.5.egg", "has_sig": false, "md5_digest": "8a2004ef8e5d0e65bb32867462c4d5ce", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 30516, "upload_time": "2007-02-08T17:47:59", "url": "https://files.pythonhosted.org/packages/88/f7/12c208864be44daaf14205299d67ba0899ecb699d61c4127d6af49fcccc7/zc.recipe.egg-1.0.0b5-py2.5.egg" } ], "1.0.0b6": [ { "comment_text": "", "digests": { "md5": "6c2d5188351a428d96fe9ec7fb10f0ee", "sha256": "681f59eeaa1cc1a28582ef473b54c3b4cddc382d564df5beee6ce9d1aa892b3b" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0b6-py2.3.egg", "has_sig": false, "md5_digest": "6c2d5188351a428d96fe9ec7fb10f0ee", "packagetype": "bdist_egg", "python_version": "2.3", "requires_python": null, "size": 110643, "upload_time": "2007-03-20T14:49:50", "url": "https://files.pythonhosted.org/packages/1d/90/6c7271842d29e3be351e399296b53ef67fc5bb23b8629abec73afc8fa025/zc.recipe.egg-1.0.0b6-py2.3.egg" }, { "comment_text": "", "digests": { "md5": "2edf6cd2bb34c4ca0bdb6cb4588a311f", "sha256": "33df0bdb05cdfbb21501e6374ecacf61abe88299412bcf047f34408ef17d5755" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0b6-py2.4.egg", "has_sig": false, "md5_digest": "2edf6cd2bb34c4ca0bdb6cb4588a311f", "packagetype": "bdist_egg", "python_version": "2.4", "requires_python": null, "size": 30944, "upload_time": "2007-03-20T14:49:07", "url": "https://files.pythonhosted.org/packages/07/a1/aea17eb1762a540c2d170271af2febfa5bcc9c57c7a2057b2f31867ec6a8/zc.recipe.egg-1.0.0b6-py2.4.egg" }, { "comment_text": "", "digests": { "md5": "dddc900ff2f9f6b1d80fa33268804a03", "sha256": "e48f7aa213ecf233216e74385fba2479bd7f373840273be4abfcaba5a0740c26" }, "downloads": -1, "filename": "zc.recipe.egg-1.0.0b6-py2.5.egg", "has_sig": false, "md5_digest": "dddc900ff2f9f6b1d80fa33268804a03", "packagetype": "bdist_egg", "python_version": "2.5", "requires_python": null, "size": 30921, "upload_time": "2007-03-20T14:49:58", "url": "https://files.pythonhosted.org/packages/18/7a/6dbc504aa592314f37de7deaee3572dcba307c133df4fb7ad0cd91a403f6/zc.recipe.egg-1.0.0b6-py2.5.egg" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "ba41c248ca298a73f78e564c072110d4", "sha256": "f87cc6f24951d9afca644ec8cb5b14db6db1d7fc576dbd712a683e07891ca37b" }, "downloads": -1, "filename": "zc.recipe.egg-1.1.0.tar.gz", "has_sig": false, "md5_digest": "ba41c248ca298a73f78e564c072110d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29338, "upload_time": "2008-07-19T14:57:36", "url": "https://files.pythonhosted.org/packages/03/c8/b6137120ab519ff5bf5bd8546a560cf7c28214a87e3d82d41a24cd970562/zc.recipe.egg-1.1.0.tar.gz" } ], "1.1.0b1": [ { "comment_text": "", "digests": { "md5": "7c83f17c32e532578988a38d4a9de407", "sha256": "d780a5c802c75801e8fe04533a22abcfc7a9230a70b1df8ec78f2cf089c39ece" }, "downloads": -1, "filename": "zc.recipe.egg-1.1.0b1.tar.gz", "has_sig": false, "md5_digest": "7c83f17c32e532578988a38d4a9de407", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28932, "upload_time": "2008-06-27T08:45:05", "url": "https://files.pythonhosted.org/packages/b1/ad/26d6323a9e69631deed5a87b2caceb6daf2de1df758b0f62a0af4a8b0455/zc.recipe.egg-1.1.0b1.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "d981a2d245fb9ce2223d89957f305804", "sha256": "ce303646d3aa8fd67646f691b7efac78a417b4f6062c75e1b4962fab3014f2d7" }, "downloads": -1, "filename": "zc.recipe.egg-1.2.0.tar.gz", "has_sig": false, "md5_digest": "d981a2d245fb9ce2223d89957f305804", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33655, "upload_time": "2009-03-17T15:51:36", "url": "https://files.pythonhosted.org/packages/74/52/e99022b8bfee8759ba47d43b2ae084b89d98eef1df6e4a8aadb2f54d5f17/zc.recipe.egg-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "58307283c106072e3bfa36878400d384", "sha256": "da2b8a7e132acbe873344ea8b17eabdbebc7314ebb93674c25d929e380178fbb" }, "downloads": -1, "filename": "zc.recipe.egg-1.2.1.tar.gz", "has_sig": false, "md5_digest": "58307283c106072e3bfa36878400d384", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33672, "upload_time": "2009-03-18T19:46:16", "url": "https://files.pythonhosted.org/packages/58/76/67e87d63e51c02078456b616c082700887693fa541d4a9962d4efcd2bfd3/zc.recipe.egg-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "fe5ad0f1c0fc3d4348286534e1b9cec5", "sha256": "76a04505024b4f3f2986e8160021b622b92ee73e09ceaa229e575af5dcdf7f6c" }, "downloads": -1, "filename": "zc.recipe.egg-1.2.2.tar.gz", "has_sig": false, "md5_digest": "fe5ad0f1c0fc3d4348286534e1b9cec5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33721, "upload_time": "2009-03-18T21:28:06", "url": "https://files.pythonhosted.org/packages/f4/67/b53127a89239e9588bdf6ec29267e5271da300d6c089ecf792d3fa656020/zc.recipe.egg-1.2.2.tar.gz" } ], "1.2.3b1": [ { "comment_text": "", "digests": { "md5": "87b7ce4482f8e8ddc679d09363c4e1eb", "sha256": "b98ddf0cbd856141de68dba76515194249924bd09424d490b66a883d5534bce5" }, "downloads": -1, "filename": "zc.recipe.egg-1.2.3b1.tar.gz", "has_sig": false, "md5_digest": "87b7ce4482f8e8ddc679d09363c4e1eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32425, "upload_time": "2010-04-30T04:06:39", "url": "https://files.pythonhosted.org/packages/a1/3e/709820675e13612b68dccac7e7ca632bf19d2c12646a49489d93b0a0461f/zc.recipe.egg-1.2.3b1.tar.gz" } ], "1.2.3b2": [ { "comment_text": "", "digests": { "md5": "800403f1f37f147d7c1acd33994305fd", "sha256": "ed81ac6ba13301faa10dee5755fbb37df563293bee3b36cd04617c0d87c66aef" }, "downloads": -1, "filename": "zc.recipe.egg-1.2.3b2.tar.gz", "has_sig": false, "md5_digest": "800403f1f37f147d7c1acd33994305fd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32216, "upload_time": "2010-04-30T23:36:11", "url": "https://files.pythonhosted.org/packages/ea/20/97470c21d8081391339b3ef93ab19341fe925810b9052b3a0b8d853ccf42/zc.recipe.egg-1.2.3b2.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "5bb95a4196f41054e11960d60fda3556", "sha256": "385b3262f64f3d30b72ac0fca881a9ebe624accb701e241ed6149889bdd28261" }, "downloads": -1, "filename": "zc.recipe.egg-1.3.0.tar.gz", "has_sig": false, "md5_digest": "5bb95a4196f41054e11960d60fda3556", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32454, "upload_time": "2010-08-23T17:38:25", "url": "https://files.pythonhosted.org/packages/1d/65/a0300aa8300cc37235dd40c33fda2ee6d511af4fd2893af7ea2bf4b69fed/zc.recipe.egg-1.3.0.tar.gz" } ], "1.3.1": [ { "comment_text": "", "digests": { "md5": "9ad46e7602e41e9a581a26d6645754bf", "sha256": "5278a9f50b4375ab832debf70d808ae4effa460bc7fa0d0dbaff1eaeae16dd47" }, "downloads": -1, "filename": "zc.recipe.egg-1.3.1.tar.gz", "has_sig": false, "md5_digest": "9ad46e7602e41e9a581a26d6645754bf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33449, "upload_time": "2010-08-23T20:45:31", "url": "https://files.pythonhosted.org/packages/0e/10/c85d3c2b72a0c69d080c5aefa6212f4eb800f3d7d204d3ca6193229d8bcf/zc.recipe.egg-1.3.1.tar.gz" } ], "1.3.2": [ { "comment_text": "", "digests": { "md5": "1cb6af73f527490dde461d3614a36475", "sha256": "461487ab19f0a1936c8919bb760b4f392fd18ea791e3991f34b4a0df9c09f48b" }, "downloads": -1, "filename": "zc.recipe.egg-1.3.2.tar.gz", "has_sig": false, "md5_digest": "1cb6af73f527490dde461d3614a36475", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33621, "upload_time": "2010-08-23T22:29:05", "url": "https://files.pythonhosted.org/packages/6c/7b/76417742e80379080f5ba79ee1824b027ddaed30dfa98c568a555fd2ff6c/zc.recipe.egg-1.3.2.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "f8d379bab6d6e69be49c6d8f94804d0d", "sha256": "8d8283ff830e044c2aaaed0574d8a93a54a8f16c59daa2a21a2ddf0ee345a771" }, "downloads": -1, "filename": "zc.recipe.egg-2.0.0.tar.gz", "has_sig": false, "md5_digest": "f8d379bab6d6e69be49c6d8f94804d0d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31044, "upload_time": "2013-04-02T11:37:06", "url": "https://files.pythonhosted.org/packages/ea/cd/cb67d140a67427cc6d99472be422018b78d908a1c02ac21d8ca24733c32f/zc.recipe.egg-2.0.0.tar.gz" } ], "2.0.0a1": [ { "comment_text": "", "digests": { "md5": "a4b01bbb1b8e981aeb79986c68ac3a31", "sha256": "5fa4005cdba93bbf9d0756c72810b4b71b0a88a18aae64660c5eb56917d83b4b" }, "downloads": -1, "filename": "zc.recipe.egg-2.0.0a1-py3.2.egg", "has_sig": false, "md5_digest": "a4b01bbb1b8e981aeb79986c68ac3a31", "packagetype": "bdist_egg", "python_version": "3.2", "requires_python": null, "size": 39359, "upload_time": "2011-04-30T14:19:21", "url": "https://files.pythonhosted.org/packages/d2/cc/daa99bd5a3578b45a661cf524a184bcc6db5bb6091451ca837a9ad5f207f/zc.recipe.egg-2.0.0a1-py3.2.egg" } ], "2.0.0a2": [ { "comment_text": "", "digests": { "md5": "668de8a7753b918374fcb76f806a29b3", "sha256": "052e397a3c0a9b687fc2d7547bef362c80e0097aaa0e4e1df1fb729f069535eb" }, "downloads": -1, "filename": "zc.recipe.egg-2.0.0a2-py3.2.egg", "has_sig": true, "md5_digest": "668de8a7753b918374fcb76f806a29b3", "packagetype": "bdist_egg", "python_version": "3.2", "requires_python": null, "size": 36166, "upload_time": "2012-05-03T23:24:15", "url": "https://files.pythonhosted.org/packages/73/f4/e9920550e8107eee6c10a2f784aa6207151b5b4a02d015d8d66e7e13920f/zc.recipe.egg-2.0.0a2-py3.2.egg" } ], "2.0.0a3": [ { "comment_text": "", "digests": { "md5": "7c7c3fce74ce9d74123206ec71adbaa6", "sha256": "72225cf2910508beccf991126aa59f640ead4feae194f712b701bcc1116d8b83" }, "downloads": -1, "filename": "zc.recipe.egg-2.0.0a3.tar.gz", "has_sig": false, "md5_digest": "7c7c3fce74ce9d74123206ec71adbaa6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30887, "upload_time": "2012-11-19T15:58:10", "url": "https://files.pythonhosted.org/packages/d9/a8/129b3d701e8d3793dda39d4a1dca0805e12bfc9fe941b62874b7b9147d20/zc.recipe.egg-2.0.0a3.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "5e81e9d4cc6200f5b1abcf7c653dd9e3", "sha256": "60ac2f566a8aad90013fcaf9df547d6fd75d3a2443d709e4fc54115281149f93" }, "downloads": -1, "filename": "zc.recipe.egg-2.0.1.tar.gz", "has_sig": false, "md5_digest": "5e81e9d4cc6200f5b1abcf7c653dd9e3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33658, "upload_time": "2013-09-05T17:15:29", "url": "https://files.pythonhosted.org/packages/21/98/38e03e3ff0f1479ce6ac5aaea85006da82c4a9319381d162a59a2fee1381/zc.recipe.egg-2.0.1.tar.gz" } ], "2.0.2": [ { "comment_text": "", "digests": { "md5": "05d50d7856092fbbb43cf737962cc987", "sha256": "11eac0dc834e52875ebc4c0bc21098b24899d1a5992974b6ada6705d684d6881" }, "downloads": -1, "filename": "zc.recipe.egg-2.0.2.tar.gz", "has_sig": false, "md5_digest": "05d50d7856092fbbb43cf737962cc987", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32782, "upload_time": "2015-07-01T12:43:13", "url": "https://files.pythonhosted.org/packages/89/2c/1c4c9b6074c4515af8f3d2ab5271beda9543a457f66264bf007180e17393/zc.recipe.egg-2.0.2.tar.gz" } ], "2.0.3": [ { "comment_text": "", "digests": { "md5": "69a8ce276029390a36008150444aa0b4", "sha256": "ba5011f490f18d2eb1a0bc411d3bce51da540a42ec4bc898ce7c950a7b9ffd34" }, "downloads": -1, "filename": "zc.recipe.egg-2.0.3.tar.gz", "has_sig": false, "md5_digest": "69a8ce276029390a36008150444aa0b4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32895, "upload_time": "2015-10-02T18:33:49", "url": "https://files.pythonhosted.org/packages/08/5e/ade683d229d77ed457017145672f1be4fd98be60f1a5344109a4e66a7d54/zc.recipe.egg-2.0.3.tar.gz" } ], "2.0.4": [ { "comment_text": "", "digests": { "md5": "acc0eb96b9a06eb52ba0d3e90c585fd7", "sha256": "d173a43e75f815bb3d3e53321413a4a73c6ad72189cad375d002a7edc82d6307" }, "downloads": -1, "filename": "zc.recipe.egg-2.0.4.tar.gz", "has_sig": false, "md5_digest": "acc0eb96b9a06eb52ba0d3e90c585fd7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36771, "upload_time": "2017-08-17T15:09:47", "url": "https://files.pythonhosted.org/packages/15/e0/232cc7ba193136f74eb24f50caf917aad324755479f035c787aff429b097/zc.recipe.egg-2.0.4.tar.gz" } ], "2.0.5": [ { "comment_text": "", "digests": { "md5": "09ebe358990402b746232d22ecae3f21", "sha256": "1245ac4890123803a3f5935044795a68a6e5ca37838e2209fce450c20a9449c0" }, "downloads": -1, "filename": "zc.recipe.egg-2.0.5.tar.gz", "has_sig": false, "md5_digest": "09ebe358990402b746232d22ecae3f21", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38889, "upload_time": "2017-12-04T17:53:24", "url": "https://files.pythonhosted.org/packages/a2/a3/4f985e57b6f8bb71b334976e02bef8a2c5e630131b3e03c27d00923e34d3/zc.recipe.egg-2.0.5.tar.gz" } ], "2.0.6": [ { "comment_text": "", "digests": { "md5": "10fd3b9419cafaa629c5b28f576d779b", "sha256": "c2a025a01e118606ca2f921b39062539f2255929d94c54df61a56ed5a97a5360" }, "downloads": -1, "filename": "zc.recipe.egg-2.0.6.tar.gz", "has_sig": false, "md5_digest": "10fd3b9419cafaa629c5b28f576d779b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39238, "upload_time": "2018-07-02T08:42:33", "url": "https://files.pythonhosted.org/packages/6d/db/9f26f681efccace909cf0421bfd9908a4c2eec80b4fe3e79f1a2fe4ed6be/zc.recipe.egg-2.0.6.tar.gz" } ], "2.0.7": [ { "comment_text": "", "digests": { "md5": "b0d432087849dbe24a94edebbba29fe6", "sha256": "b89eb00979614e3584bb4e8431172b2345d00b983a04ebf00a401fb695f4e6d3" }, "downloads": -1, "filename": "zc.recipe.egg-2.0.7.tar.gz", "has_sig": false, "md5_digest": "b0d432087849dbe24a94edebbba29fe6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39384, "upload_time": "2018-07-02T11:39:25", "url": "https://files.pythonhosted.org/packages/7a/6f/c6871e8490a153c3b44ac43e4a6552d802561a12b4780c7ea088a7ec5ff0/zc.recipe.egg-2.0.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b0d432087849dbe24a94edebbba29fe6", "sha256": "b89eb00979614e3584bb4e8431172b2345d00b983a04ebf00a401fb695f4e6d3" }, "downloads": -1, "filename": "zc.recipe.egg-2.0.7.tar.gz", "has_sig": false, "md5_digest": "b0d432087849dbe24a94edebbba29fe6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39384, "upload_time": "2018-07-02T11:39:25", "url": "https://files.pythonhosted.org/packages/7a/6f/c6871e8490a153c3b44ac43e4a6552d802561a12b4780c7ea088a7ec5ff0/zc.recipe.egg-2.0.7.tar.gz" } ] }