PyCon Portugal 2025

To see our schedule with full functionality, like timezone conversion and personal scheduling, please enable JavaScript and go here.
08:30
08:30
30min
Registration
Auditorium
09:00
09:00
15min
Welcome Session

Welcome Session

Auditorium
09:15
09:15
60min
From Lisbon to Space: Data Science at ExoPlanetary Scale with Python
Marília Felismino Simões, Nikki Grens

What does it mean to lead a boutique data science company in Portugal working with clients across the globe, including the European Space Agency? In this talk, we’ll share the journey of building a specialized team that operates in banking, telecom, pharma, and space, with a spotlight on one of our contributions to the European Space Agency’s ARIEL mission.

As part of this collaboration, we’ll showcase an interactive Streamlit app we developed as an educational tool to explore exoplanet data, from raw light curves to atmospheric spectra, and to experiment with machine learning models that estimate those spectra. This example illustrates how Python can power real-world scientific collaboration and make complex space science accessible, explainable, and interactive.

Auditorium
10:40
10:40
30min
An A11y for better SEO
Sandro Costa

As applications grow increasingly complex and AI transforms development practices, accessibility has never been more critical. Making your digital products work for people with disabilities doesn't just promote inclusion—it directly improves your SEO performance. This presentation explores the powerful correlation between accessibility and search rankings, providing practical strategies to leverage this relationship for enhanced user experiences and outcomes.

Auditorium
11:10
11:10
30min
Coffee Break
Auditorium
11:40
11:40
30min
Unifying Data Management in Python with Ibis
Daniel Mesejo

Discover how Ibis provides a single DataFrame API across pandas, DuckDB, and SQL databases, bridging the gap between data science prototypes and production code.

Auditorium
12:10
12:10
30min
Property-based testing the Python way
Emma Saroyan

What if I told you that you could write simpler tests but get better results?

What if I told you can automatically generate your test data?

This may sound difficult to your traditional testing approach but can be easily done with Hypothesis, the Python library used for property-based testing.

Auditorium
12:40
12:40
30min
Python-Driven Robotics: Where Bytes Meet Biopsies
Lilinoe Harbottle

Python's innovation in MedTech: Robotics for precise lung biopsies. See how Python advances healthcare's future.

Auditorium
13:10
13:10
60min
Lunch Break
Auditorium
14:10
14:10
30min
Build without limits - lessons learned from using generative AI dev tools
Ricardo Sueiras

Next generation developer tools that incorporate generative AI are everywhere, but how good are they, and. more importantly, how useful. In this talk I am going to share what I have learned from using these tools over the last 12 months.

Auditorium
14:50
14:50
30min
What's new in Python 3.14
Anže Pečar

Python 3.14 is shaping up to be one of the biggest Python releases in recent years. Let's explore the exciting new features and see how they'll make you a more effective Python developer.

Auditorium
15:20
15:20
30min
Coffee Break
Auditorium
15:50
15:50
30min
A tour of the module `itertools`
Rodrigo Girão Serrão

This talk walks you through the 20 tools available in itertools, a module you should be proficient in if you aspire to write Python code that makes efficient use iterables.

Auditorium
16:30
16:30
30min
Tools to setup great Python projects: 2025 update
Duarte Pompeu

In 2023, I talked about my approach to setup reliable python projects, using tools to manage dependencies robustly and level up the team's code automatically. Since then, new tools have come out and my preferences have changed a bit:

  • Package manger: uv (previously: poetry)
  • Python manager: uv (previously: pyenv)
  • Python binaries manager: uv (previously: pipx)
  • Formatter: ruff + reorder-python-imports (previously: black + isort)
  • Linter: ruff
  • Tester: pytest

I still find it important to centralize your configurations and assure consistent behavior across CLIs, IDEs, CI/CDs, etc. I keep storing all configurations in pyproject.toml and setup a script that calls these tools (usually pre-commit).

Results:
- configure once, get helpful checks forever
- improve workflow for all team members, present and future
- deploy projects deterministically with little surprises
- consistent behavior across different environments

Auditorium
17:10
17:10
30min
Lightning Talks

Lightning Talks

Auditorium
08:00
08:00
60min
Registration
Auditorium
09:00
09:00
60min
Um Siri fazendo barra
Pablo Galindo Salgado

What have in common crabs doing pull-ups, Python and infinitely backtracking parsers?

Auditorium
10:10
10:10
30min
Django & HTMX: Patterns for Success
Lucas Pires

This talk explores effective patterns for combining Django and HTMX, addressing common challenges and gaps in standards.
Drawing from real-world experience, it provides practical insights into hypermedia-focused development, covering topics like server-side state management, on-demand resource handling, and component-based templating to enhance your Django projects.

Auditorium
10:40
10:40
30min
Coffee Break
Auditorium
11:10
11:10
30min
Data Morph: A Cautionary Tale of Summary Statistics
Stefanie Molin

Relying solely on simple summary statistics like the mean, median, or standard deviation is not enough to describe complex data. Come and see why this is the case and learn what it takes to translate research into an open-source library.

Auditorium
11:50
11:50
30min
Inside the Black Box: The Anatomy of Virtual Environments
Daniel Hervás

Virtual environments are a fundamental part of Python development, but to most developers, they’re largely a ‘black box’. In this talk, we’re gonna dissect the code, file structure and utilities that make them up to deeply learn, and not just have superficial knowledge of, how venvs actually work.

Auditorium
12:30
12:30
30min
QuerySet.explain(): make it make sense
Aivars Kalvāns

We have tools that show what queries are executed and the time it takes. But what next? What is going on there? Is it good that it's doing that? Will some indexes help?
In this talk, I will help you decipher database query plans and give some rules of thumb to understand if the database is doing the best it can. We will learn about different ways databases retrieve the data and how they estimate the cost of those operations. We will also use query plans to find the best function-based and partial indexes for different kinds of Django filter conditions. JSON fields? We will cover those as well! I will also share several anti-patterns I have seen in Django projects and show how to rewrite them in a database-friendly way.

Auditorium
13:00
13:00
60min
Lunch Break
Auditorium
14:00
14:00
30min
Visualizing complexity
Maxim Danilov

An overcomplicated project increases development and maintenance time. We need some metrics for reducing the complexity of the existing code base. However, if we can make complexity visible, it will be much easier to work with it.

Auditorium
14:35
14:35
30min
Pablo does random stuff
Pablo Galindo Salgado

Join Pablo in an exploration of random Python stuff!

Auditorium
15:10
15:10
30min
What if you became an open source contributor in 2025?
Amanda Savluchinske

The classic open source dichotomy is well known: everyone uses it, but few give back for the convenience we've all grown so used to. What sustains a community? And how can we help ensure that the frameworks and libraries we rely on daily remain viable and healthy in the long run? In this talk, I intend to show how easy it is to get started with your open source contributions, regardless of your seniority.

Auditorium
15:40
15:40
40min
Coffee Break
Auditorium
16:20
16:20
30min
The role of C++ in the Python ecosystem: the case of the Qt framework
Cristián Maureira-Fredes

With the recent popularity of new programming languages that are improving the Python ecosystem, one cannot dismiss the role of “old” languages like C++, and how the new versions might stay relevant.
On this talk, we will dive directly into the internals on how the Qt for Python project brought one of the most popular C++ frameworks into Python - but not only with 1-to1 bindings.

Auditorium
17:00
17:00
30min
Lightning Talks

Lightning Talks

Auditorium
17:30
17:30
15min
Closing Session

Closing Session

Auditorium
10:00
10:00
30min
Registration
D -112, Floor -1 (Room Madeira)
10:00
30min
Registration
D -114, Floor -1 (Room Azores)
10:30
10:30
120min
FastAPI Meets Langchain: crafting a RAG AI-powered chatbot
Giunio De Luca

During the workshop we will create an HTTP-based API that interacts as a chatbot.

It will cover key concepts and delines core challenges such as:
- including integrating a vector database for document retrieval,
- enhancing the capabilities of large language models with retrieved context with Langchain,
- and finally exposing the core operations through endpoints with FastAPI for seamless interaction.

Whether you're a developer aiming to expand your AI toolkit or a data enthusiast exploring RAG, the aims to provide you with the knowledge and skills to design and deploy intelligent, context-driven applications.

D -114, Floor -1 (Room Azores)
10:30
120min
Understanding and expanding Python: hand-on experience with the Python internals
Cristián Maureira-Fredes

Understanding and expanding Python: hand-on experience with the Python internals

D -112, Floor -1 (Room Madeira)
12:30
12:30
60min
Lunch Break
D -112, Floor -1 (Room Madeira)
12:30
60min
Lunch Break
D -114, Floor -1 (Room Azores)
13:30
13:30
120min
Building pure Django REST API
Maxim Danilov

The new version of Django has several important features that allow us to avoid installing additional modules. Libraries like DRF, yasg, spectacular have always been recommended for REST API development. Now the rules have changed. In this workshop:
1. The modern art of project development in Django. (µ-Django style).
2. Built-in serializer tools.
3. Json response, an underrated tool.
4. Async ORM and class based views . The best parts of modern Django.

After this workshop, all participants got information about the new features of Django.

D -114, Floor -1 (Room Azores)
13:30
120min
The Pokémon trainer's guide to Polars
Rodrigo Girão Serrão

Polars is lightning fast, easy to use, dataframe library.
It's clean API and its contexts and expressions allow writing readable but performant data wrangling code.

Aimed at both data newbies and pandas experts (Polars != pandas), in this hands-on tutorial we'll use data from the Pokémon franchise to explore the Polars API and the ideas that set it apart from pandas and other dataframe libraries.

D -112, Floor -1 (Room Madeira)
15:30
15:30
30min
Coffee Break
D -112, Floor -1 (Room Madeira)
15:30
30min
Coffee Break
D -114, Floor -1 (Room Azores)
16:00
16:00
120min
(Pre-)Commit to Better Code
Stefanie Molin

Maintaining code quality can be challenging, no matter the size of your project or number of contributors. Different team members may have different opinions on code styling and preferences for code structure, while solo contributors might find themselves spending a considerable amount of time making sure the code conforms to accepted conventions. However, manually inspecting and fixing issues in files is both tedious and error-prone. As such, computers are much more suited to this task than humans. Pre-commit hooks are a great way to have a computer handle this for you.

Pre-commit hooks are code checks that run whenever you attempt to commit your changes with Git. They can detect and, in some cases, automatically correct code-quality issues before they make it to your codebase. In this tutorial, you will learn how to install and configure pre-commit hooks for your repository to ensure that only code that passes your checks makes it into your code base. We will also explore how to build custom pre-commit hooks for novel use cases.

D -112, Floor -1 (Room Madeira)
16:00
120min
Advanced decorators – decorators & classes
Rodrigo Girão Serrão

Decorators are often thought of as functions that accept functions as arguments and that return other functions...

In this hands-on workshop you will see that this is not always right.

D -114, Floor -1 (Room Azores)