エピソード

  • #441 It's Michaels All the Way Down
    2025/07/21
    Topics covered in this episode: * Distributed sqlite follow up: Turso and Litestream** PEP 792 – Project status markers in the simple index*Run coverage on testsdocker2exe: Convert a Docker image to an executableExtrasJokeWatch on YouTube About the show Sponsored by Digital Ocean: pythonbytes.fm/digitalocean-gen-ai Use code DO4BYTES and get $200 in free credit Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky)Brian: @brianokken@fosstodon.org / @brianokken.bsky.socialShow: @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: Distributed sqlite follow up: Turso and Litestream Michael Booth: Turso marries the familiarity and simplicity of SQLite with modern, scalable, and distributed features.Seems to me that Turso is to SQLite what MotherDuck is to DuckDB.Mike Fiedler Continue to use the SQLite you love and care about (even the one inside Python runtime) and launch a daemon that watches the db for changes and replicates changes to an S3-type object store.Deeper dive: Litestream: Revamped Brian #2: PEP 792 – Project status markers in the simple index Currently 3 status markers for packages Trove Classifier statusIndices can be yankedPyPI projects - admins can quarantine a project, owners can archive a projectProposal is to have something that can have only one state activearchivedquarantineddeprecatedThis has been Approved, but not Implemented yet. Brian #3: Run coverage on tests Hugo van KemenadeAnd apparently, run Ruff with at least F811 turned onHelps with copy/paste/modify mistakes, but also subtler bugs like consumed generators being reused. Michael #4: docker2exe: Convert a Docker image to an executable This tool can be used to convert a Docker image to an executable that you can send to your friends.Build with a simple command: $ docker2exe --name alpine --image alpine:3.9Requires docker on the client deviceProbably doesn’t map volumes/ports/etc, though could potentially be exposed in the dockerfile. Extras Brian: Back catalog of Test & Code is now on YouTube under @TestAndCodePodcast So far 106 of 234 episodes are up. The rest are going up according to daily limits.Ordering is rather chaotic, according to upload time, not release ordering.There will be a new episode this week pytest-django with Adam Johnson Joke: If programmers were doctors
    続きを読む 一部表示
    28 分
  • #440 Can't Register for VibeCon
    2025/07/15
    Topics covered in this episode: * Switching to direnv, Starship, and uv** rqlite - Distributed SQLite DB** Some Markdown Stuff*ExtrasJokeWatch on YouTube About the show Sponsored by PropelAuth: pythonbytes.fm/propelauth77 Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky)Brian: @brianokken@fosstodon.org / @brianokken.bsky.socialShow: @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. Brian #1: Switching to direnv, Starship, and uv Last week I mentioned that I’m ready to try direnv again, but secretly, I still had some worries about the process. Thankfully, Trey has a tutorial to walk me past the troublesome parts.direnv - an extension for your shell. It augments existing shells with a new feature that can load and unload environment variables depending on the current directory.Switching from virtualenvwrapper to direnv, Starship, and uv - Trey Hunner** Trey has solved a bunch of the problems I had when I tried direnv before Show the virtual environment name in the promptPlace new virtual environments in local .venv instead of in .direnv/python3.12Silence all of the “loading”, “unloading” statements every time you enter a directoryHave a script called venv to create an environment, activate it, create a .envrc file I’m more used to a create script, so I’ll stick with that name and Trey’s contentsA workon script to be able to switch around to different projects. This is a carry over from “virtualenvwrapper’, but seems cool. I’ll take it.Adding uv to the mix for creating virtual environments. Interestingly including --seed which, for one, installs pip in the new environment. (Some tools need it, even if you don’t)Starship Trey also has some setup for Starship. But I’ll get through the above first, then MAYBE try Starship again.Some motivation Trey’s setup is pretty simple. Maybe I was trying to get too fancy beforeStarship config in toml files that can be loaded with direnv and be different for different projects. NeatoAlso, Trey mentions his dotfiles repo. This is a cool idea that I’ve been meaning to do for a long time.See also: It's Terminal - Bootstrapping With Starship, Just, Direnv, and UV - Mario Munoz Michael #2: rqlite - Distributed SQLite DB via themlu, thanks!rqlite is a lightweight, user-friendly, distributed relational database built on SQLite.Built on SQLite, the world’s most popular databaseSupports full-text search, Vector Search, and JSON documentsAccess controls and encryption for secure deployments Michael #3: A Python dict that can report which keys you did not use by Peter BengtssonVery cool for testing that a dictionary has been used as expected (e.g. all data has been sent out via an API or report).Note: It does NOT track d.get(), but it’s easy to just add it to the class in the post.Maybe someone should polish it up and put it on pypi (that person is not me :) ). Brian #4: Some Markdown Stuff Textual 4.0.0 adds Markdown.append which can be used to efficiently stream markdown content The reason for the major bump is due to an interface change to Widget.anchorRefreshing to see a symantic change cause a major version bump.html-to-markdown Converts html to markdownA complete rewrite fork of markdownifyLots of fun features like “streaming support” Curious if it can stream to Textual’s Markdown.append method. hmmm. Joke: Vibecon is hard to attend
    続きを読む 一部表示
    25 分
  • #439 That Astral Episode
    2025/07/07
    Topics covered in this episode: * ty documentation site and uv migration guide** uv build backend is now stable + other Astral news** Refactoring long boolean expressions** fastapi-ml-skeleton*ExtrasJokeWatch on YouTube About the show Sponsored by Sentry: pythonbytes.fm/sentry Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky)Brian: @brianokken@fosstodon.org / @brianokken.bsky.socialShow: @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: ty documentation site and uv migration guide via Skyler KaskoAstral created a documentation site for ty (PR #744 in release 0.0.1-alpha.13).Astral added a page on migrating from pip to a uv project in the uv documentation. (PR #12382 in release 0.7.19).Talk Python episode on ty. Brian #2: uv build backend is now stable + other Astral news The uv build backend is now stable Tim Hopper via Python Developer Tooling HandbookFrom Charlie Marsh “The uv build backend is now stable, and considered ready for production use. An alternative to setuptools, hatchling, etc. for pure Python projects, with a focus on good defaults, user-friendly error messages, and performance. When used with uv, it's 10-35x faster.”“(In a future release, we'll make this the default.)” [build-system] requires = ["uv_build>=0.7.19,<0.8.0"] build-backend = "uv_build" I believe it’s faster, but I agree with Brett Cannon in asking “What's being benchmarked? I'm not sure what a "backend sync" is referring to other than maybe installing the build back-end?”See also: uv: Making Python Local Workflows FAST and BORING in 2025 - Hynek Brian #3: Refactoring long boolean expressions Trey HunnerThis is applied boolean logic, and even folks who learned this in a CS program probably did so early on, and may have forgotten it.How can you improve the readability of long Boolean expressions in Python? Put parens around the whole expression and separate clauses onto different linesWhere to put boolean operators between clauses? at the end of the line or the beginning? PEP8 recommends the beginning if (expression1 and expression2 and expression3): ... Naming sub-expressions with variables Odd downside that wouldn’t occur to me. All expressions are evaluated, thus not taking advantage of expression short-circuiting.Naming operations with functions Less readable, but takes advantage of short-circuitingUsing De Morgan’s Law : replacing a compound expression with a similar (and hopefully easier to read) expression # neither: we want both to be false not (a or b) == (not a) and (not b) # never_both: at least one false not (a and b) == (not a) or (not b) Michael #4: fastapi-ml-skeleton FastAPI Skeleton App to serve machine learning models production-ready.This repository contains a skeleton app which can be used to speed-up your next machine learning project.The code is fully tested and provides a preconfigured tox to quickly expand this sample code.A sample regression model for house price prediction is included in this project.Short write up on "What does set -a do?" Extras Brian: OCF Michael: via Wei LeeExtra Airflow ruff rules: Starting from Ruff version 0.11.13, most changes from Airflow 2 to Airflow 3 can be automated using AIR3. (It’s still in preview so a “—-preview” flag is needed) e.g., if you have the following Airflow 2 code import datetime from airflow.models import DAG from airflow.operators.empty import EmptyOperator with DAG( dag_id="my_dag_name", start_date=datetime.datetime(2021, 1, 1), schedule_interval="@daily", ): EmptyOperator(task_id="task") it can be fixed with uvx ruff check --select AIR3 --fix --unsafe-fixes --preview import datetime from airflow.sdk import DAG from airflow.providers.standard.operators.empty import EmptyOperator with DAG( dag_id="my_dag_name", start_date=datetime.datetime(2021, 1, 1), schedule="@daily", ): EmptyOperator(task_id="task") which works with Airflow 3. Joke: Front Toward Enemy
    続きを読む 一部表示
    27 分
  • #438 Motivation time
    2025/06/30
    Topics covered in this episode: * Python Cheat Sheets from Trey Hunner** Automatisch** mureq-typed** My CLI World*ExtrasJokeWatch on YouTube 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.socialShow: @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. Brian #1: Python Cheat Sheets from Trey Hunner Some fun sheets Python f-string tips & cheat sheetsPython's pathlib modulePython's many command-line utilities Michael #2: Automatisch Open source Zapier alternativeAutomatisch helps you to automate your business processes without coding.Use their affordable cloud solution or self-host on your own servers.Automatisch allows you to store your data on your own servers, good for companies dealing with sensitive user data, particularly in industries like healthcare and finance, or those based in Europe bound by General Data Protection Regulation (GDPR). Michael #3: mureq-typed Single file, zero-dependency alternative to requests. Fully typed. Modern Python tooling.Typed version of mureq (covered in 2022 on episode 268)Intended to be vendored in-tree by Linux systems software and other lightweight applications.mureq-typed is a drop-in, fully API compatible replacement for mureq updated with modern Python tooling:Type checked with mypy, ty, and pyrefly.Formatted with black, no ignore rules necessary.Linted with ruff (add these rules for mureq.py to your per-file-ignores). Brian #4: My CLI World Frank WilesEncouragement to modify your command line environmentSome of Franks tools direnv, zoxide, fd, ack, atuin, justAlso some aliases, like gitpulllogNotes We covered poethepoet recently, if just just isn’t cutting it for you.I tried to ilke starship, bit for some reason with my setup, it slows down the shell too much. Extras Brian: Interesting read of the week: New theory proposes time has three dimensions, with space as a secondary effectMichael's: New quantum theory of gravity brings long-sought 'theory of everything' a crucial step closer Joke: Brian read a few quotes from the book Disappointing Affirmations, by Dave Tarnowski “You are always just a moment away from your next worst day ever. Or your next best day ever, but let’s be realistic.”“You can be anything you want. And yet you keep choosing to be you. I admire your dedication to the role.”“Today I am letting go of the things that are holding me back from the life that I want to live. Then I’m picking them all up again because I have separation anxiety.”
    続きを読む 一部表示
    33 分
  • #437 Python Language Summit 2025 Highlights
    2025/06/23
    Topics covered in this episode: * The Python Language Summit 2025*Fixing Python Properties* complexipy** juvio*ExtrasJokeWatch on YouTube 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.socialShow: @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 LarsonHow can we make breaking changes less painful?: talk by Itamar OrenAn Uncontentious Talk about Contention: talk by Mark ShannonState of Free-Threaded Python: talk by Matt PageFearless Concurrency: talk by Matthew Parkinson, Tobias Wrigstad, and Fridtjof StoldtChallenges of the Steering Council: talk by Eric SnowUpdates from the Python Docs Editorial Board: talk by MariattaPEP 772 - Packaging Governance Process: talk by Barry Warsaw and Pradyun GedamPython on Mobile - Next Steps: talk by Russell Keith-MageeWhat do Python core developers want from Rust?: talk by David HewittUpstreaming the Pyodide JS FFI: talk by Hood ChathamLightning 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 SonarCognitive 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 C901But 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 painlessWhy Use Juvio? No additional lock or requirements files are neededGuaranteed reproducibilityCleaner Git diffsPowered 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ázsAlso StormTrooper vlogBIGFOOT VLOG - ATTACKED BY WENDIGO!
    続きを読む 一部表示
    34 分
  • #436 Slow tests go last
    2025/06/16
    Topics covered in this episode: * Free-threaded Python no longer “experimental” as of Python 3.14*typed-ffmpegpyleak* Optimizing Test Execution: Running live_server Tests Last with pytest*ExtrasJokeWatch on YouTube About the show Sponsored by PropelAuth: pythonbytes.fm/propelauth66 Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky)Brian: @brianokken@fosstodon.org / @brianokken.bsky.socialShow: @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. Brian #1: Free-threaded Python no longer “experimental” as of Python 3.14 “PEP 779 ("Criteria for supported status for free-threaded Python") has been accepted, which means free-threaded Python is now a supported build!” - Hugo van KemenadePEP 779 – Criteria for supported status for free-threaded PythonAs noted in the discussion of PEP 779, “The Steering Council (SC) approves PEP 779, with the effect of removing the “experimental” tag from the free-threaded build of Python 3.14.”We are in Phase II then.“We are confident that the project is on the right path, and we appreciate the continued dedication from everyone working to make free-threading ready for broader adoption across the Python community.”“Keep in mind that any decision to transition to Phase III, with free-threading as the default or sole build of Python is still undecided, and dependent on many factors both within CPython itself and the community. We leave that decision for the future.”How long will all this take? According to Thomas Wouters, a few years, at least: “In other words: it'll be a few years at least. It can't happen before 3.16 (because we won't have Stable ABI support until 15) and may well take longer.” Michael #2: typed-ffmpeg typed-ffmpeg offers a modern, Pythonic interface to FFmpeg, providing extensive support for complex filters with detailed typing and documentation.Inspired by ffmpeg-python, this package enhances functionality by addressing common limitations, such as lack of IDE integration and comprehensive typing, while also introducing new features like JSON serialization of filter graphs and automatic FFmpeg validation.Features : Zero Dependencies: Built purely with the Python standard library, ensuring maximum compatibility and security.User-Friendly: Simplifies the construction of filter graphs with an intuitive Pythonic interface.Comprehensive FFmpeg Filter Support: Out-of-the-box support for most FFmpeg filters, with IDE auto-completion.Integrated Documentation: In-line docstrings provide immediate reference for filter usage, reducing the need to consult external documentation.Robust Typing: Offers static and dynamic type checking, enhancing code reliability and development experience.Filter Graph Serialization: Enables saving and reloading of filter graphs in JSON format for ease of use and repeatability.Graph Visualization: Leverages graphviz for visual representation, aiding in understanding and debugging.Validation and Auto-correction: Assists in identifying and fixing errors within filter graphs.Input and Output Options Support: Provide a more comprehensive interface for input and output options, including support for additional codecs and formats.Partial Evaluation: Enhance the flexibility of filter graphs by enabling partial evaluation, allowing for modular construction and reuse.Media File Analysis: Built-in support for analyzing media files using FFmpeg's ffprobe utility, providing detailed metadata extraction with both dictionary and dataclass interfaces. Michael #3: pyleak Detect leaked asyncio tasks, threads, and event loop blocking with stack trace in Python. Inspired by goleak.Use as context managers or function dectoratorsWhen using no_task_leaks, you get detailed stack trace information showing exactly where leaked tasks are executing and where they were created.Even has great examples and a pytest plugin. Brian #4: Optimizing Test Execution: Running live_server Tests Last with pytest Tim Kamanin“When working with Django applications, it's common to have a mix of fast unit tests and slower end-to-end (E2E) tests that use pytest's live_server fixture and browser automation tools like Playwright or Selenium. ”Tim is running E2E tests last for Faster feedback from quick testsTo not tie up resources early in the test suite.He did this with custom “e2e” markerImplementing a pytest_collection_modifyitems hook function to look for tests using the live_server fixture, and for them automatically add the e2e marker to those testsmove those tests to the endThe reason for the marker is to be able to Just run e2e tests with -m e2eAvoid running them sometimes with -m "not ...
    続きを読む 一部表示
    37 分
  • #435 Stop with .folders in my ~/
    2025/06/09
    Topics covered in this episode: platformdirspoethepoet - “Poe the Poet is a batteries included task runner that works well with poetry or with uv.”Python Pandas Ditches NumPy for Speedier PyArrowpointblank: Data validation made beautiful and powerfulExtrasJokeWatch on YouTube About the show Sponsored by us! Support our work through: Our courses at Talk Python TrainingThe Complete pytest CoursePatreon Supporters Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky)Brian: @brianokken@fosstodon.org / @brianokken.bsky.socialShow: @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: platformdirs A small Python module for determining appropriate platform-specific dirs, e.g. a "user data dir".Why the community moved on from appdirs to platformdirsAt AppDirs: Note: This project has been officially deprecated. You may want to check out pypi.org/project/platformdirs/ which is a more active fork of appdirs. Thanks to everyone who has used appdirs. Shout out to ActiveState for the time they gave their employees to work on this over the years.Better than AppDirs: Works today, works tomorrow – new Python releases sometimes change low-level APIs (win32com, pathlib, Apple sandbox rules). platformdirs tracks those changes so your code keeps running.First-class typing – no more types-appdirs stubs; editors autocomplete paths as Path objects.Richer directory set – if you need a user’s Downloads folder or a per-session runtime dir, there’s a helper for it.Cleaner internals – rewritten to use pathlib, caching, and extensive test coverage; all platforms are exercised in CI.Community stewardship – the project lives in the PyPA orbit and gets security/compatibility patches quickly. Brian #2: poethepoet - “Poe the Poet is a batteries included task runner that works well with poetry or with uv.” from Bob BelderbosTasks are easy to define and are defined in pyproject.toml Michael #3: Python Pandas Ditches NumPy for Speedier PyArrow Pandas 3.0 will significantly boost performance by replacing NumPy with PyArrow as its default engine, enabling faster loading and reading of columnar data.Recently talked with Reuven Lerner about this on Talk Python too.In the next version, v3.0, PyArrow will be a required dependency, with pyarrow.string being the default type inferred for string data.PyArrow is 10 times faster.PyArrow offers columnar storage, which eliminates all that computational back and forth that comes with NumPy. PyArrow paves the way for running Pandas, by default, on Copy on Write mode, which improves memory and performance usage. Brian #4: pointblank: Data validation made beautiful and powerful “With its … chainable API, you can … validate your data against comprehensive quality checks …” Extras Brian: Ruff rulesRuff users, what rules are using and what are you ignoring?Python 3.14.0b2 - did we already cover this?Transferring your Mastodon account to another server, in case anyone was thinking about doing thatI’m trying out Fathom Analytics for privacy friendly analytics Michael: Polars for Power Users: Transform Your Data Analysis Game Course Joke: Does your dog bite?
    続きを読む 一部表示
    26 分
  • #434 Most of OpenAI’s tech stack runs on Python
    2025/06/02
    Topics covered in this episode: Making PyPI’s test suite 81% fasterPeople aren’t talking enough about how most of OpenAI’s tech stack runs on PythonPyCon Talks on YouTubeOptimizing Python Import PerformanceExtrasJokeWatch on YouTube About the show Sponsored by Digital Ocean: pythonbytes.fm/digitalocean-gen-ai Use code DO4BYTES and get $200 in free credit Connect with the hosts Michael: @mkennedy@fosstodon.org / @mkennedy.codes (bsky)Brian: @brianokken@fosstodon.org / @brianokken.bsky.socialShow: @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. Brian #1: Making PyPI’s test suite 81% faster Alexis ChallandeThe PyPI backend is a project called WarehouseIt’s tested with pytest, and it’s a large project, thousands of tests.Steps for speedup Parallelizing test execution with pytest-xdist 67% time reduction--numprocesses=auto allows for using all coresDB isolation - cool example of how to config postgress to give each test worker it’s on dbThey used pytest-sugar to help with visualization, as xdist defaults to quite terse outputUse Python 3.12’s sys.monitoring to speed up coverage instrumentation 53% time reductionNice example of using COVERAGE_CORE=sysmonOptimize test discovery Always use testpathsSped up collection time. 66% reduction (collection was 10% of time)Not a huge savings, but it’s 1 line of configEliminate unnecessary imports Use python -X importtimeExamine dependencies not used in testing.Their example: ddtrace A tool they use in production, but it also has a couple pytest plugins includedThose plugins caused ddtrace to get imported Using -p:no ddtrace turns off the plugin bitsNotes from Brian: I often get questions about if pytest is useful for large projects.Short answer: Yes!Longer answer: But you’ll probably want to speed it upI need to extend this article with a general purpose “speeding up pytest” post or series. -p:no can also be used to turn off any plugin, even builtin ones. Examples include nice to have developer focused pytest plugins that may not be necessary in CICI reporting plugins that aren’t needed by devs running tests locally Michael #2: People aren’t talking enough about how most of OpenAI’s tech stack runs on Python Original article: Building, launching, and scaling ChatGPT ImagesTech stack: The technology choices behind the product are surprisingly simple; dare I say, pragmatic! Python: most of the product’s code is written in this language.FastAPI: the Python framework used for building APIs quickly, using standard Python type hints. As the name suggests, FastAPI’s strength is that it takes less effort to create functional, production-ready APIs to be consumed by other services.C: for parts of the code that need to be highly optimized, the team uses the lower-level C programming languageTemporal: used for asynchronous workflows and operations inside OpenAI. Temporal is a neat workflow solution that makes multi-step workflows reliable even when individual steps crash, without much effort by developers. It’s particularly useful for longer-running workflows like image generation at scale Michael #3: PyCon Talks on YouTube Some talks that jumped out to me: Keynote by Cory Doctorow503 days working full-time on FOSS: lessons learnedGoing From Notebooks to Scalable Systems And my Talk Python conversation around it. (edited episode pending)Unlearning SQLThe Most Bizarre Software Bugs in History The PyArrow revolution in Pandas And my Talk Python episode about it.What they don't tell you about building a JIT compiler for CPython And my Talk Python conversation around it (edited episode pending)Design Pressure: The Invisible Hand That Shapes Your Code Marimo: A Notebook that "Compiles" Python for Reproducibility and Reusability And my Talk Python episode about it.GPU Programming in Pure Python And my Talk Python conversation around it (edited episode pending)Scaling the Mountain: A Framework for Tackling Large-Scale Tech Debt Brian #4: Optimizing Python Import Performance Mostly pay attention to #'s 1-3This is related to speeding up a test suite, speeding up necessary imports.Finding what’s slow Use python -X importtime Ex: python -X importtime ptyestTechniques Lazy imports move slow-to-import imports into functions/methodsAvoiding circular imports hopefully you’re doing that alreadyOptimize __init__.py files Avoid unnecessary imports, heavy computations, complex logicNotes from Brian Some questions remain open for me Does module aliasing really help much?This applies to testing in a big way Test collection imports your test suite, so anything imported at the top level of a file gets imported at test collection time, even if ...
    続きを読む 一部表示
    29 分