Help us ironing Packaging

packaging has landed in the standard library, but the road to Python 3.3 is still filled with a lot of work. We've pushed the Documentation yesterday in the tip, and it now appears here: http://docs.python.org/dev/packaging/

There are a lot of stuff you can do to help us improving packaging. If you wish to help out, read up.

1. Install a Python 3 development environment

The first step is to install a Python development environment

There's a full dev guide here: http://docs.python.org/devguide/ but it basically boils down to run make on the tip:
$ hg clone https://hg.python.org/cpython     (very long)

$ cd cpython

$ ./configure && make

Once this is done, you'll have a Python interpreter you can run:
$ ./python

Python 3.3a0 (default:94066c3e2236+, May 31 2011, 08:29:53)

[GCC 4.5.2] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> print('Python 3, yay !')

Python 3, yay !

2. Try out the pysetup script, as an end-user

This script is a global script people will be able to use to check what's installed on a Python installation, to install things, remove them, etc. The script has still a lot of rough edges, which is a shame since it's just the tip of a feature-rich system.

It's located in Tools/script/pysetup3 in a dev environment, and here's a demonstration of how to install the lastest Mako release, check that it's installed, look at some of its metadata, then remove it:
$ sudo ./python Tools/scripts/pysetup3 install Mako

Checking the installation location...

Getting information about 'Mako'...

Installing 'mako' 0.4.1...

[lots of output]



$ ./python Tools/scripts/pysetup3 list

SQLAlchemy 0.7.0 at /usr/local/lib/python3.3/site-packages/SQLAlchemy-0.7.0-py3.3.dist-info

distribute 0.6.17 at /usr/local/lib/python3.3/site-packages/distribute-0.6.17-py3.3.dist-info

Mako 0.4.1 at /usr/local/lib/python3.3/site-packages/Mako-0.4.1-py3.3.dist-info



Found 3 projects installed.



$ ./python Tools/scripts/pysetup3 metadata Mako -f Version

Version:

    0.4.1

$ ./python Tools/scripts/pysetup3 metadata Mako -f Author

Author:

    Mike Bayer



$ sudo ./python Tools/scripts/pysetup3 remove Mako

Removing 'Mako':

  /usr/local/lib/python3.3/site-packages/mako/parsetree.py

 [lots of lines]

  /usr/local/lib/python3.3/site-packages/Mako-0.4.1-py3.3.dist-info/RECORD

Proceed (y/n)? y

Success: removed 52 files and 2 dirs

So go ahead, play with this script, discover its features and:
- tell us what feels wrong - tell us what kind of features you wish you had in this script - found a bug, have a patch, tell us !

3. Make your project packaging-ready, as a developer

The sweet thing is that adding packaging support in your project is risk-free because it's just adding a few sections in your setup.cfg file. setup.py can stick around, and older installers will still pick it up.

So, here is how you can do: You can tollow the tutorial if you want to do something from scratch:http://docs.python.org/dev/packaging/tutorial.html

Or you can use the magic create command in your Project root directory, to create a setup,cfg out of your setup.py file !
$ sudo ./python Tools/scripts/pysetup3 create

A legacy setup.py has been found.

Would you like to convert it to a setup.cfg? (y/n)

    [y]: y

Wrote "setup.cfg".

If you're starting your project from scratch You can also generate a setup.py that will extract the options out of setup.cfg. Very handy to provide backward compatibility and avoid maintaining two files !
$ sudo ./python Tools/scripts/pysetup3 generate-setup

The setup.py was generated

So go ahead, learn how setup,cfg works, reads its specs at http://docs.python.org/dev/packaging/setupcfg.html and:
- tell us what feels wrong - tell us what kind of features you wish you had in this file - found a bug, have a patch, tell us ! - tell us if you were unable to convert your project

Once the project is packaging ready, you can even register and upload a new version of it at PyPI and check that pysetup knows how to install it

4. Give use some feedback

  • You can add new bugs/feature requests athttp://bugs.python.org/ under the Distutils2 component, that will be really really helpful.
  • You can tell us what's weird with our documentation, what misses, etc. That goes to the Documentation+Distutils2 components

Comments !