# What’s Fixed and Improved in PyCharm 2026.3

> Source: <https://blog.jetbrains.com/pycharm/2026/11/what-s-fixed-and-improved-in-pycharm-2026-3/>
> Published: 2026-11-13 14:28:09+00:00

[Releases](https://blog.jetbrains.com/pycharm/category/releases/)

# What’s Fixed and Improved in PyCharm 2026.3

[PyCharm 2026.3](https://www.jetbrains.com/pycharm/) is here! Alongside major features like [JetBrains Air, workspaces, Python 3.15 lazy imports, and the redesigned interpreter widget](https://www.jetbrains.com/pycharm/whatsnew/2026-3/), this release includes [303 fixes and improvements](https://youtrack.jetbrains.com/issues?q=%23py%20type:%20bug,%20feature%20Planned%20for:%202026.3.0,%20%7B2026.3%20*%7D%20visible%20to:%20%7BAll%20Users%7D%20state:%20fixed,%20merged) to everyday Python development.

From smarter code completion to more reliable environments and debugging, here are some of the changes worth knowing about—including fixes for issues reported more than a decade ago.

## **Smarter code insight and type inference**

### **Better support for** **functools.partial**

`functools.partial` lets you create a new callable by supplying some of a function’s arguments in advance. Previously, PyCharm could struggle to infer the resulting signature, leading to missing parameter information and incorrect warnings.

PyCharm now understands the remaining parameters, checks their types, and recognizes partial objects as valid `Callable` instances. In the example below, PyCharm correctly identifies the remaining parameter and flags an incompatible argument.

*PyCharm understands the remaining parameters of a `functools.partial` object.*

This resolves several long-standing issues with completion, parameter information, and type checking ([PY-35363](https://youtrack.jetbrains.com/issue/PY-35363), [PY-33618](https://youtrack.jetbrains.com/issue/PY-33618), [PY-25698](https://youtrack.jetbrains.com/issue/PY-25698), [PY-36385](https://youtrack.jetbrains.com/issue/PY-36385)).

### **Fewer false positives for generics and collections**

PyCharm now provides more accurate type inference for generic classes, bounded and constrained type variables, overloaded constructors, and generic `__getattr__` methods. For example, calling a method on a bounded type variable now preserves its return type instead of falling back to `Any` ([PY-89863](https://youtrack.jetbrains.com/issue/PY-89863)).

Collection inference has improved, too. Nested lists, optional values, dictionary literals, and tuple unpacking produce fewer false warnings ([PY-89564](https://youtrack.jetbrains.com/issue/PY-89564), [PY-91999](https://youtrack.jetbrains.com/issue/PY-91999)). There are also improvements to `Literal`, `Enum`, and `TypedDict`, along with support for PEP 747’s `TypeForm[T]` and intersection types through `ty_extensions.Intersection` ([PY-90287](https://youtrack.jetbrains.com/issue/PY-90287), [PY-62524](https://youtrack.jetbrains.com/issue/PY-62524), [PY-89043](https://youtrack.jetbrains.com/issue/PY-89043), [PY-87024](https://youtrack.jetbrains.com/issue/PY-87024)).

### **Clearer type warnings and suppression comments**

When PyCharm finds a type mismatch, its tooltips now provide clearer explanations, improved formatting, and links to the relevant types. Call and control-flow analysis also handles more cases involving optional callables, bound methods, and paths that never return, reducing false warnings ([PY-90555](https://youtrack.jetbrains.com/issue/PY-90555), [PY-83644](https://youtrack.jetbrains.com/issue/PY-83644)).

When a warning is intentional, you have more control over suppressing it. PyCharm now supports shorter codes in `# type: ignore[...]` comments and introduces `# pycharm: ignore[...]` for individual PyCharm inspections. There’s also a *Suppress with ‘type: ignore’ comment* action, and unknown suppression codes are flagged to catch typos ([PY-90787](https://youtrack.jetbrains.com/issue/PY-90787), [PY-92114](https://youtrack.jetbrains.com/issue/PY-92114)).

*PyCharm 2026.3 introduces a new action to suppress individual type warnings using `# type: ignore[...]` comments.*

## **Testing and developer tools**

### **Better completion for pytest and mocks**

Mocks and fixtures can be tricky for an IDE to understand. PyCharm now provides completion for the `pytest-mock mocker` fixture, navigation for `mocker.patch()` targets, and completion based on classes passed to `Mock(spec=...)` or `Mock(spec_set=...)`.

``` php
from unittest.mock import Mock

class Client:
    def fetch(self, url: str) -> str:
        return "OK"

client = Mock(spec=Client)
client.fetch("https://example.com")
```

*PyCharm 2026.3 provides completion for methods defined in classes passed to `Mock(spec=...)`.*

PyCharm also flags invalid `unittest.mock.patch()` targets and improves completion and documentation for pytest fixtures ([PY-36260](https://youtrack.jetbrains.com/issue/PY-36260), [PY-32282](https://youtrack.jetbrains.com/issue/PY-32282)).

For projects with custom test infrastructure, you can configure a unittest runner script, such as [Django’s tests/runtests.py](https://github.com/django/django/blob/main/tests/runtests.py). If it uses `unittest.TextTestRunner`, test results appear in PyCharm’s test tree ([PY-26068](https://youtrack.jetbrains.com/issue/PY-26068)).

### **More capable type-checker and Ruff integrations**

Zuban, a mypy-compatible type checker and language server, joins ty, Pyrefly, and basedpyright as a supported external tool. Its integration provides diagnostics, completion, hover information, inlay hints, and quick fixes. Pyrefly also receives fixes for custom import roots and missing-package installation ([PY-85009](https://youtrack.jetbrains.com/issue/PY-85009), [PY-89805](https://youtrack.jetbrains.com/issue/PY-89805)).

With Ruff, *Optimize Imports* now removes unused imports and organizes them. Ruff fixes can run automatically on save or before a commit, and the new *Apply Ruff Fixes* action works across a selected scope, including an entire project. Configuration discovery is also more reliable in multi-root, network, and WSL projects ([PY-85534](https://youtrack.jetbrains.com/issue/PY-85534), [PY-86352](https://youtrack.jetbrains.com/issue/PY-86352)).

*Apply Ruff fixes to an individual file, custom scope, or entire project directly from PyCharm.*

## **Django, FastAPI, and SQLAlchemy**

**Django:** You can create run configurations for Django 6.0 tasks, and `TextChoices` members defined with value-and-label tuples no longer trigger false type errors ([PY-86368](https://youtrack.jetbrains.com/issue/PY-86368), [PY-92177](https://youtrack.jetbrains.com/issue/PY-92177)).

In Django REST framework, `rest_framework.reverse.reverse()` now offers URL-name completion and navigation, just like Django’s built-in `reverse()` ([PY-78900](https://youtrack.jetbrains.com/issue/PY-78900)).

*PyCharm 2026.3 provides URL-name completion for Django REST framework’s `reverse()` function.*

**FastAPI:** Alongside the new [interactive dependency graphs](https://www.jetbrains.com/pycharm/whatsnew/2026-3/), path parameters supplied through dependencies no longer cause incorrect warnings about missing endpoint parameters ([PY-88935](https://youtrack.jetbrains.com/issue/PY-88935)).

**SQLAlchemy:** Expanded ORM support improves completion, navigation, and type inference for declarative models. Fixes also cover attributes added through `relationship()` and columns that use SQLAlchemy’s `ENUM` type ([PY-79736](https://youtrack.jetbrains.com/issue/PY-79736), [PY-29212](https://youtrack.jetbrains.com/issue/PY-29212)).

## **Editing and refactoring**

Several small fixes make editing more predictable. Pressing Enter after a comment introducing a block now inserts the correct indentation, while moving lines in tab-indented files no longer causes false *Unexpected indent* warnings ([PY-15693](https://youtrack.jetbrains.com/issue/PY-15693), [PY-78251](https://youtrack.jetbrains.com/issue/PY-78251)).

A new *Align consecutive assignments formatter* option lines up assignment operators. You can enable it under *Settings | Editor | Code Style | Python | Wrapping and Braces*. The formatter also does a better job preserving configured blank lines ([PY-34006](https://youtrack.jetbrains.com/issue/PY-34006)).

Refactoring is safer, too. *Inline Function* preserves fallback behavior for omitted optional arguments, while *Implement abstract methods* generates valid implementations of asynchronous abstract methods ([PY-81983](https://youtrack.jetbrains.com/issue/PY-81983), [PY-53074](https://youtrack.jetbrains.com/issue/PY-53074)).

## **More reliable environments and faster startup**

**conda:** Environment variables configured using `conda env config vars set` or `activate.d` scripts are now available when you run scripts, tests, and the Python console from PyCharm. Previously, variables could work in a terminal but be missing inside the IDE—particularly frustrating for projects using GDAL, QGIS, PyMC, or compiler toolchains ([PY-55405](https://youtrack.jetbrains.com/issue/PY-55405), [PY-38751](https://youtrack.jetbrains.com/issue/PY-38751)).

**uv:** Workspaces using a shared root `.venv` retain their interpreter after upgrading from PyCharm 2026.1. Projects that use `uv pip` without a `pyproject.toml` now use the correct installation command, creating a uv environment no longer requires `uv init`, and new environments can optionally access system site-packages ([PY-91108](https://youtrack.jetbrains.com/issue/PY-91108), [PY-85589](https://youtrack.jetbrains.com/issue/PY-85589)).

**Performance:** Python scripts start faster thanks to reduced helper overhead. In particular, simply having `matplotlib` installed no longer adds approximately 100 milliseconds to the startup of an otherwise empty script ([PY-92211](https://youtrack.jetbrains.com/issue/PY-92211)).

## **Debugging improvements**

The *debugpy* debugger mode now supports *Set Value* and *Jump to Cursor*. Other improvements include sorting variables by type, displaying plots in the Plots tool window, accepting interactive input with terminal emulation, and using *Drop into debugger* for failed tests.

In the example below, we’ve paused execution and changed `discount` from `0.10` to `0.25`, allowing us to test a different result without restarting the program.

*Changing a variable’s value while debugging in debugpy mode.*

Debugging also works more reliably for tests in WSL, applications launched with `fastapi dev`, and long-running IDE sessions on macOS ([PY-90157](https://youtrack.jetbrains.com/issue/PY-90157), [PY-90281](https://youtrack.jetbrains.com/issue/PY-90281), [PY-90588](https://youtrack.jetbrains.com/issue/PY-90588)).

Elsewhere in the debugger, dictionary keys appear in insertion order, Python 3.15’s `frozendict` can be expanded, and the debug console supports a configurable starting script ([PY-75697](https://youtrack.jetbrains.com/issue/PY-75697), [PY-21419](https://youtrack.jetbrains.com/issue/PY-21419)).

## **Easier Jupyter notebook workflows**

*Find* now searches cell outputs as well as source code, so you can locate a result without scrolling through the notebook. You can also move several selected cells together or use *Extract to Python File* to copy them into a regular Python file. A bug that caused scripts embedded in HTML outputs to execute twice has been fixed, too ([PY-84634](https://youtrack.jetbrains.com/issue/PY-84634), [PY-89385](https://youtrack.jetbrains.com/issue/PY-89385)).

## **Thank you for your feedback**

Not every meaningful improvement is a headline feature. Sometimes it’s a false warning disappearing, completion working where it didn’t before, or a debugger behaving as expected. Some fixes in this release trace back to issues reported more than a decade ago.

[Download PyCharm 2026.3](https://www.jetbrains.com/pycharm/download/) and try these improvements in your projects. And if PyCharm gets something wrong, [report it in YouTrack](https://youtrack.jetbrains.com/issues/PY). Your reports and votes help us decide what to improve next.

Thanks for using PyCharm, and happy coding!

#### Subscribe to PyCharm Blog updates
