Start Here

Thanks for buying an Early Access copy of CPython Internals: Your Guide to the Python 3 Interpreter and supporting Real Python! You’re awesome!

You can access additional resources, such as sample code and errata, at the following URL:

Happy Pythoning!


How will I receive updates?

You’ll always find the latest version available for download here on

In current versions (Dec 2020) of Preview, Safari, TexShop, and Skim, any # symbols in link URLs are (incorrectly) converted to %23 when the link is clicked. This is a known issue with macOS’s PDFKit renderer and it will hopefully get fixed soon by Apple. As a workaround you can manually fix those URLs in the browser window by replacing the %23 with a # in the URL bar, or you can use a different PDF viewer, like Adobe Acrobat.

How can I give feedback on the book?

We welcome ideas, suggestions, feedback, and the occasional rant about the book. Did you find a topic confusing? Or did you find an error in the text or code? Did we omit a topic you would love to know more about? Drop us a line!

Your feedback really helps make this book an even better learning resource for Pythonistas around the globe.

Whatever the reason, good or bad, please send in your feedback at the link below:


Thank you for helping us make this book an even more valuable learning resource for the Python community.

Guy Dubost on June 2, 2020

No you guys are awesome. Keep up

bjornfick77 on June 3, 2020

i think it’s a bit too advanced for me but here goes :-) love this site and the content/materials are great

Peter on June 3, 2020

Just started working my way through the book at the moment. The part about setting up Visual Studio might be worth re-jigging, I got myself stuck when trying to compile only to find a short while later finding I need to run the bat file.

Loving the book so far though, already learned a fair bit, just reading the grammar section, i had no idea try had an else clause (never mind even knowing where to look to find the grammar).

Noah Altunian on June 3, 2020

I’ve read Real Python’s posts on the CPython source code. This is now taking it to the next level, and I couldn’t be more excited. 🙏

aamelgar on June 4, 2020

Do we get a physical copy?

Robert Armenta on June 4, 2020

I agree with aamelgar. Like the Python Tricks book (Which is awesome!) I would like a physical copy as well.

zeliwipin on June 4, 2020

it looks nice i will read it and keep you posted

drawdoowmij on June 5, 2020

Excited to get started on this book!

Ricky White RP Team on June 5, 2020

The Paperback version will be released at a later date when the book is out of early access. We’ll announce when it is available to order.

doni12voip on June 16, 2020

I need the Paperback please

Nick Dat Le on June 25, 2020

Great work Anthony et al! Just the resource I’ve been looking for :)

Curtis Bucher on July 13, 2020

If we already payed for the prerelease, will we get the paperback when it comes out?

Dan Bader RP Team on July 13, 2020

Once we’re out of Early Access with the digital edition we are going to get a paperback version ready for publishing. When the paperback version is released it will be a separate purchase from Amazon or your favorite local book store.

dgrunwal on Aug. 15, 2020

Will work through the book and give comments and learn CPython of course.

seyoung on Aug. 18, 2020

Thank you. It was a pleasant read. I’d be happy to read more on different modules in the standard library :)

Mauricio on Sept. 12, 2020

Hi. Hate to be the first one. I’m stuck. I cannot get to call ./configure properly. Have done autoreconf -i first and still nothing. Error is:

checking for git... found
configure: error: cannot run /bin/bash ./config.sub

Also, I am on WSL 2, can’t say if it’s part of the issue. When I run make -j2 -s I get error no targets. Anyone help?

Mauricio on Sept. 13, 2020

UPDATE: I have done some progress. Doing dos2unix ** helped ./configure do its thing.

However, it doesn’t make the Makefile as ./configure still errors out. It says, at the very end of the ./configure process "mv: cannot stat 'config.c': No such file or directory"

Will continue trying, however, any help is appreciated.

Mauricio on Sept. 13, 2020

EDIT to UPDATE: I also had to pass the build type in order to ./configure commence its process, --build=i689-pc-linux

Mauricio on Sept. 13, 2020

SOLUTION: I deleted everything and cloned it again. This time, I used the force (-f) option when doing the git checkout. Then, regular ./configure and make -j8 succeeded.

oglop on Dec. 1, 2020

Great information and AWESOME formatting! This is how modern tech books should look. So easy to read the code examples. Thanks for the book and awesome site!

You must own this product to join the conversation.