Packaging in Zamboni¶
There are two ways of getting packages for zamboni. The first is to install everything using pip. We have our packages separated into three files:
- requirements/compiled.txt
- All packages that require (or go faster with) compilation. These can’t be distributed cross-platform, so they need to be installed through your system’s package manager or pip.
- requirements/prod.txt
- The minimal set of packages you need to run zamboni in production. You
also need to get
requirements/compiled.txt. - requirements/dev.txt
- All the packages needed for running tests and development servers. This
automatically includes
requirements/prod.txt.
Installing through pip¶
You can get a development environment with
pip install --no-deps -r requirements/dev.txt
Adding new packages¶
Note: this is deprecated, all packages should be added in requirements.
The vendor repo was seeded with
pip install --no-install --build=vendor/packages --src=vendor/src -I -r requirements/dev.txt
Then I added everything in /packages and set up submodules in /src (see
below). We’ll be keeping this up to date through Hudson, but if you add new
packages you should seed them yourself.
If we wanted to add a new dependency called cheeseballs to zamboni, you
would add it to requirements/prod.txt or requirements/dev.txt and then
do
pip install --no-install --build=vendor/packages --src=vendor/src -I cheeseballs
Then you need to update vendor/zamboni.pth. Python uses .pth files to
dynamically add directories to sys.path
(docs).
I created zamboni.pth with this:
find packages src -type d -depth 1 > zamboni.pth
html5lib and selenium are troublesome, so they need to be sourced with
packages/html5lib/src and packages/selenium/src. Hopefully you won’t
hit any snags like that.
Adding submodules¶
Note: this is deprecated, all packages should be added in requirements.
for f in src/*
pushd $f >/dev/null && REPO=$(git config remote.origin.url) && popd > /dev/null && git submodule add $REPO $f
Holy readability batman!