pyam is a software development framework with tools for facilitating the rapid development of software in a concurrent software development environment. pyam provides solutions for development challenges associated with software reuse, managing multiple software configurations, developing software product lines, and multiple platform development and build management. pyam uses release-early, release-often development cycles to allow developers to integrate their changes incrementally into the system on a continual basis. It facilitates the creation and merging of branches to support the isolated development of immature software to avoid impacting the stability of the development effort. It uses modules and packages to organize and share software across multiple software products, and uses the concepts of link and work modules to reduce sandbox setup times even when the codebase is large. One side-benefit is the enforcement of a strong module-level encapsulation of a module’s functionality and interface. This increases design transparency, system stability, and software reuse.
pyam is written in Python and is organized as a set of utilities on top of the open source SVN software version control package. All development software is organized into a collection of “modules.” pyam “packages” are defined as sub-collections of the available modules. Developers can set up private sandboxes for module/package development. All module/package development takes place on private SVN branches. Highlevel pyam commands support the setup, update, and release of modules and packages. Released and pre-built versions of modules are available to developers. Developers can tailor the source/link module mix for their sandboxes so that new sandboxes (even large ones) can be built up easily and quickly by pointing to pre-existing module releases. All intermodule interfaces are publicly exported via links. A minimal, but uniform, convention is used for building modules