Hello Everyone! Google released the list of accepted organizations for GSoC 2017 and PSF is one of them. I guess this would a good time for me to seek feedback on the approach I'm planning to take for my potential GSoC project. I hope this mailing list is the right place to do so. --- Here's my current plan of action along with reasoning for the choices made: A separate PR will be made for each of these stages. Every stage does depend on the previous ones being completed. 1. Refactor all dependency resolution responsibility in pip into a new, separate module. This would allow any future changes/improvements in the dependency resolution to be added without major changes in the rest of the code-base. As of today, the RequirementSet class within pip seems to be doing a lot of work and dependency resolution is a responsibility that doesn't need to given to it, especially when it's avoidable. 2. Implement dependency information caching. This would allow the resolver to not cause the re-computation of the dependencies of a package, if they have already been computed, speeding up the resolution. 3. Implement a backtracking resolver. A backtracking solver would be appropriate given that we don't have a way to pre-compute the dependencies for *all* the packages or statically determine the dependencies - a SAT solver would not be feasible. 4. (if time permits) Move any dependency resolution code out into a separate library. This would make it possible for other projects (like buildout or a future pip replacement) to reuse the dependency resolver. By making each of the stages separate PRs, incremental improvements would be made so that even if I leave this project midway, there will be some work merged already if someone comes back to this problem later. That said, I don't intend to leave this project midway. I do intend to reuse some of the work done by Robert Collins in PR #2716 on pip's GitHub repository. Stages 2 and 3 are separate because I see them as distinctly different tasks which touch very different portions of the code-base. There's is strong coupling between them though. I'm looking forward to the feedback. :) Regards, Pradyun