Skip to content

GSoC 2020 Ideas Page

Pradyun Gedam edited this page Mar 7, 2020 · 8 revisions

This is the first time that the Python Packaging Authority (PyPA) is applying as a sub-org of the Python Software Foundation, for Google Summer of Code.

Participating tools

pip is the most popular package installer for Python. It is one of the main tools that Python programmers use, to install packages from the Python Package Index and other indexes.

tox is a generic virtualenv management and a command line driven development task automation tool. At its core, tox provides a convenient way to run arbitrary commands in isolated environments to serve as a single entry point for build, test and release activities.

Getting Started

Before tackling a bigger idea, students are advised to start with some "good first issues" which can be found on the tool-specific issue trackers (listed in the next section).

Each participating tool also has a contributing/development guide, which contain instructions on setting up a development environment and how to work on it.

Communication Guidelines

We use issue trackers on the GitHub repositories of the tools for most of the tool-specific discussions.

Most of our cross-project development discussions happen on:

Introductions

Please introduce yourself on IRC, we would love to hear from you!

Note that IRC is a "synchronous" chat medium - i.e. you need to be online and connected to be able to receive messages. However, it is fairly common for other folks to be in different timezones or regions of the world, or plain busy at the moment, so it is usually a good idea to stick around for 2 hours or so after posting a question.

If you haven't used IRC before and are OK with using web-hosted seevices, we suggest making an account on IRCCloud and joining the #pypa-dev channel on the Freenode server.

Do not send introduction emails to pypa-dev, distutils-sig or discuss.python.org. Those platforms are intended for discussions / announcement.

Asking Questions

If you have questions, you can ask them on the tool-specific issue trackers, #pypa-dev on Freenode (IRC), discuss.python.org/c/packaging (Discourse) or the pypa-dev mailing list. Do not ask GSoC-related questions on distutils-sig.

When asking questions, be specific and explain the issue clearly and completely. Include complete error messages or output that may be relevant. For example: Instead of "Please help me setup my development environment", try saying "I'm stuck at trying to install [some tool] while setting up my development environment, and facing the following error (including the complete error message), could someone please guide me?".

Writing your GSoC application

Our sub-org name is "PyPA". Make sure to mention it in the title, both in Google's system and in your document.

We suggest you follow the application template provided by the Python Software Foundation (PSF) GSoC page. Google's GSoC Student Guide is a very useful resource for students wish to participate.

Project Ideas

  1. Improve pip's test helpers

    Project description: This project is aimed at simplifying the test suite's complexity as well as improving it's robustness, by improving existing helpers as well as enhancing the functionality of pip's test suite.

    The main tasks for this project will be to set up code coverage metric tracking for pip, better organize pip's pytest fixtures and improve related automation. Additional "stretch" goals may be included in the project, such as improving pip's inter-operability with other tools, fixing bugs in pip, or implementing existing feature requests.

    Skills: Python, experience with pytest and testing will help.
    Difficulty level: Intermediate
    Related Readings/Links:

    Potential mentors: Pradyun Gedam ([email protected])

  2. Speed up pip's tests

    Project description: This project is aimed at speeding up the tests, by improving the tests themselves.

    pip's test suite is a fairly extensive test suite. These tests involve fairly expensive operations to ensure that the tests are actually checking pip's behavior. Over time, as the functionality has changes, some of these tests are no longer needed or need improvement so that they can be executed quicker.

    The main tasks for this project are to identify and remove redundant/no-op tests, enhancing existing tests (e.g. by making them independent of external services like GitHub) and, overall, improving test suite run time. Additional "stretch" goals may be included in the project, such as improving pip's CI automation, fixing bugs in pip, or implementing existing feature requests.

    Skills: Python, experience with pytest and testing will help.
    Difficulty level: Intermediate
    Related Readings/Links:

    Potential mentors: Pradyun Gedam ([email protected])

  3. Docker images as tox environments

    Project description: Currently, tox supports Python virtual environments as a tox environment (created by either the venv module or virtualenv tool). These create Python environments by referring to the system Python installation. The downside to this is that the user first has to install at system level a Python interpreter that matches the requirements of the test environment (e.g., CPython3.8 if one wants to run the tests under CPython3.8). An alternative approach would be to use docker images to provision Python environments. To allow this, we need a significant shift in strategy.

    At the moment, tox always assumes that environments exist on the local disk and that they can be communicated to via subprocess calls. Introducing these new abstractions is breaking changes, so the tox team already had rewritten the core tool, supporting now Python3.5+ only in a brand new code base with type annotations. The goal of this project is to validate the rewrite by implementing a tox plugin that allows the usage of tox images/containers as tox environments. One will likely need to touch both the core tox code to add fixes and extensions while in parallel working on the plugin that integrates tox and Docker.

    Skills: Python, Python packaging, Docker
    Difficulty level: Intermediate to Difficult
    Related Readings/Links:

    Potential mentors: Bernat Gabor ([email protected])

Submitting Your Own Idea

You can apply with something completely different if you like, as long as it is related to improving Python Packaging. The best project for you, is one you are interested in and would be useful to the broader Python community on the whole. That way, you will be the most successful in your project and have the most fun doing it, while we will be the most confident in your commitment and your ability to complete it.

You are welcome to discuss such ideas on distutils-sig or Packaging on discuss.python.org to seek inputs from the community and determine if any mentor is available for the project, prior to submitting a proposal.