The pythonic packaging solution
With bento, packages metadata are described in an easy to read bento.info file.
The syntax is indentation-based, as python.
Bento aims at supporting all python versions from 2.4 to 3.x
Name: foo
Version: 0.1
Description:
Package description.
Library:
Packages:
foo, foo.core
Bento packages are currently installed using bentomaker, the command line interface to bento.
$ bentomaker configure
$ bentomaker build
$ bentomaker install
# Or more simply
$ bentomaker install
If your package uses distutils/setuptools/distribute, you can convert your setup.py to bento format using the convert command
# Run this in a project containing a setup.py
$ bentomaker convert
# You now have a bento.info file
$ bentomaker configure ...
You don't have to give up your favorite packaging tools to benefit from bento, thanks to bento's distutils compatibility layer. A simple 4-lines setup.py will make your bento package works with easy_install or pip:
import setuptools
from bento.distutils.monkey_patch import monkey_patch
monkey_patch()
setuptools.setup()
$ easy_install your-bento-package
$ pip install your-bento-package
To avoid addtional dependencies to your package, bento may be distributed as a single file.
# This will create a self-contained bentomaker
# file that you can include in your project
$ python tools/createdist.py
Created self-contained script 'bentomaker' in ...
# You can now simply add the generated
# bentomaker file into your source distribution
$ cp bentomaker $my_source_tree
$ cd $my_source_tree
$ ./bentomaker ...
Bentomaker also supports building source distributions, and preliminary support for windows installers, eggs and Mac OS X .mpkg.
$ bentomaker sdist
$ bentomaker build_wininst
$ bentomaker build_egg
$ bentomaker build_mpkg
One simple way to include data files (installed) and extra distribution files (not installed)
Datafiles: pdf-doc
TargetDir: /usr/local/share/doc/foo
Files: main.pdf
ExtraSourceFiles:
doc/source/index.rst
Bento aims at making packagers' life easier. Paths may be customized at configuration stage, and those paths may be used inside the bento.info file.
Datafiles: pdf-doc
TargetDir: $pdfdoc
Files: main.pdf
$ bentomaker configure --pdfdoc=/usr/pdfdoc
Retrieving package data location at runtime indenpendently of their install path is as simple as importing a variable
from yourpackage.__bento_config import PDFDOC
Developing complex packages with C code is now more pleasant thanks to automatic dependency tracking.
By default, bentomaker builds C extensions using yaku, which automatically rebuild necessary files whenver build options of file content change.
It builds C extensions in parallel, too
$ bentomaker build
PYCC foo.o
PYCC bar.o
PYLINK foo.so
$ edit foo.c
$ bentomaker build
PYCC foo.o # Only foo is rebuilt
PYLINK foo.so
Bento is designed from the ground up to be extensible, and cleanly separate configuration, build, installation and packaging.
You want to use waf or scons to build C extensions? You want to add support for building debian packages? Bento aims at making those tasks not only possible but easy and robust.