Course Summary
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.
What students are saying
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.
-- Matthew R.
What's this course about and how is it different?
This 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!
What topics are covered
This course covers everything you need to know to develop, run, and deploy full web apps on top of
FastAPI. Just some of the topics include:
- VS Code + Python: A current and growing Python code editor
- Manage Python and packages in the real world
- Create a Python project with cookiecutter templates
- Managing project dependencies with tools like pip, pip-tools, poetry, and more
- See what "good" Python code should look like
- Test your Python code with pytest
- Documenting your code with Sphinx
- Perform some automatic checks on your code with continuous integration
- How to build a CLI application that you can run in your terminal
- Create a Python module/library that can be published on PyPI
- Make a standalone executable application that you can send to someone without Python dependencies
- Deploying your application to a Platform as a Service tool called Heroku
- Create a simple Docker image and deploy it to one of the popular PaaS providers
- And much more
See the full course outline for details.
Who is this course for?
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.
This course is delivered in very high resolution
This course is delivered in 1440p
(4x the pixels as 720p). When you're watching the videos for this course, it will feel like you're sitting next to the instructor looking at their screen.
Every little detail, menu item, and icon is clear and crisp. Watch the introductory video at the top of this page to see an example.
Follow along with subtitles and transcripts
Each course comes with subtitles and full transcripts.
The transcripts are available as a separate searchable page for
each lecture. They also are available in course-wide search results
to help you find just the right lecture.
Who am I? Why should you take my 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.
Free office hours keep you from getting stuck
One of the challenges of self-paced online learning is getting stuck. It can be hard
to get the help you need to get unstuck.
That's why at Talk Python Training, we offer live, online office hours. You drop in
and join a group of fellow students to chat about your course progress and see solutions
via screen sharing.
Just visit your account page to see the upcoming office hour schedule.
The time to act is now
Are you tired of fumbling around wondering whether your project is really following Python best practices? Would you like to incorporate more of the professional Python developers' tool chain into your workflow? Maybe you just need a little help making sense of all the options out there. Then take the Modern Python Projects and get a seasoned pro's perspective on how to build Python applications in 2021.
Course Outline: Chapters and Lectures
Welcome to the course
|
|
10:03 |
Welcome
|
|
1:29 |
What you will learn
|
|
6:25 |
What you need to know
|
|
0:42 |
Meet your instructor
|
|
0:44 |
Disclaimer about tools and services in this course
|
|
0:43 |
Setup and following along
|
|
1:43 |
Python
|
|
0:46 |
Code editor
|
|
0:32 |
Source code
|
|
0:25 |
Your code editor
|
|
49:18 |
Choosing a code editor
|
|
4:35 |
Installing VS Code
|
|
0:24 |
Installing Python extension
|
|
5:55 |
Pylance and a language server protocol
|
|
2:53 |
Quick overview of VS Code
|
|
10:47 |
Running Python code
|
|
3:08 |
Debugging Python code
|
|
3:55 |
Testing Python code
|
|
4:52 |
Snippets
|
|
4:27 |
Plugins
|
|
8:22 |
Python versions and packages
|
|
58:40 |
Don't change the system Python
|
|
1:39 |
pyenv
|
|
1:10 |
Installing pyenv
|
|
3:20 |
Installing pyenv-win on Windows
|
|
0:58 |
Installing new Python version with pyenv
|
|
5:18 |
3 levels of pyenv
|
|
3:47 |
Troubleshooting pyenv
|
|
1:41 |
Bonus: how pyenv works?
|
|
2:39 |
Bonus: is there pyenv for nodejs, go, etc.?
|
|
0:45 |
The problem with pip
|
|
5:19 |
What are virtual environments?
|
|
1:27 |
Creating a virtual environment
|
|
2:13 |
Using a virtual environment
|
|
1:28 |
Typical workflow with virtual environment
|
|
2:27 |
Virtualenvwrapper: a virtual environments management tool
|
|
10:04 |
Isolate global packages with pipx
|
|
2:53 |
pipx in action
|
|
5:11 |
pipx packages in VS Code
|
|
2:33 |
Summary
|
|
3:48 |
Cookiecutter templates
|
|
18:24 |
Starting a new project can be hard
|
|
3:33 |
What is cookiecutter?
|
|
0:36 |
Using cookiecutter to generate a project
|
|
8:00 |
Tip on how I use cookiecutter
|
|
1:18 |
You can build your own template
|
|
2:23 |
Summary
|
|
2:34 |
Managing Python project
|
|
43:02 |
What is 'Project Management' in Python?
|
|
0:34 |
How Python imports modules?
|
|
3:27 |
Import errors
|
|
2:34 |
Simple projects
|
|
2:57 |
Medium projects
|
|
1:39 |
Advanced projects
|
|
1:45 |
Makefiles - simple tasks management
|
|
5:51 |
Managing dependencies
|
|
0:32 |
requirements.txt conventions
|
|
3:16 |
Separate requirements files
|
|
1:15 |
Pin your dependencies!
|
|
1:02 |
pip-tools
|
|
4:12 |
Python project chores
|
|
1:10 |
Pipenv or Poetry
|
|
0:59 |
Poetry in action
|
|
4:47 |
Publishing package with Poetry
|
|
1:27 |
Other tools
|
|
3:33 |
My favorite tool
|
|
2:02 |
Writing code
|
|
39:36 |
How to *not* write a good Python code?
|
|
1:43 |
PEP8 and PEP257
|
|
2:00 |
Black
|
|
4:21 |
Linters
|
|
2:09 |
Pylint
|
|
6:59 |
Flake8
|
|
3:10 |
Flake8 plugins
|
|
5:20 |
Multiple linters in VS Code
|
|
2:04 |
Other static code analyzers
|
|
2:56 |
Sourcery
|
|
3:08 |
Different python REPL
|
|
1:15 |
IPython
|
|
2:39 |
bpython
|
|
0:53 |
ptpython
|
|
0:59 |
Testing code
|
|
39:27 |
Unittest vs. pytest
|
|
0:41 |
Converting unittest test to pytest
|
|
4:57 |
Running pytest tests
|
|
3:50 |
pytest options
|
|
6:57 |
Configuration file
|
|
2:16 |
Fixtures
|
|
2:16 |
Mocking and monkeypatching
|
|
1:17 |
Parametrized tests
|
|
3:38 |
Marks
|
|
3:14 |
Testing code examples in the documentation
|
|
1:21 |
Extending pytest with plugins
|
|
1:42 |
Useful pytest plugins
|
|
3:27 |
Moving from unittest to pytest
|
|
1:49 |
Summary
|
|
2:02 |
Documentation
|
|
23:54 |
Sphinx
|
|
0:42 |
Example code for this chapter
|
|
1:43 |
Setting up Sphinx
|
|
3:02 |
reStructuredText
|
|
2:01 |
Adding more documentation
|
|
2:02 |
How to write good documentation?
|
|
2:03 |
Generating API documentation
|
|
4:09 |
Show source code in the documentation
|
|
0:43 |
Testing your documentation
|
|
2:41 |
Read the Docs
|
|
0:57 |
MkDocs
|
|
1:16 |
REST API documentation
|
|
2:35 |
CI
|
|
50:44 |
Building projects is not just coding
|
|
0:36 |
tox - automate Python tasks on your computer
|
|
2:30 |
Source code for this chapter
|
|
0:29 |
tox in action
|
|
6:59 |
pre-commit
|
|
3:50 |
pre-commit in action
|
|
5:34 |
Continuous Integration (CI)
|
|
1:30 |
GitHub Actions
|
|
3:02 |
GitHub Actions in action
|
|
10:14 |
CI server vs. your computer
|
|
0:40 |
GitLab CI
|
|
0:36 |
GitLab CI in action
|
|
11:29 |
When to use which tool?
|
|
3:15 |
Let's build a CLI
|
|
44:21 |
Time for practice
|
|
0:37 |
CLI applications
|
|
0:40 |
Our CLI application
|
|
2:28 |
Technical considerations
|
|
2:04 |
First version of uptimer
|
|
13:35 |
Daemon mode and multiple URLs
|
|
3:44 |
Adding tests
|
|
11:06 |
Adding documentation
|
|
7:00 |
Possible improvements
|
|
3:07 |
Let's build a package
|
|
39:38 |
Let's build a Python package
|
|
0:40 |
Technical considerations
|
|
0:39 |
Start with a cookiecutter template
|
|
2:36 |
Remove unnecessary files
|
|
5:14 |
Add code
|
|
6:00 |
Install package from setup.py
|
|
2:24 |
Add tests
|
|
3:49 |
Add documentation
|
|
6:34 |
Publishing on PyPI
|
|
8:58 |
Flit
|
|
1:35 |
Private PyPI
|
|
1:09 |
Let's build an app
|
|
31:38 |
Executable applications
|
|
2:23 |
GUI for the uptimer
|
|
6:13 |
Warning: Building executable applications is tough!
|
|
0:57 |
Create a Mac app with PyInstaller
|
|
7:13 |
Will it work on a brand new macOS installation?
|
|
1:35 |
Create a Windows exe file
|
|
9:08 |
Will it work on a brand new Windows installation?
|
|
1:32 |
Windows and a virus warning
|
|
1:16 |
Cross platform Python applications
|
|
1:21 |
Deployment
|
|
54:52 |
Deploying Python applications
|
|
1:27 |
Virtual servers, PaaS, containers
|
|
1:14 |
Virtual private server
|
|
0:58 |
Platform as a service
|
|
1:23 |
Docker containers and kubernetes
|
|
3:20 |
Uptimer website
|
|
7:35 |
Deploying to Heroku
|
|
8:23 |
Using Docker
|
|
1:42 |
Let's write a Dockerfile
|
|
4:00 |
Building a Docker image
|
|
5:05 |
Publishing on Docker Hub
|
|
3:02 |
Free Docker playground
|
|
3:53 |
Deploy Docker image on DigitalOcean
|
|
3:27 |
Auto reboot and auto update
|
|
6:39 |
Docker Compose
|
|
2:44 |
Course conclusion and review
|
|
17:57 |
That's all folks
|
|
0:20 |
VS Code
|
|
1:03 |
pyenv
|
|
1:01 |
Virtual environments
|
|
0:36 |
pipx
|
|
0:58 |
Cookiecutter
|
|
1:19 |
Growing Python projects
|
|
0:56 |
Pinning dependencies
|
|
1:08 |
Poetry and friends
|
|
0:39 |
Static analysis
|
|
1:59 |
pytest
|
|
0:46 |
Documentation
|
|
1:04 |
CI
|
|
2:18 |
Building a CLI application
|
|
0:29 |
Building a Python package
|
|
0:55 |
Building an executable application
|
|
0:38 |
Deployment
|
|
1:26 |
Thanks and bye
|
|
0:22 |