Level up your Python today with open-source contributions
Tags: python, opensource, github, productivity
Published: 2022-05-25 22:18:08

*This post is from [Grokking Python](https://www.grokkingpython.com), a free newsletter available on Substack from [Educative](https://www.educative.io/learn?eid=5082902844932096), the world’s best learning platform for software developers. It’s where we’ll share our team’s best Python-related info and resources — stuff we think could really enhance your understanding.*

Hey Grokking Python Readers!

One of the things we love about Python is its **vibrant community**. As an **open-source programming language**, Python benefits from contributions by developers all over the world. If you've ever been stuck on a Python problem, you've probably received help from fellow Pythonistas or open-source documentation. That's the power of open source in action!

In today's newsletter, we're diving deep into the open-source aspect of Python. We'll start by addressing **why you should contribute** to open-source projects and advice on **how to get started**. Then we'll look at **seven outstanding Python projects** where you can get involved today and start giving back.
 
## FAQ: Getting started with open-source contributions 

The following answers draw on best practices curated by the experts at [GitHub](https://github.com/github/opensource.guide#readme). You can apply a lot of this information to open-source projects in general (not just Python projects).

![Python projects](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5xczgjxlghp0ljoit0qa.jpg)

### What exactly does "open source" mean?

Open-source software (OSS) is code that is designed to be publicly accessible: anyone can see, modify, and distribute it as they see fit. 

OSS must also have a [license that meets several criteria](https://opensource.org/osd). It's worth noting that Python itself is developed under an open-source license, which makes it freely usable and distributable, even for commercial use.

### Why should I consider becoming an open-source contributor?

There are a number of reasons to get involved with open-source projects: 
* Help **improve** a technology used by yourself and others
* Improve **skills** you already have
* **Network** and meet people who share your interests
* Find **mentors** and **teach others**
* Build things in public that will contribute to your **reputation and career**
* Learn **soft skills** related to software development, like how to communicate and collaborate with other developers

![Open-source](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c5oj41ww1z9foynz8mpo.jpg)

### How can I help make sure I have a positive experience?

First, consider the various **ways you might contribute** to a project. (Hint: it's not limited to coding.) For instance, people help projects by: 

* Planning meetups or other events 
* Writing documentation 
* Doing user research to improve navigation 
* Cleaning up duplicate GitHub issues or suggesting new issue labels
* Writing tutorials
* Starting newsletters, or contributing to existing ones

Next, learn about **how the project is organized**: 
* Who originally authored the project? 
* Who owns it now? 
* Who are the maintainers? 

These are all important people, and identifying them will help orient you to a project.

You'll also want to look at the project's **documentation**. You'll usually find the following files in the top level of a project's GitHub repository: LICENSE, README, CONTRIBUTING, and CODE_OF_CONDUCT. Projects may also collect documentation on a separate website.

It's good to find out what **tools** the project uses, which usually include the following:
* **Issue tracker**: where people discuss issues related to the project 
* **Pull requests**: where people discuss and review changes that are in progress
* **Discussion forums or mailing lists**: where conversational topics go, as opposed to bug reports or feature requests (though some projects use the issue tracker for all conversations)
* **Synchronous chat channel**: e.g. Slack or IRC, where more casual conversations may happen

Finally, try to establish **personal connections**. Join in the conversation on pull request discussions or issue pages on GitHub, or use Twitter to reach out. Making connections builds trust and will help get your contributions reviewed and accepted. And you never know: a connection might help you land your next role (or first job) in software development.

### What criteria can I use to pick a project?

Continue reading this newsletter for a list of **seven great open-source projects** you should consider! You could also start by looking at the **open-source software you use or want to use**. Among these projects, look for ones **that are active**. To determine this, you can check:
* If the number of contributors is growing 
* The date of the most recent commit to the GitHub repository (ideally within a week or a month)
* The number of maintainers
* The level of activity in the chatroom

In addition, GitHub has created a [checklist](https://opensource.guide/how-to-contribute/#a-checklist-before-you-contribute) for gauging whether a project is likely to accept new contributors.

![Github](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4ogn9zqm2q9wo7eur76u.jpg)

### How can I identify issues to work on?

For active projects that grab your interest, follow your gut when you notice something that could **be improved**. That's often the sign of a good first issue. 

You could also visit the project's GitHub repository and add "/contribute" to the end of the URL. For example, visiting  https://github.com/scrapy/scrapy/contribute will show you relatively approachable tasks for first-time contributors to the Scrapy project.

### How do I actually make a contribution?

Once you've identified an issue to work on, you'll want to do a little more research to make sure **it's not being discussed elsewhere**. Check the README, open and closed issues, mailing list, and Stack Overflow. If you don't find any sign of it, proceed.

Then, check the project's **contributing guidelines** for guidelines on submissions. 

Next, on GitHub, open an **issue** or a **pull request**. Which one you use will depend on the type of change you're contributing, and [GitHub offers some guidance](https://opensource.guide/how-to-contribute/#opening-an-issue).

Finally, sit back and see what happens. The possibilities include:
* Nothing
* Your contribution is changed
* Your contribution is not accepted
* Your contribution is accepted

Regardless of the outcome, you should feel great about volunteering your time and energy to help others. And if your first contribution doesn't go as planned, don't be discouraged. There are many other open-source opportunities out there, and you can try again!

### Are there any other resources I should know about?

Yes! People are passionate about open-source software and have created web resources to help you find your way as a new contributor. These include:
* [GitHub Explore](https://github.com/explore/)
* [Open Source Friday](https://opensourcefriday.com)
* [First Timers Only](https://www.firsttimersonly.com)
* [CodeTriage](https://www.codetriage.com)
* [24 Pull Requests](https://24pullrequests.com)
* [Up For Grabs](https://up-for-grabs.net/#/)
* [Contributor-ninja](https://contributor.ninja)
* [First Contributions](https://firstcontributions.github.io)
* [SourceSort](https://web.archive.org/web/20201111233803/https://www.sourcesort.com/)

**Ready to get started? Then keep reading!**

## 7 open-source Python projects worthy of your time
We get it: knowing where to begin among so many open-source options can be daunting. That's why we've curated a list of projects to check out. 

### 1. coala

![Icoala](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2xwjk0pcnkk65zhl7vr1.jpg)

**Coala** is a library that provides a unified command-line interface for linting and fixing code, no matter what languages you're using. To put it another way, coala is like a spelling and grammar checker for your code. (The name stands for "COde AnaLysis Application.")

We like coala for its relative simplicity and welcoming documentation. Together, these qualities make it easy for new users and contributors to jump in. 

**Learn more about coala**:
* Check out the [Newcomer Guide](https://api.coala.io/en/latest/Developers/Newcomers_Guide.html)
* Read the [contributing guidelines on GitHub](https://github.com/coala/coala/blob/37af7fd5de3ed148b8096cfc80e4717fb840bf2c/CONTRIBUTING.rst)
* Visit the project's [repository on GitHub](https://github.com/coala/coala)

### 2. Django

![Django](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qd0v2mh3u8zxj6gax2sj.jpg)

**Django** is a high-level Python web framework that simplifies launching websites by reducing the number of development tasks you have to perform. Django is considered complete and complex among web frameworks because it comes with nearly all the applications a website could need. (For a good comparison of Django with Flask, a more lightweight web framework for Python, [check out this article](https://www.educative.io/blog/python-frameworks-flask-vs-django?eid=5082902844932096) on the Educative blog.)

Don't let Django's complexity scare you. Even if you're new to Python, you can always contribute something besides code. (More on this later in the FAQ.)

**Learn more about Django**: 
* Read the [Contributing to Django](https://docs.djangoproject.com/en/dev/internals/contributing/) documentation
* Visit the project's [repository on GitHub](https://github.com/django/django)

### 3. Keras

![Keras](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0701odvni4492xhab649.jpg)

**Keras** is a high-level Python API with an emphasis on deep learning. It includes specialized repositories such as computer vision, and promotes itself as "an API designed for human beings, not machines." 

Given the importance of machine learning these days, it's a great time to get involved with a deep learning project like Keras.

**Learn more about Keras**: 
* Read the [contributing guidelines](https://github.com/keras-team/keras/blob/master/CONTRIBUTING.md)
* Visit the project's [repository on GitHub](https://github.com/keras-team/keras) 

### 4. Requests

![requests](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5pdlwkv4hazo08xquczl.jpg)

**Requests** is an HTTP library for Python that allows you to easily send HTTP/1.1 requests. Contributing to Requests could provide you with a high-profile opportunity, as it is one of the most downloaded Python packages these days.

That said, don't let the project's prominence intimidate you. Requests promises an environment where all contributors are welcome, as long as they follow one rule: "Be cordial or be on your way."

**Learn more about Requests**: 
* Visit the project's [repository on GitHub](https://github.com/psf/requests)

### 5. Scrapy


![Scrapy](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kjx15u13sdklv0q15f8f.jpg)

**Scrapy** is a high-level web crawling and web scraping framework that can crawl websites and extract data from their pages. It's also speedy. Scrapy's uses include data mining, information processing, and historical archiving. (For a good introduction to web scraping, check out [this article](https://www.educative.io/blog/python-web-scraping-tutorial?eid=5082902844932096) on the Educative blog.) 

Scrapy promises a healthy and active [community](https://scrapy.org/community/), and it's a good starter project for open-source beginners. 

**Learn more about Scrapy**: 
* Read the [Contributing to Scrapy](https://docs.scrapy.org/en/master/contributing.html) documentation
* Visit the [project's repository](https://github.com/scrapy/scrapy) on GitHub

### 6. Ansible

![Ansible](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uck0b4f9iavzsjsmtxdh.jpg)

**Ansible** is an IT automation platform that simplifies deploying and maintaining applications and systems. It can automate configuration management, application deployment, cloud provisioning, and more. 

Ansible has solid documentation and is another great project for beginner contributors. 

**Learn more about Ansible**: 
* Read the [Community Guide](https://docs.ansible.com/ansible/latest/community/) documentation
* Visit the [project's repository](https://github.com/ansible/ansible) on GitHub

### 7. cookiecutter

![cookiecutter](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/swk3lgmzd6dqbfh1zqef.jpg)

**Cookiecutter** is a command-line utility that creates projects from templates called "cookiecutters." For example, this utility lets you create a Python package project from a Python package project template. cookiecutter welcomes all types of contributions and promises to always give credit.

**Learn more about cookiecutter**: 
* Read the [Contributing](https://cookiecutter.readthedocs.io/en/2.0.2/CONTRIBUTING.html) documentation
* Visit the [project's repository](https://github.com/cookiecutter/cookiecutter) on GitHub

**Those are just seven open-source Python projects you could contribute to today**

We hope that one of them piqued your interest. But if not, check out this list of [more open-source Python projects](https://github.com/MunGell/awesome-for-beginners#python).

We can't wait to see what you do with open-source Python! If you have experience contributing or advice for new contributors, we'd love to hear about it. Just let us know in the comments or by replying to this email.

*As always, happy learning!*

### Start a discussion 
What open source projects have you, or hope to, work with? Was this post helpful? Let us know in the comments below!