Your ultimate guide for building great Python projects

Set up a bulletproof development environment, master the most popular tools, and start building awesome Python projects!

Machine image from the course

There's a long way from writing your first print("hello world") to shipping a Python application. Installing new packages without breaking others, choosing the best tools that will still be maintained in a few years, figuring out what's the "Pythonic" code that everyone keeps talking about, moving files around to avoid import errors, writing tests even when you don't have time, or making sure that your documentation is up to date - those are some of the struggles that you might encounter.

This course helps you solve those problems. It takes you through all the steps of a typical Python project - from setting up a good project structure, managing dependencies, adding tests, writing documentation, setting up continuous integration, and finally - deploying it.

My course explains how to improve your code with various static analysis tools. It gives you the tools for installing new packages or updating the Python version without messing it up. It shows you how to build popular types of Python projects like a CLI application or Python package. It even helps you configure the VS Code editor for the best experience when coding in Python!

Who's behind this course?

Hi, I'm Sebastian Witowski, and I'm a Python consultant, freelancer, and trainer. You might know me from one of my talks at various conferences.

I teach people how to write code in Python, but I also build projects for companies ranging from small startups to Fortune 500 businesses. While working on different projects, I've noticed a recurring pattern - they are either over-engineered or oversimplified. They involve too many "shiny new toys" and you end up spending way too much time just keeping them up to date and replacing the unsupported ones. Or they use outdated tools or no tools at all (bash scripts everywhere). None of these scenarios is good, so I created this course to show you how to build a Python project based on well-established tools and best practices.

PyCon 2020 conference logo
EuroPython 2019 conference logo
PyCon Taiwan 2019 conference logo
PyCon Japan 2019 conference logo
PiterPy conference logo
EuroPython 2017 conference logo

But I'm not alone in my mission! To make this course as valuable as possible, I've teamed up with Michael Kennedy and his Talk Python Training team.

You might know Michael from "Talk Python to Me" - one of the longest-running and most popular Python podcasts. He's an experienced Python trainer, and together with his team, he constantly releases new, high-quality Python courses.

Is this course for me?

This course is for everyone who knows Python's basics but still struggles with using it in everyday work. It's great for beginners, but even experienced programmers can learn something new. It doesn't matter if you are a Windows, Linux, or macOS user - the course points out the differences between the operating systems so that you can follow along. It's perfect for programmers, data scientists, machine teachers (is that how machine learning specialists are called?) - basically anyone who uses Python.

Just ask yourself - "How comfortable am I with using Python?"

  • Does updating a package in one project break other projects on your computer? And updating the Python version breaks everything?
  • When you start a new project - do you jump right in? Or do you stare at a blank code editor, not knowing where to start? Or maybe you search for a "best tool to do X," only to end up overwhelmed by the number of possible options, but no real solution?
  • Do you write tests? Or do you skip them because they take too much time to write or you don't even know where to start?
  • Do you keep your documentation up to date? Or, do you actually have any documentation?
  • Do you love your VS Code editor, but you wish it was more helpful when writing Python code?

If any of those questions sound familiar, let's see what we can do about it.

What you will learn

There are thousands of courses out there that can teach you Python. But this is the first one that teaches you how to thrive in Python's ecosystem. It covers every topic a typical programmer needs to know:

VS Code logo
Your code editor

In the Stack Overflow Developer Survey 2019, VS Code turned out to be the most popular code editor (over 50% of respondents were using it). If that's your favorite editor - great, because it's my favorite editor, too! So I start this course by sharing everything I learned after a few years of using it:

  • How to set it up for Python development.
  • What plugins to install.
  • How to test and debug your code.
Python and dependency management tools
Managing Python and packages

Upgrading Python versions or dependencies of your projects without breaking anything is one of the most useful skills to learn. Especially in terms of how much time and frustration it saves you when you don't need to fix your computer every time. So in this module, I will teach you:

  • How to easily install, upgrade, and instantly switch between different Python versions using pyenv.
  • What virtual environments are, how to use them, and what's the difference between tools like the venv builtin module and virtualenvwrapper.
  • How to separate global packages with a tool called pipx (and why you should do this).
Starting a Python project with a cookiecutter

Every Python project is different, so there's no silver bullet approach to make sure that yours is designed in the best way possible. But with a tool like cookiecutter, you can set yourself up for success by starting with a good architecture for a given task (be it a Python package, a Django website, or a CLI application). It not only lowers the risk of having to move things around because suddenly you're dealing with circular import errors, but it also gives you recommendations from hundreds of experienced developers who contributed to a specific template.

Pip and poetry
Managing a Python project

Sooner or later, your project will require some additional packages. This chapter shows you how to easily manage them using nothing more than pip and pip-tools. This is a simple yet extremely robust setup that works for any Python project. And if you are looking for something fancier, I will show you how to manage your project using poetry - a tool that is quickly growing in popularity among Python programmers.

PEP Books
Writing code

In this chapter, we will focus on the best coding practices. Don't worry, I won't judge your code and tell you how to make it better according to my subjective opinion. I will show you tools that do this instead. ;) We will talk about PEP8 and PEP257 - two documents specifying what "good" Python code should look like. I then compare various tools that can give you useful feedback. You will learn the difference between a formatter and a linter, set up a linter in VS Code, and discover some static code analyzers that can be especially useful if you're new to Python and want to learn how to write a more "idiomatic" code.

Pytest logo
Testing code

Do you write tests? Would you like to start writing them with the easiest to use, yet the most powerful and popular Python testing library? Great, then this chapter is for you! You will learn 80% of what you need to know about pytest in around 20 minutes. We will compare pytest to the built-in unittest module to see what makes it a better choice. I will show you how to write tests, run them, test your documentation, and even further extend pytest with some useful plugins. Finally, I will explain some of the more advanced testing features like mocks, fixtures, or parameterized tests that make writing tests easier and faster.

Sphinx logo
Documenting your code

Wouldn't it be great if the documentation could write itself and stay updated? Sorry, I can't help you with that, but I can show you how to automate as much as possible. For example, you will see how to automatically generate documentation for your API from the source code comments. For writing documentation, we will use the most popular library called Sphinx. I will show you how to set it up, how to use it, and what plugins are worth knowing.

Continuous integration icon
Continuous Integration

Continuous integration (CI) automatically merges code from different contributors, for example, when using GitHub or GitLab. In this chapter, you will learn how to turn a "boring CI" into an "awesome CI" - one that runs tests, generates documentation, uses bots to check for security vulnerabilities, and even deploys your code to a test server.

Blueprint icon
How to build a ...

I'm a huge proponent of the hands-on approach to learning. So I won't leave you with just a bunch of tools and best practices, but we will actually apply everything that we learned so far and build three typical Python projects:

  • A Python module/library that can be published on PyPI,
  • A CLI application that you can run in your terminal,
  • An executable application that you can send to someone, and they will be able to use it without even knowing what Python is!
Container icon
Deploying your application

Deployment is a complicated topic. Still, I won't leave you without showing you how to deploy all those cool applications that we just learned how to build. You will learn two ways of deploying your application:

  • First, we will use a Platform as a Service tool called Heroku.
  • Then we will create a simple Docker image and deploy it to one of the popular Infrastructure as a Service providers like Linode or DigitalOcean.
Machine converting components into projects

By the end of this course, you should be comfortable with writing a Python project from scratch, including:

  • Using a virtual environment to isolate your projects from other projects on your computer,
  • Starting with a cookiecutter template when you don't know how to start,
  • Writing tests (just a few ones, if you don't like writing them),
  • Writing documentation - a detailed one, or just the API reference for your project,
  • Employing various static analysis tools that can not only give you useful hints but also check for security vulnerabilities,
  • Setting up Continuous Integration to automate repetitive tasks when collaborating with other programmers,
  • Preparing your application for deployment.

Additionally, if you're a VS Code user, your code editor will be nicely configured for Python development.

Check out the "demo" version

For PyCon US 2020, I've prepared a free online workshop called "Modern Python Developer's Toolkit."

It's the most popular video from that conference, and it was an inspiration for this course. You can check it out to see if you like my teaching style and if there's actually something that you can learn from it.

What's the difference between this course and the free workshop?

This course is an extended and updated version of the free workshop from PyCon 2020. It's much more detailed - it not only contains more sections, but the existing sections have been extended. Some concepts that were initially not explained well enough (based on the audience feedback) are improved - this time with nice slides and animations. Every video comes with a transcript. Fonts are much larger, so you can comfortably watch it on your phone, and with the Talk Python Training app, you can even watch it offline. And the video quality is 2K (halfway between 1080p and 4K).

What people are saying

This course is still in preparation, so check out what people say about the free "Modern Python Developer's Toolkit" course (the precursor of this course):

Fantastic presentation. I'm amazed at how much useful info author managed to cram into a two and a half hours long video. If you're a beginner to intermediate Python user this video will literally save you days' worth of research by pointing you in the right direction.

Discovered a superb Python tutorial this past weekend.... The video and companion website covers tools and techniques for the entire development pipeline....
I would consider this an advanced tutorial, but it is worth browsing for the exposure to tools beyond the Python library and a stock text editor.

This is excellent, thanks. I've been meaning to write a similar tooling guide for my team, and now I'll just point them to this.
Bonus points: all my recommendations are the same (e.g. use pip not pipenv/conda)

This is a great video! I had already used a bunch of these tools but you taught me some new ways to use them.

Awesome presentation. Cover everything from A to Z in Python using modern Python tools. Great job!

Sebastian Witowski's - Modern Python Developer's Toolkit Pycon talk is probably worth one month of education for an intermediate Python developer. I highly recommend it!

Convinced? Join the waiting list!

By subscribing to the mailing list, you won't get any spam.
What you will get are:

  • Notification when the course is ready.
  • A launch discount for subscribers!
  • Invitation to a special webinar where Michael, some other Python developers, and I will show our Python setups.

Frequently Asked Questions

Do you offer discounts for teams?

Sure! If you're buying a license for at least 5 people, you get a discount. You can learn more about team discounts on this page.

This course can be a perfect bootcamp for new people on your team. Especially if you are using virtual environments, pytest, Sphinx in your projects - and chances are that you do because those are the most popular tools in the Python ecosystem. Instead of having a senior developer explain the same basics over and over again, get them this course. It explains the basics, shows the good practices, and puts everyone on the same page.

I'm not using Python 3.9. Can I still follow this course?

Totally! While all the code examples are in Python 3.9, all the tools and recommended practices should work with older versions of Python. Apart from the f-strings (introduced in Python 3.6), there probably won't be any code structures that won't work with an older version of Python. I will also show you some tools that let you instantly switch Python versions on your computer - so maybe you can use this course to take the plunge and finally upgrade to the latest Python version (or show your team leader how easily it can be done!)

I'm not a programmer, and I only know Python's basics. Is this course for me?

Yes, this course is for everyone - beginners who just learned Python, advanced programmers who want to expand their Python toolkit, data scientists who wish to organize their projects better. You will go through all the steps of building a Python project from scratch, so it doesn't matter how much you know already.

But if you are still afraid that this course is too much for you, check out the free workshop.

What if I don't like it?

We offer a 2-week, 100% money-back guarantee. So if you don't like it for whatever reason (and you haven't watched more than 75% of the course), just send an email to and you will get your money back - no questions asked!

Does access to the course expire? Do I have to pay a monthly fee?

Your access never expires. You pay only once, and you can access this course forever. There is no monthly fee.

I hate low-quality videos where the font is too small!

Me too! That's why those videos are recorded in HiDPI quality (more pixels per inch) and 2K resolution (that's double the quality of 1080p and half of the 4K resolution). Fonts are large enough that you can comfortably watch the videos on a mobile phone.

Can I watch the courses offline?

Yes! Talk Python Training has free iOS and Android mobile apps. You can use them to watch courses on your mobile device, even when you're offline (of course, you have to download the videos first).

I've lost access to my account.

Visit the login page and click the link to reset your password.

I have more questions!

Just send me an email at or ping me on Twitter - @SebaWitowski.