#437: Python Language Summit 2025 Highlights
About the show
Sponsored by Posit: pythonbytes.fm/connect
Connect with the hosts
- Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky)
- Brian: @brianokken@fosstodon.org / @brianokken.bsky.social
- Show: @pythonbytes@fosstodon.org / @pythonbytes.fm (bsky)
Join us on YouTube at pythonbytes.fm/live to be part of the audience. Usually Monday at 10am PT. Older video versions available there too.
Finally, if you want an artisanal, hand-crafted digest of every week of the show notes in email form? Add your name and email to our friends of the show list, we'll never share it.
Michael #1: The Python Language Summit 2025
- Write up by Seth Michael Larson
- How can we make breaking changes less painful?: talk by Itamar Oren
- An Uncontentious Talk about Contention: talk by Mark Shannon
- State of Free-Threaded Python: talk by Matt Page
- Fearless Concurrency: talk by Matthew Parkinson, Tobias Wrigstad, and Fridtjof Stoldt
- Challenges of the Steering Council: talk by Eric Snow
- Updates from the Python Docs Editorial Board: talk by Mariatta
- PEP 772 - Packaging Governance Process: talk by Barry Warsaw and Pradyun Gedam
- Python on Mobile - Next Steps: talk by Russell Keith-Magee
- What do Python core developers want from Rust?: talk by David Hewitt
- Upstreaming the Pyodide JS FFI: talk by Hood Chatham
- Lightning Talks: talks by Martin DeMello, Mark Shannon, Noah Kim, Gregory Smith, Guido van Rossum, Pablo Galindo Salgado, and Lysandros Nikolaou
Brian #2: Fixing Python Properties
- Will McGugan
- “Python properties work well with type checkers such Mypy and friends. … The type of your property is taken from the getter only. Even if your setter accepts different types, the type checker will complain on assignment.”
- Will describes a way to get around this and make type checkers happy.
- He replaces
@property
with a descriptor. It’s a cool technique. - I also like the way Will is allowing different ways to use a property such that it’s more convenient for the user. This is a cool deverloper usability trick.
Brian #3: complexipy
- Calculates the cognitive complexity of Python files, written in Rust.
- Based on the cognitive complexity measurement described in a white paper by Sonar
- Cognitive complexity builds on the idea of cyclomatic complexity.
- Cyclomatic complexity was intended to measure the “testability and maintainability” of the control flow of a module. Sonar argues that it’s fine for testability, but doesn’t do well with measuring the “maintainability” part. So they came up with a new measure.
- Cognitive complexity is intended to reflects the relative difficulty of understanding, and therefore of maintaining methods, classes, and applications.
- complexipy essentially does that, but also has a really nice color output.
- Note: at the very least, you should be using “cyclomatic complexity”
- try with
ruff check --select C901
- try with
- But also try complexipy.
- Great for understanding which functions might be ripe for refactoring, adding more documentation, surrounding with more tests, etc.
Michael #4: juvio
- uv kernel for Jupyter
- ⚙️ Automatic Environment Setup: When the notebook is opened, Juvio installs the dependencies automatically in an ephemeral virtual environment (using
uv
), ensuring that the notebook runs with the correct versions of the packages and Python - 📁 Git-Friendly Format: Notebooks are converted on the fly to a script-style format using
# %%
markers, making diffs and version control painless - Why Use Juvio?
- No additional lock or requirements files are needed
- Guaranteed reproducibility
- Cleaner Git diffs
- Powered By
uv
– ultra-fast Python package managementPEP 723
– Python inline dependency standards
Extras
Brian:
- Test & Code in slow mode currently. But will be back with some awesome interviews.
Joke: The 0.1x Engineer
- via Balázs
- Also
Episode Transcript
Collapse transcript
00:00 Hello and welcome to Python Bytes, where we deliver Python news and headlines directly to your earbuds.
00:04 This is episode 437, I can't believe that, recorded June 23rd, 2025.
00:11 And I am Brian Okken.
00:12 And I'm Michael Kennedy.
00:13 And this episode is sponsored by Posit, so check out that section later in the episode.
00:19 We really appreciate it.
00:20 If you'd like to send us items or comment on the show, you can reach all of us.
00:26 the links to our socials on blue sky and mastodon are in the show notes so check those out and if you'd like to sometime join us live or at least watch the show even later we since they're all they're all up later you can head over to pythonbytes.fm/live and find out where all the videos are or schedule to watch us we or hang out with us we um we do watch the chat and sometimes take questions from there or extra comments.
00:56 And that is Mondays at 10 a.m. usually, 10 a.m. Pacific time.
00:59 Also, finally, please go over to pythonbytes.fm and sign up for the newsletter.
01:05 We're putting a lot of work into this to try to make this a useful resource for you, not just the links to the topics, but some of the background information.
01:14 And it's just more than just the show notes.
01:16 So check it out.
01:19 They won't know until they subscribe, Ryan.
01:21 Yeah, you just, I mean, you can always delete it.
01:23 Like, we don't sell your name or anything or spam you, so might as well sign up and try it.
01:28 Speaking of, I guess, Python stuff, Michael, do you want to kick us off with the first topic?
01:33 I have a meta topic, a topic of topics, if you will.
01:38 The Python Language Summit was held at PyCon this year, back in May, I guess May 14th, in Pittsburgh, Pennsylvania.
01:47 However, why are we talking about this now?
01:49 Because Seth Michael Larson, who is the, I don't know his title exam, I messed it up, sorry Seth, security developer in residence at the PSF for Python, was the official note taker, blogger, eyes of the community sort of thing.
02:05 And they just, they just published on June 12th, the Python Language Summit 2025 write-up, which is a write-up of the whole event and the 10 or so talks that were given there.
02:18 So you get some really interesting looks into where the core developers are focusing, what they're considering for the future.
02:25 Most of this stuff is forward-looking, or at least if it's not 100% forward-looking, it's like, hey, we should be doing this.
02:30 It's talking about problems that need to be solved in the future, you know?
02:34 So I actually interviewed Seth over at Talk Python.
02:38 This will be out in a couple of weeks.
02:40 The live stream, like ours, is also available here at the links on Talk Python.
02:45 So people can't wait for the edited version.
02:47 they can check that out.
02:49 But just to give you a sense of what was out there, some of the topics included how do we make breaking changes less painful?
02:56 That was Itamar Oren from Meta talked about like when you move from say Python 3.11 to 3.13 or something like that, like what broke?
03:04 You know, when you have millions of lines of Python like Meta does and that's executing at scale, you know, maybe minor, things that might seem minor inconsequential to the rest of us, like all of a sudden, that 5% performance change here made a big difference one way or the other, like that kind of stuff, right?
03:19 And it talks about non-obvious problems.
03:22 Like, for example, if you want to learn about something that was taken out, like if you think there's a problem because a part of a standard library was removed, well, the documentation was also removed.
03:35 So it's like, how do you find the thing that was documented, but it's no longer there?
03:39 You can go back in history to the different versions of Python docs, but the default is latest, which no longer, you know, which are basically 404s, which is weird.
03:47 So like that kind of stuff, right?
03:48 That's a decent idea just to like leave it in for versions.
03:54 Just make the background like red or yellow or something.
03:57 Go, this thing is dead.
03:58 If you're viewing it, stop viewing it.
04:00 It's going to hurt your eyes.
04:03 The next, there was a whole series.
04:04 I would say a third of this entire conversation was on async, IO, threading, concurrency, crazy ideas about like how do we deal with, What can we do to make it obvious at runtime that you're running into threading problems?
04:20 Because just last week, Brian, you talked about this, the experimental tag came off of the free-threaded Python.
04:27 So now it's really free-threaded.
04:28 It's truly free.
04:29 But there's a lot of like, well, what are the consequences of that?
04:31 And how do we build for that?
04:32 And what can we do to make this easier?
04:34 And I'll put that in quotes.
04:35 So there was an uncontentious talk about contention by Mark Shannon, which is like concurrency.
04:40 What can we do to make things more immutable so that we can share them more easily and so on?
04:45 There's the state of free-threaded Python by Matt Page.
04:47 Fearless concurrency by three folks, Matthew, Tobias, and FreeJoff.
04:51 Anything else on threading?
04:54 Sort of.
04:55 Not really.
04:56 But, you know, out of 10 talks, that's quite a bit.
04:58 There.
04:59 There was some docs updates by Marietta.
05:01 The challenges of the steering council.
05:03 Like, basically, how has it been going the last couple of years now that we have a steering council and not a BDFL?
05:08 And that was by Eric Snow.
05:09 it's pretty interesting like hey good news things are still working not great news stuff led by a committee of volunteers goes slower than one person just goes sounds good surprise um some packaging stuff by barry warsaw and pradium get them python on mobile by russell keith mcgee so this is interesting in that peps 730 and 738 have been completed and russell went in front of all the core devs said after many years this year i can say that python on mobile is there how about that Now, that doesn't mean all the tooling, front-end frameworks, UI frameworks, all that kind of stuff are there for building Python apps.
05:46 But CPython is now a tier three supported platform, which means the core developers as part of the continuous integration, everything of Python itself, make sure that it also builds on iOS and Android.
06:00 That's what that means.
06:00 Still good news.
06:01 Yeah, I'm looking forward to the time where, I mean, I know that everybody is, but it'd be cool if I could just open up VS Code or PyCharm and write an iPhone app.
06:11 I would probably practice my backflip, see if I could do a backflip if that happened.
06:15 Like, that would be so awesome.
06:17 It would be so good.
06:19 Yeah, it would be so good.
06:21 That and JavaScript frontend, like Python, PyScript frontends.
06:25 Let's go here for both of them.
06:27 Speaking of which, there was an update on Pyodide and the JavaScript FFI, the language bindings that allow PyScript or Pyodide, actually specifically Pyodide, to talk to the JavaScript stuff.
06:38 So from Python front-end stuff, you can actually interact with JavaScript directly rather than indirectly, a little bit more clearly.
06:46 And most importantly, there's slight variations in how you do this in MicroPython and Pyodide, which means you can't use interoperable code between the two in Pyodide, PyScript world, which is weird.
06:59 And this is about trying to solve that amongst other things.
07:03 And then finally, what do core developers want from Rust?
07:05 Do people want Rust? Do they not want Rust?
07:08 And if you're looking for native, probably the biggest piece of news here is that our best estimate is somewhere between a quarter and a third of all native code being uploaded to PyPI for new projects is based on Rust.
07:21 That's pretty big.
07:22 It is pretty big.
07:23 Yeah.
07:24 Yeah.
07:25 All right. So I think either check out the blog post or listen to the episode I did with Seth.
07:31 This is good stuff to track.
07:33 Okay. Nice.
07:36 All right. Well, I'm going to change gears completely and just talk about, zoom in on one thing about Python, and that is Python properties. So Will McCoogan wrote an article called Fixing Python Properties. And I just thought it was an interesting take on how to get around some type checking quirks. So he starts off with talking about basically the properties are awesome and the type checkers are fine with properties. However, the type of a property is taken from the getter method. And I guess that makes sense, but there really are two, there's getter and setter. So if those types don't match, your type checker is not going to like it.
08:20 And so he walks through a, and I'm like, well, why, why would you want different types for your getter and setter? And he walks through a padding dimension example, which is, I think, I mean, he's doing textual so a decent um he's an example of he wanted to be able to just have somebody be able to say hey um for my padding if there's there's really four values but kind of like with css if you provide one value it's applied i don't remember all the rules it's applied everywhere if you if you apply to set two paddings it'll apply to like the distributes them appropriately just like css and so you can do uh basically one value two values or just an integer a tuple events of just two values or you can provide four um and all of this should just work and it does with python but you can make it work with like some you know with your code checking for all of those things but with type checkers it'll say you're doing something wrong and um he he said we i could make it like type check better but just like kind of destroy the user experience but instead he um he provides instead of doing properties so he just like rips out that the idea of the property um he's in the first example he's using the property the decorator um but he uses uh what he calls a descriptor which is i don't know if this is a real thing like he talks about it as if it's like a programming construct, but I'm not familiar with it.
09:56 Anyway.
09:56 Yeah, I think it's part of Python, like an advanced get adder, set adder sort of thing.
10:02 It's a class that has, it's just a class that defines both a get and a set method.
10:08 So that's your descriptor class.
10:11 And he uses that instead of a property.
10:15 And that is all it takes to be able to make it work without PyPI or without type checkers freaking out.
10:22 So that's just it.
10:24 Oh, an update.
10:26 Somebody, Peter, pointed out an issue.
10:29 Okay, well, I haven't read that part.
10:31 But you know one of the problems with typing all over the place, and his thing says, look, it might be fine in my Pi, but then in VS Code, the Pi Lance validator understands this differently and gives you an error.
10:45 One of the things that drives me utterly crazy is, like, you've got these different tooling, And they all have a slight variation of like, that's fine.
10:52 Or like, actually, no, that's not fine.
10:55 And we've got Ty and you've mentioned Pyreply coming as well, which are going to be other ones probably have slightly different defaults.
11:03 And so when you say I fixed it, like what did you fix it for?
11:06 Exactly.
11:07 Did you fix it for all of them?
11:08 Did you fix it for your editor?
11:09 Did you fix it for this CI?
11:11 Like there's a lot of variations and it drives me crazy.
11:14 And it's especially, so I just have like a couple of small packages that I maintain.
11:19 And I have like, you know, like PyTouchCheck is now type, has type hints around it.
11:26 And that's helpful.
11:27 But it's a little bit of a quirky thing.
11:30 And it doesn't, it works fine on mypy, but it doesn't work on some of the others.
11:36 And I've had to write or something.
11:38 Yeah, about that.
11:39 I'm like, well, use mypy.
11:40 I don't know.
11:41 You can't really, if it's a dependent library, you really want to use that for everything.
11:46 Yeah, exactly.
11:47 It is a mess.
11:49 I've had some stuff like that.
11:50 It's like, this thing doesn't work right on PyRite.
11:52 Like, okay, help me understand why I care about that.
11:55 But they're like, you know, if I use it in this setup, I'm going to just get like errors.
11:59 And it wasn't something super mild.
12:01 It was for one of my web things.
12:04 And basically the library was used as a decorator.
12:06 So anything they decorate now gets like invalidated in terms of its type.
12:11 I wonder if that's something now that I probably, for libraries, we should be testing against multiple type checkers, and that's just one.
12:19 Probably.
12:20 It's super annoying, but yeah, probably.
12:22 And then here's the most annoying part of it was, though I think it was Pyrite, is like Pyrite was giving errors that now the Flask view method doesn't match the type or something, but Flask was fine with it.
12:37 And nobody ever, ever, ever directly calls those functions.
12:41 Only Flask calls it.
12:43 And so like, here's some functions.
12:44 Nobody calls them.
12:45 It's affecting nobody.
12:47 because they don't, no one even sees the type information.
12:49 Flask sees it. Flask is fine.
12:51 But I still have to like do really complicated typing information to get the type checkers to stop giving them more.
12:58 Like, are you serious?
13:00 It's not getting easier because we're getting more type checkers.
13:02 Well, I thought all this was supposed to just be kind of invisible and we just get benefit and no cost.
13:09 Until you get an issue about it.
13:10 Now, I appreciate that people found the issue because I did fix it.
13:13 but it was like a couple of hours of really complex type juggling.
13:19 Oh, you're a nicer person than me.
13:21 For something nobody called.
13:22 Yeah, well.
13:23 I did the classic, yeah, I don't use Pyrate, but, you know, I'd accept a pull request.
13:31 Yeah, exactly.
13:32 One other thing, like, so rolling back just a tiny bit, like properties, if I had to say, like, somebody said, Michael, what is the clumsiest, most non-intuitive, less than ideal, less readable or just bad part of Python, the language?
13:50 Properties.
13:50 It's so bad.
13:52 There, I could have like in separate files, maybe it made me as separate parts of files.
13:57 I could say over here is a getter and then somewhere else there's some weird setter.
14:00 And like, why does the setter dot something like just the at setter dot variable name of a thing I've defined before?
14:08 It's just so chunky and weird and the typing is a mess.
14:13 If you look at the way C# does this, probably other languages as well, it is so nice.
14:18 You just public property name, you have a getter and you have a setter right in there.
14:22 I know that you could create separate classes for descriptors like Will was talking about.
14:27 I think there might be maybe different performance profiles for those property versus a descriptor.
14:33 But I would really like to see Python clean up.
14:36 It doesn't have to be what C# does.
14:38 but something where like they go together, they're obvious, you're not defining it twice, et cetera, et cetera, et cetera. It'd be nice. Wouldn't it be nice, Brian?
14:45 Wouldn't it be nice?
14:47 You know what is nice though? Our sponsor this week, Posit, super excited. Let me tell you about what they're offering everyone. So this episode is brought to you by the nice folks at Posit.
15:00 So Posit, originally they came out of the R space, right? They made R studio and they made some other things, but they really have been putting a lot of effort into Python these days, right?
15:09 They've created Posit Connect, awesome way to run and host your data science stuff.
15:15 They made Shiny for Python, which is like a reactive notebook, like Marimo or a little bit like cheaper notebooks and stuff.
15:23 So they're doing awesome stuff.
15:24 So I'm really, really happy to have them sponsoring the show.
15:27 Today, I want to focus on data science workloads and how to host them.
15:31 So you have dashboards, reports, plots, interactive web apps, all the way to custom Flask or Django apps.
15:37 They have a service called Posit Connect.
15:40 And Posit Connect makes it easy for data scientists to share work they built with Python.
15:45 So if you've got a Streamlit app, dashboard, Plotly, interactive plots, FastAPI, Quarto, just connect it to there.
15:52 And their service will maintain it and connect automatically, hosts it, updates it for you, and so on.
15:58 So you can even have it update reports on a schedule.
16:02 So if you host a dashboard, you can have it rerun the data science stuff that computes the graphs and does the summaries like on a cron job sort of thing on a schedule.
16:11 So no reason to explain to stakeholders why the dashboard or plot stopped updating last week.
16:16 Just set it up, pause it, connect, got it going.
16:18 So you can focus on your data science work and leverage your skill set while connect makes you look good, keeping your code running and private.
16:25 With Connect, you get a private URL on your Connect server, ensuring that your asset is continuously available to your shareholders.
16:31 You can control which users have access to that asset.
16:35 And just let Connect handle all your DevOps for you.
16:38 You can share your work.
16:40 Keep doing what you do best.
16:40 So if you work on a data science team, you owe it to you and your org to check out Posit Connect.
16:46 Just visit pythonbytes.fm/connect and get a three-month free trial and see if it's a good fit.
16:52 That's pythonbytes.fm/connect.
16:54 The link is in your podcast player show notes right at the top.
16:57 Thank you for Deposit for supporting Byte on Bytes.
17:01 Yes, thank you.
17:03 And a rewrite.
17:05 All right.
17:05 Well, next I want to talk about some complexity in your code.
17:11 And Complexipy.
17:13 Complexipy?
17:13 Complexipy.
17:14 It's C-O-M-P-L-E-X-I-P-Y.
17:18 This is a project that's new to me.
17:20 And actually looking at the repo, it looks kind of new.
17:24 it's modified in the last weeks.
17:27 So I'm really kind of enjoying it.
17:29 So what is Complexify?
17:31 So it's an extremely fast Python, I'm quoting here, an extremely fast Python library to calculate the cognitive complexity of Python files.
17:42 And it's written in Rust, just like you said, a lot of PyPI stuff going up that's written in Rust lately or written parts of it in Rust.
17:49 Looks like 45% Rust, 23 Python.
17:52 Anyway, so this reminded me that I should be paying attention to complexity.
17:59 So I'm glad this came out.
18:01 So what is cognitive complexity?
18:03 Well, it's kind of like cyclomatic complexity.
18:07 Do you remember cyclomatic complexity?
18:09 Kind of.
18:10 I'm going to include a link to the Wikipedia page, but you can look.
18:14 So I remember it from Flake 8.
18:16 So Flake 8 had cyclomatic complexities and using the McCabe, I don't know, the McCabe test around it.
18:26 But it would just sort of, I never used McCabe directly.
18:29 I just used it with Flake 8.
18:31 And now actually I'm using it with Ruff, which is kind of cool.
18:37 I just recently realized this, that you can pass in the rule C901, and you can do a complexity check on with your rough tests.
18:47 So that's super awesome.
18:50 And so this is kind of fun.
18:53 But what are we looking at for cognitive complexity?
18:56 Well, there's a link within here of the white paper.
19:00 There's a white paper, and you kind of have to – the white paper comes from Sonar Source.
19:04 They do SonarCube, if anybody's familiar with that.
19:07 It's a static analysis stuff.
19:09 And I read the white paper and I skimmed it, really.
19:12 But it's actually a really easy read, talking about how the idea around it is not just like giving you a number for your entire source code of how complex stuff is and where the problems are, but really looking at everything.
19:32 So there's, you know, more loops, more structs, more everything.
19:37 It's really a little bit different take looking at really the maintainability.
19:43 So there's a discussion in the white paper talking about that cyclomatic complexity was intended to make it to measure how testable and maintainable.
19:54 And the testable part comes from that the testability.
19:59 Like if you have multiple branches, you have to test all the branches.
20:02 So more branches means more tests.
20:06 That it does well, but the authors of the white paper don't really believe that that it measures maintainability as well.
20:14 So this is another attempt.
20:15 And I think it does pretty good.
20:17 And plus, it's super fast and the output is great.
20:20 So I ran it on a couple of the, I ran both the rough version of the McCabe test and then this against my code, some of my code.
20:31 And it came up with the same hot spots.
20:34 And so I'm going to look at what the output looks like.
20:38 I wish this was in color because it's in color when you're doing it on the command line.
20:43 And the colors really help because it does like zero means like there's no problem here.
20:48 It's not complex code.
20:50 And then the numbers go up and there's, I think there's levels that you can set, but it's, there's the defaults are fine of, you know, yellow and red for things that you really want to care about.
21:01 And then by default, it lists, like you pointed at a directory and it'll list out everything.
21:07 You can just tell it to just, you can have it just list the problem parts too.
21:12 But it is kind of nice to just see the whole thing.
21:15 If you've got not too, too large of a project, if you have a huge project, definitely just look at the problem parts.
21:20 The reason why I'm really excited about this again, oh, it talks about the analysis here in the readme even.
21:26 That's nice.
21:27 And you can output it to a CSV file or whatever.
21:30 But I just did it on the command line because why would I use this?
21:35 Not just as a pass fail within CI, which is a good idea to do a pass fail in CI.
21:41 What I want to know is the areas of my code that probably might need refactored to be less complex.
21:49 But if they're already as clean as they can be or they're that bit of code that you have that the person that wrote it is gone and you're not sure how to touch it.
21:58 Those are the areas to really throw some unit tests around or some subsystem tests around those areas are a good thing.
22:08 Anyway, think about, remember complexity.
22:11 And I like the idea of not just of thinking of cognitive or maintainability complexity.
22:19 This is a really cool idea.
22:20 I like it.
22:21 I am an absolute junkie for this stuff.
22:23 I love it so much.
22:24 So I'm glad you pointed out.
22:27 Christian out in the audience says, great, Radon is really slow.
22:31 So cognitive complexity is the last thing preventing me from dropping Flex 8.
22:35 Superflake 8, pretty cool.
22:37 And I used to, I mean, when I say used to, I'm talking like 25 years ago, used this tool called Code Rush, which was amazing.
22:46 I've still not seen anything as great for an editor add-on as it did, even to this day.
22:52 So good.
22:53 One of the things it did, though, is it had maintenance complexity, cyclomatic complexity, and I don't know if it had this
22:58 cognitive, but it had like line count was an option.
23:01 And next to every, in your editor, next to every function or type in like a class or something, it would have the, you could choose, like, do you want the maintenance complexity or the cyclomatic complexity?
23:12 Just sort of ambiently by your things.
23:15 And you could be like, or you can run an analysis and say these are the seven that are like over some sort of threshold.
23:20 Like I don't want it over 75 for my maintenance complexity, whatever that means.
23:24 Yes.
23:24 If people know about that, extensions like that for PyCharm and other editors, you know, shoot us a, put a comment on the YouTube channel, on the YouTube video
23:33 or mention us somewhere, something like that.
23:36 I'll have to try it out because Complexify does have a VS Code extension.
23:40 I don't know how it looks though.
23:42 So we'll have to check it out.
23:43 Yeah.
23:43 Does that just output it in the terminal?
23:45 Yeah.
23:45 Or does it actually overlay it like CodeLens?
23:47 Yeah, it would be cool if it was an overlay.
23:51 Pat is spreading fake news.
23:52 Pat Decker, the audience who's been on the show, says, Michael volunteers to create a VS Code extension, is what I just heard.
24:00 We're going to edit that section out.
24:01 We'll just move right along here.
24:03 All right.
24:04 No, it's fun.
24:05 Okay.
24:06 I want to talk more data science stuff.
24:09 Let's talk Juvio, J-U-V-I-O.
24:13 I don't know. How would you say it, Brian? Every one of these needs like a little, how do I pronounce this button? Juvio. Is it Spanish? I don't know. So Juvio is a reproducible dependency aware, get friendly Jupyter notebook. All that sounds interesting. And there's a lot of things that say that, but what is, for me, what is, how's it, how do I think of this? And it is in the name.
24:33 It's a Jupyter notebook sort of environment that is based on uv. So one of the things I find super clunky about Jupyter Notebooks and JupyterLab and Jupyter is you can create a virtual environment, you can install Jupyter in it, you run it, and then you have to somehow go and independently outside of Jupyter register your kernel to find that virtual environment so then you can use that thing. It's just like, what? Okay, so Juvio allows you to basically run commands in your notebook to install things, right? You can actually use the script thing from uv where you say script, requires this version of Python, these versions of the dependencies.
25:13 And then when you open it up, Juvio installs the dependencies automatically in an ephemeral virtual environment using uv.
25:20 All of that I'm loving.
25:21 How cool is that?
25:22 So you just put in, you know, this is what this notebook depends upon, even the version of Python.
25:27 And if that version of Python is not on your machine, uv will download it and then create a virtual environment for you.
25:33 That is awesome.
25:34 That is awesome.
25:35 Yeah.
25:35 It's also Git-friendly.
25:38 So notebooks are converted on the fly to script style format, which is where you have the hash, then percent, percent.
25:45 So if you open it up in like PyCharm or VS Code, it has like cell type behavior.
25:49 This one is for the Brave.
25:51 It is an early beta.
25:52 It's better than early alpha, I suppose, but an early beta.
25:55 So check it out.
25:56 Yeah, pretty nice.
25:58 You can enable it as a extension is how you basically set it up.
26:02 That reminds me like a little bit of a tangent, But you know that with uv, you can put those little script things at the top of your file to do your dependencies just in the file?
26:13 Yeah, that's the same thing here, by the way.
26:15 Yeah, I've just realized I've been going through using some of the stuff that I've built over the last many years at work.
26:24 And some of the stuff, they had been little tiny little packages.
26:29 And I realized that they don't need to be packages with this.
26:32 They just have a couple dependencies in a single file script.
26:35 And now they're back to just single file scripts again.
26:38 That's cool.
26:39 It's awesome.
26:40 You just say uv run the script and it looks at that and says, all right, what do we need?
26:43 Do we need Python?
26:44 What version of Python?
26:45 What dependencies?
26:46 And once it's cached that stuff once, right, once uv has cached that once, it's basically instant.
26:51 Yeah, it's cool.
26:52 Yeah.
26:52 Yeah.
26:53 Super cool.
26:53 So yeah, that's pretty much it.
26:56 If that sounds interesting to you, check it out.
26:58 Let us know what you think.
26:59 but somehow making Jupyter Notebooks work automatically with ephemeral environments in Pythons managed by uv speaks to me. I like it.
27:09 Oh, and Pat Decker suggests again alias py equals uv run. Perfect.
27:15 So you can just pi.
27:17 Doesn't work on Windows because there's already a pi, but alias itself doesn't work. So you know what?
27:20 You have to create a batch file or something. I don't know.
27:23 I guess. I've been using batch on Windows for decades, but you are such a
27:28 rebel.
27:31 so one quick extra for me is that testing code is not dead but it looks like it so testing code the last episode of it came out may 7th and checks calendar it's june 23rd what's up there what's up is kind of some life there's a lot going on outside of my day job and python bytes that is pushing this out.
27:55 But I have some great interviews already ready.
27:59 They just need edited.
28:01 So stay tuned.
28:02 There will be great stuff out.
28:04 I just interviewed Sebastian Ramirez recently, and there's some great interviews coming up.
28:10 So stick with it.
28:13 Be patient with me, please.
28:16 Anyway, we'll be back.
28:18 But I never let Python Bytes drop.
28:20 It's weekly, no matter what, because of Michael.
28:23 Python Bytes is awesome.
28:24 Yeah.
28:25 Do you have any extras?
28:27 I thought no, but I just realized I'll throw something out there.
28:29 Okay.
28:29 So later this week up in Washington, almost in Canada, there's the largest off-road motorcycle rally in North America, I believe.
28:38 The Tour Tech Rally, which is like 1,500 people going to this campground and doing like joint rides and stuff.
28:44 I'm going to be there from Thursday to Sunday.
28:46 If people are there, shoot me a text.
28:48 Come say hi or go riding together or something like that.
28:51 All right.
28:51 It's in Plain, Washington?
28:53 It's not fancy in Washington?
28:54 No, this is like basic camping.
28:57 Well, can you put it on your motorcycle and then camp from there for four days?
29:00 Okay.
29:00 It's going to be very plain.
29:01 It's actually right by Leavenworth, which I think is kind of a cool place.
29:04 Cool.
29:04 Oh, yeah.
29:05 That's it for my extra.
29:07 So shall we do a trio of jokes?
29:10 Sure.
29:10 All right.
29:11 So someone sent this in, and I'm so sorry I forgot who sent it in, but I found it in multiple places, and it was really great that they did.
29:19 Programmers are human.
29:20 I think we've covered stuff from him before.
29:22 This amazing German guy who does really good jokes.
29:26 Like I think we talked about the vibe coding one one time.
29:28 Yeah.
29:29 Remember that?
29:29 Senior engineer tried vibe coding.
29:31 That was so good.
29:32 So he's back with the interview with the 0.1x.
29:36 People heard the 10x engineer.
29:38 Like the 0.1x engineer.
29:40 Full.
29:40 I found the full episode.
29:43 The 10th.
29:43 What do you think of it?
29:44 This was hilarious.
29:45 I immediately, as soon as I watched this, I texted you also and said, have you seen this?
29:51 Like, yeah, I watched it half an hour ago.
29:53 It's so good.
29:53 Yeah.
29:54 We're not going to play it because I don't know.
29:56 Like, it's someone else's YouTube work.
29:59 We'll let them have it.
30:00 But it is so good.
30:02 It is certainly five minutes of time well spent.
30:05 So we'll link to the YouTube video.
30:06 It's got awesome comments like, yeah, the last stable release.
30:10 Yeah, yeah.
30:10 That was before I joined the company, wasn't it?
30:12 And stuff like that.
30:14 Or my job at the company is to optimize the file size of the readme.
30:21 Yeah. Yeah. Or there's some, I've forgotten a lot of them, but there's some really good, good, good one
30:27 -liners to.
30:28 You want some sweet one-liners? Yeah, here we go.
30:31 This is it. And totally unrelated. I have two more, not, not related to this, but I think Python relevant is Google came out with VO3, which is a, a way to make full film AI content, not just images, but it's images, voice, movie.
30:50 it's insane. And so I've stumbled across this. Now, before you, before you click on this and before you visit it, I must warn you, this is like kryptonite to your YouTube feed. So if you watch this, it will take days to get anything normal on your YouTube feed again. I don't know why do it in incognito. Just trust me. Don't make the mistake me and my daughter made. She's like, dad, I got it. Literally got a text. Dad, you've destroyed my YouTube feed.
31:14 So there's a couple of video, a couple of channels, and there's like multiple ones of these, But I'll link to a couple that are really good.
31:22 There's a Bigfoot and a Yeti channel.
31:25 And all these are like vlogs, like in the day of the life of Bigfoot and so on.
31:31 And oh my goodness, is this so funny.
31:35 And it is incredibly good.
31:36 So you can only make eight second clips, right, with this video thing?
31:40 So what they do is they just make clip after clip after clip as like little segments in like the vlog of the life.
31:46 If you haven't seen this, I think you'll be surprised.
31:48 If you, there's the Yeti Bigfoot one, which is real good.
31:51 And then there's also the day in the life of a storm trooper, adventures of Dave and Greg.
31:55 These, these are so funny and you know, they're made with Python somewhere along the way because of all the AI stuff and the VO and whatnot.
32:04 But just remember incognito or you don't blame me.
32:10 Yeah.
32:10 I'll probably just use the Python bytes account.
32:13 Yeah, exactly.
32:13 Yeah.
32:13 Please.
32:14 We'll have nothing.
32:16 I love nothing but these things in there.
32:18 Now, it's really funny, and it's just one more AI thing in this world that we live in that is just a weird time.
32:23 But it's super creative, too.
32:25 Like, people really are being creative with it.
32:27 Okay.
32:28 And I got to just say that, like, you know, wherever you stand on AI, stuff like being able to make movies around with, like, Stormtrooper costumes and stuff, that is out of the realm of most people's
32:40 budget.
32:42 But the ability, I'm sure it's fairly time-consuming to put these things together.
32:47 But now it is in the realm of somebody that just has some good writing, some good sense of humor to be able to put
32:54 these things together.
32:56 So that's good.
32:57 Yeah, there's definitely good writing here.
32:59 You've got to do the script and stuff.
33:00 But comments are like, this is better content than Disney has done in the last few years.
33:04 It's really funny.
33:06 So, I mean, it's surprisingly well done.
33:09 And the AI is, you know, we live in weird times, Ryan.
33:12 That's all I can say.
33:12 Well, in eight-second clips, I mean, pay attention to the last action movie you've watched that doesn't stick with the same camera angle for more than a few seconds anyway.
33:22 Yeah, yeah.
33:23 It doesn't seem that out of place.
33:24 All right.
33:25 There's your jokes.
33:26 Seriously, relevant joke.
33:27 Check out the 0.1x engineer.
33:29 That's amazing.
33:30 Yeah, definitely.
33:31 Over lunch, maybe grab the logs.
33:35 I'm really warning you, don't do it on your regular account.
33:39 yeah all right well that's it for today a wonderful episode with you again michael thank you yes thank you as well and
33:48 before we sign out this is not something we've been doing lately brian but maybe we should more it's like i just want to encourage people who are watching the youtube channel here either live or in in the future at some point you know please subscribe to channel like the video and help us spread the word yeah
34:03 i guess we don't we don't like do call to action too much but uh like the videos that would be great but i also um uh we can grow the podcast more share it with a friend if you've got some new interns starting say hey you should keep up on python much more you should check out this podcast it's staying up on python in easy mode you got a car rider you're mowing the lawn you're doing the dishes hit play it's all
34:25 good get to later bye