README.fedora
============ CherryPy 2.x ============ CherryPy 2.x for Fedora is being provided so that apps written for TurboGears 1.x can continue to run. It relies on eggs to enable multiple versions to be installed. If you are using CherryPy via TurboGears, everything should work out of the box for new projects quickstarted with the Fedora 8 packages. Existing projects will need a small adjustment to run correctly. In your project's start-APP.py script you need to change the commands that import TurboGears from this:: import pkg_resources pkg_resources.require('TurboGears') to this:: __requires__ = 'TurboGears' import pkg_resources with the packages provided by Fedora 8+. If you are using CherryPY via your own code and absolutely must use the 2.x version rather than 3.x, you will need to do one of the following to make it work in your code: 1) Manually change your python path to place the egg directory before site-packages. Note that if you do it this way you will either have to change your code whenever a new version comes out (for instance, if a bugfix release, CherryPy-2.3.1, is released.) The code would look something like this:: import sys, os from distutils.sysconfig import get_python_lib compatCherryPyPath = os.path.join( get_python_lib(), 'CherryPy-2.3.0-py2.5.egg') sys.path.insert(0, compatCherryPyPath) import cherrypy 2) Use setuptools and entrypoints. To do this you have a function in a python module that is your main function. You define this as an entry point in setup.py. For instance, if you wanted your script to be called "nifty-foo" and the entry point was the main() function in the module nifty.foo, you would use this in setup.py:: # List the versions of CherryPy that will work install_requires = [ 'CherryPy >= 2.2,<3.0alpha' ] # Add the information necessary to create the script that requires # the CherryPy version setup ( name='Nifty', version='1.0', entry_points = ''' [console_scripts] nifty-foo = nifty.foo:main ''', [...] When you use setup.py to install this script it will create a script that looks like this:: #!/usr/bin/python __requires__ = 'Nifty==1.0' import sys from pkg_resources import load_entry_point sys.exit( load_entry_point('Nifty==1.0', 'console_scripts', 'nifty-foo')() ) The script in turn, references the egg metadata for your module which lists the dependency from Nifty to CherryPy>=2.2, < 3.0alpha. Note that although there may be other methods of making this work in some circumstances, these are the only methods that the setuptools author and we are able to say will work in all circumstances in this environment. Other methods may not work reliably in some versions of setuptools. In particular, if you have both the python-cherrypy (at version 3.x) and python-cherrypy2 packages installed, this will not work:: from pkg_resources import require require("CherryPy>=2.3,<3.0alpha") import cherrypy print cherrypy.__version__