Miles to go ...

Python: Circular package dependencies

I am developing pluggdapps, tayra and tayrakit, and releasing them periodically. pluggdapps is a component system using which Tayra templating language is designed and built. tayrakit is a collection of template plugins, under development, that uses Tayra as the templating language.

For couple of reasons, I also added a web framework based on Pluggdapps component system and started releasing it as sub-package withing Pluggdapps. The web framework comes with authentication and a configuration web-app that can be used to configure web-apps written with Pluggdapps. These web applications are in turn using tayra and tayrakit, creating a circular dependency.

.. code-block:: text

        tayrakit -----> tayra -----> pluggdapps
           ^            ^             |
           |            |             |
           *------------*-------------*

It just took me couple of releases to realize how circular dependency is cumbersome and painful during the release phase - it is difficult to make a working release without making sure that dependent releases are equally good. This means that I had to go through couple of iteration of releases to make sure that all packages are stable and working.