| 170 | |
| 171 | === Reducing coupling in Django components === |
| 172 | |
| 173 | * '''Complexity:''' Hard |
| 174 | |
| 175 | Django is currently delivered as a single monolithic download. This is largely for historical reasons; when Django started as a project, Python's packaging infrastructure wasn't especially mature. This situation has has improved over the years, and now Python has a rich set of packaging tools. In an ideal world, it would be possible to download "Just the Django template engine", or "Just the Django ORM", or "Just the Django forms layer"; the combined Django download would really be a meta-package install of all the required parts. |
| 176 | |
| 177 | There are two technical problems that need to be solved in order to make this happen. |
| 178 | |
| 179 | * Implement the packaging definitions to allow for multiple packages. |
| 180 | * Clean up dependencies between components. Despite the best of intentions, there are some interesting dependencies between modules, some of which may need to be clarified or separated. |
| 181 | |
| 182 | The aim of this project would be to clean up one or more of Django's internal "parts" so that it could be delivered as a standalone package. This may not be something that can be immediately delivered - for example, it may be necessary to move or rename components to enable separate packaging. In this case, the project deliverable would be to document the strategy, and provide whatever initial moves in that direction are possible. |
| 183 | |
| 184 | A simpler version of this project would be to enable separate packaging and distribution of Django's contrib apps. |