#481: Ways to die
About the show
Sponsored by us! Support our work through:
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 11am 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: Dumb Ways for an Open Source Project to Die
- Core categories
- The maintainer left
- The maintainer is still there
- Sabotage and capture
- The release pipeline broke
- Force majeure
- The world moved on
- The project split -
- Examples
Brian #2: How to create a pylock.toml lockfile
- Tim Hopper
- Tim walks through using
uv,pipandpdmto createpylock.tomlfiles. - Recommendation: use
uv export --format pylock.toml -o pylock.toml - He also has How to install from a pylock.toml lockfile with pip but the short version is:
- use
-rbecause tools treat it like a requirements file
- use
Michael #3: https://github.com/facebook/Lifeguard
- Lifeguard is a static analyzer to detect Lazy Imports incompatibilities and ease the adoption overhead for Lazy Imports in Python.
- I’m more excited about lazy imports after my Cutting Python Web App Memory Over 31% experience
- Some Python patterns depend on imports executing immediately. For example:
- Module-level side effects — a module that registers a handler or modifies global state at import time will behave differently if that import is deferred.
- The registry pattern — a module that registers itself (e.g., adding to a global dict) when imported will silently fail to register under Lazy Imports.
sys.modulesmanipulation — code that reads or writessys.modulesassumes prior imports have already executed.- Metaclasses and
__init_subclass__— class creation side effects may depend on imports being resolved.
- Project Stage: Beta Lifeguard is in active development. We are aiming to be ready for general use by the Python 3.15 final release.
Brian #4: Choosing a Python Logging Library in 2026
- Ayooluwa Isaiah
- " which libraries matter, how they compare, where they overlap with the standard module, and when each one makes sense.”
- The slant with this article is the need to log json output, which seems reasonable as things like API entry and exit point logging will include json.
- Covered libraries
- standard library
loggingwith a hat tip to python-json-logger- Same site has a guide to setting up python-json-logger
- structlog
- Loguru
- Logbook
- picologging
- standard library
- Some benchmarks with structlog, stdlib+json, and Loguru, with structlog coming out faster
- I liked the Loguru example
- I’m going to have to try
@logger.catchandlogger.exception()for easily logging exceptions andserialize=Trueto enable JSON output.
- I’m going to have to try
Extras
Brian:
- When Women Stopped Coding - Planet Money segment , spotted on BlueSky from Savannah Ostrowski
- Lean TDD is now leaner
- Still working on audio version, but some great changes in 0.7.1 version
- Ch 6, TDD Interpretations, move ATDD and some of BDD to chapter
- Ch 7, Change name to TDD with Teams: BDD and ATDD
- Ch 9, Lean TDD, streamline steps and chapter
- Ch 10, Change name to Lean TDD with Teams: Lean ATDD
- Ch 11, Lean TDD with AI, Add short discussion about guardrails and security
- Still working on audio version, but some great changes in 0.7.1 version
Michael:
- New course: Python Web Security: OWASP Top 10 with Agentic AI
- All courses now with Spanish subtitles, see announcement
Joke: Stop texting me
Episode Transcript
Collapse transcript
00:00
00:05
00:09
00:13
00:14
00:15
00:20
00:26
00:30
00:34
00:34
00:38
00:40
00:44
00:46
00:48
00:52
01:03
01:08
01:15
01:20
01:24
01:31
01:37
01:41
01:43
01:45
01:46
01:48
01:50
01:51
01:52
01:55
01:56
02:02
02:07
02:10
02:15
02:19
02:22
02:26
02:29
02:31
02:33
02:36
02:39
02:41
02:43
02:47
02:50
02:53
02:55
02:56
03:01
03:04
03:09
03:14
03:16
03:19
03:20
03:21
03:23
03:24
03:27
03:28
03:31
03:34
03:36
03:37
03:39
03:40
03:40
03:42
03:44
03:48
03:49
03:50
03:52
03:57
03:59
04:01
04:06
04:09
04:10
04:12
04:15
04:17
04:21
04:29
04:32
04:36
04:39
04:40
04:42
04:44
04:46
04:49
04:51
04:57
05:00
05:01
05:04
05:06
05:10
05:14
05:16
05:19
05:20
05:23
05:24
05:27
05:27
05:30
05:32
05:34
05:38
05:40
05:41
05:44
05:49
05:53
05:55
05:57
06:00
06:03
06:04
06:06
06:09
06:11
06:12
06:12
06:13
06:15
06:19
06:20
06:21
06:23
06:24
06:29
06:31
06:32
06:33
06:34
06:34
06:36
06:40
06:53
06:57
06:59
07:03
07:07
07:11
07:14
07:18
07:20
07:21
07:23
07:26
07:29
07:31
07:33
07:34
07:39
07:44
07:48
07:53
07:57
07:58
07:59
08:03
08:05
08:06
08:08
08:11
08:14
08:16
08:16
08:17
08:18
08:22
08:25
08:27
08:29
08:34
08:35
08:43
08:47
08:48
08:51
08:52
08:54
08:59
09:00
09:03
09:04
09:06
09:08
09:12
09:17
09:20
09:22
09:23
09:25
09:27
09:30
09:32
09:34
09:36
09:37
09:39
09:41
09:44
09:47
09:49
09:53
09:57
10:04
10:05
10:06
10:08
10:10
10:15
10:16
10:18
10:21
10:27
10:31
10:36
10:37
10:38
10:39
10:46
10:50
10:51
10:52
10:56
10:57
11:00
11:01
11:05
11:06
11:07
11:09
11:10
11:11
11:12
11:14
11:16
11:18
11:19
11:26
11:29
11:31
11:34
11:37
11:41
11:42
11:48
11:49
11:52
11:53
11:55
12:00
12:01
12:04
12:07
12:08
12:10
12:11
12:15
12:21
12:26
12:31
12:38
12:43
12:45
12:49
12:49
12:51
12:52
12:56
12:58
13:00
13:01
13:05
13:10
13:11
13:11
13:15
13:21
13:26
13:31
13:40
13:47
13:53
13:59
14:05
14:10
14:15
14:19
14:22
14:27
14:34
14:39
14:45
14:50
14:51
14:52
14:53
14:57
15:00
15:01
15:09
15:14
15:17
15:20
15:21
15:25
15:27
15:32
15:37
15:38
15:41
15:43
15:46
15:50
15:54
15:57
16:01
16:02
16:06
16:08
16:09
16:12
16:15
16:17
16:17
16:20
16:22
16:24
16:27
16:29
16:32
16:33
16:35
16:40
16:46
16:51
16:55
16:58
17:03
17:04
17:05
17:06
17:08
17:15
17:16
17:21
17:22
17:23
17:25
17:30
17:31
17:32
17:32
17:36
17:37
17:41
17:49
17:51
17:52
17:56
17:59
18:06
18:09
18:15
18:19
18:20
18:20
18:23
18:24
18:26
18:28
18:32
18:36
18:43
18:45
18:46
18:47
18:48
18:50
18:54
18:59
19:01
19:05
19:12
19:17
19:24
19:30
19:32
19:37
19:40
19:41
19:46
19:48
19:55
19:57
20:00
20:09
20:17
20:21
20:24
20:28
20:33
20:35
20:41
20:42
20:46
20:47
20:49
20:52
20:55
20:56
20:57
21:02
21:02
21:03
21:07
21:10
21:15
21:16
21:22
21:26
21:30
21:32
21:35
21:40
21:42
21:44
21:48
21:51
21:53
21:58
22:00
22:03
22:09
22:13
22:19
22:20
22:23
22:24
22:25
22:27
22:30
22:34
22:37
22:41
22:44
22:45
22:48
22:49
22:50
22:52
22:53
22:54
22:57
23:03
23:04
23:07
23:09
23:16
23:18
23:21
23:21
23:22
23:26
23:27
23:28
23:31
23:32
23:33
23:35
23:37
23:41
23:42
23:47
23:49
23:52
23:57
24:02
24:08
24:12
24:12
24:19
24:19
24:21
24:27
24:28
24:31
24:34
24:35
24:37
24:39
24:42
24:44
24:49
24:53
24:57
25:03
25:05
25:08
25:13
25:14
25:21
25:28
25:30
25:32
25:35
25:40
25:41
25:43
25:44
25:45
25:45
25:46
25:47
25:55
26:01
26:03
26:04
26:07
26:11
26:14
26:19
26:22
26:27
26:33
26:35
26:36
26:45
26:47
26:53
26:55
26:58
27:09
27:16
27:23
27:25
27:29
27:31
27:36
27:43
27:50
27:51
27:54
28:03
28:07
28:09
28:14
28:16
28:18
28:20
28:23
28:24
28:26
28:32
28:34
28:39
28:46
28:52
28:58
29:03
29:08
29:10
29:14
29:14
29:15
29:23
29:26
29:26
29:31
29:34
29:34
29:38
29:38
29:40
29:42
29:47
29:53
29:55
29:57
30:06
30:11
30:16
30:23
30:30
30:34
30:36
30:40
30:43
30:46
30:52
30:56
31:00
31:05
31:10
31:11
31:13
31:15
31:17
31:18
31:20
31:22
31:23
31:24
31:25
31:27
31:31
31:33
31:34
31:40
31:49
31:55
32:00
32:07
32:14
32:18
32:24
32:29
32:31
32:32
32:33
32:35
32:39
32:42
32:42
32:50
32:52
32:55
32:59 Exactly.
33:00 There's no guarantees there.
33:01 Yeah.
33:02 But anyway, as always, it's fun.
33:06 And we'll talk to you later.
33:08 Yep.
33:08 Thanks.
33:09 Bye.



