Early Access Program

PyCharm 2016.3 Public Preview

Great news: Today we’ve released PyCharm 2016.3 Public Preview, marking the feature freeze for the next major release planned for this fall.

Everyone is very welcome to download and try its new features, bug fixes and other important improvements. As usual, we’re eager to hear your feedback on it in comments to this post or in our public issue tracker.


The release of PyCharm 2016.3 Public Preview indicates that PyCharm 2016.3 has entered the Beta phase. It’s now feature complete and we won’t be adding any new features, but focusing on polishing the existing functionality.

Let’s take a closer look at what’s coming in PyCharm 2016.3:

Python 3.6 support

PyCharm 2016.3 will come with the following support for the latest Python 3.6:

PEP 526: Syntax for variable annotations: PyCharm now recognizes the new syntax and uses this meta information about types for type inference. Ultimately this positively affects code completion, inspections and error checking. Additionally we’ve added a special code intention (invoked with Alt+Enter) to automatically convert comment-based type hints to variable annotations syntax.

PEP 498: Formatted string literals: Basic support for f-strings recognizes their syntax and provides code completion inside them for replacement fields surrounded by curly braces. A special code intention (invoked with Alt+Enter on a code statement) automatically converts %-formatted strings and str.format() into formatted string literals:


PEP 515: Underscores in numeric literals: This PEP extends Python’s syntax and number-from-string constructors so that underscores can be used as visual separators for digit grouping purposes in integral, floating-point and complex number literals.

PEP 525 and PEP 530: These 2 standards introduce asynchronous generators and comprehensions. PyCharm provides code inspections for them and uses them for type inference.

Additional support for new PEPs now includes code injections for annotations inside function type comments. That means PyCharm recognizes the syntax and provides highlighting for type hints specified in comments, checks them for errors, provides quick-fixes and monitors that all hints used are properly imported from the typing module. That makes it easier and safer to use type annotations in your code.

Django support

Dango support has been enhanced in many ways:

  • Django projects Run/Debug on a remote machine: With PyCharm 2016.3 you can create a new project setting it up for running and debugging on a remote machine without need of having any local interpreter on your development machine. All you need is to specify a remote interpreter on the Django project creation stage.djangovagrant
  • We’ve implemented code completion for Django forms in class-based views. PyCharm now understands the forms context in class-based views and shows forms-specific autocompletion and suggestions in the same way it’s done for function-based views.
  • Pycharm 2016.3 supports the new syntax for TEMPLATES first introduced in Django 1.8:
    • New projects are now created using the latest format
    • Template dirs and template app dirs are loaded in the way it works in Django 1.8 (from TEMPLATES)
    • Code completion is provided for all template dict keys, options and context_processors

Better handling of multi-line commands in Python console


Thanks to our active user Yuli Fiterman for his generous help and valuable code contributions, together we’ve fixed a bunch of bugs related to multi-line commands in Python console. IPython console got some improvements as well.

Enhanced Variable Explorer

The brand-new Simplified Variables View option is enabled by default and hides all dunder variables, instances of function, classobj and module under a separate group named “Special Variables” in the Variables Explorer. Additionally, if an IPython-powered interpreter is used in the debug mode, all the utility IPython variables are moved to this group as well:


For variables with long values such as numpy arrays or pandas dataframes, you can notice the special new “View as…” hyperlink in the variables explorer. Click it to view a value in a separate popup viewer:


Docker Compose Integration


On the Docker Compose integration side we’ve made a couple of neat improvements:

  • Now it’s possible to specify multiple Compose files when defining a Docker Compose-based python interpreter for your project to extend an entire Compose file. Previously you could only specify a directory or a specific Compose file in Docker Compose interpreter configuration. Now, in PyCharm 2016.3 you can specify a particular Compose file and extend it with additional overriding configurations.

Note: Using multiple Compose files enables you to customize a Compose application for different environments or different workflows.

  • Some Compose files can contain variables that are substituted with corresponding environment variables on docker-compose execution. PyCharm 2016.3 provides a convenient way to specify the environment variables right in the Docker Compose interpreter configuration dialog as shown on the screenshot above.

Venv Activation in Terminal


The virtual environment associated with the current project you’re working on is now activated by default when opening PyCharm’s embedded terminal. Auto venv activation is supported for bash, zsh, fish or Windows CMD. You can specify or alter the shell of your preference in Settings (Preferences) | Tools | Terminal.

Branch coverage support


With PyCharm 2016.3 we bring you improved code coverage tool integration. We’ve added a new “Branch coverage” option, which is disabled by default, but can be easily enabled in Settings (Preferences) | Build, Execution, Deployment | Coverage | Python coverage. When this option is enabled, PyCharm adds additional information to pure line coverage reports, marking the coverage of lines with conditional statements as incomplete in case one or more branches haven’t been executed.

Line profiling with vmprof


We’ve implemented integration with VMprof in PyCharm 2016.2. With this new release we take another step forward towards productive profiling, with support for the “profile lines” option available for VMprof. This option is enabled by default when you run your project in the profiling mode. Once statistics is gathered, apart from just seeing the standard profiler report, call graph and call tree, you can also see the line profiling results right in the editor in the left gutter. Lines consuming more processor time are marked in red. To use this functionality, you just need to install the vmprof package on your interpreter with the package manager.

Version Control Improvements

  • Undo commit and delete/restore tracked branch actions
  • Sign-off commits and file scope highlighting
  • Enhanced Log for Git & Mercurial
  • Auto resolve for versioning conflicts
  • Managing Git remotes
  • and more

Platform and UI changes

  • Improved find in path dialog
  • New flat file icons
  • Font improvements including the new default San Francisco font for Mac OS

Web-related improvements in PyCharm 2016.3 Public Preview include:

  • Smarter Rename for TypeScript
  • Angular CLI
  • Grouped files in Project view
  • Destructuring assignments for ECMAScript 6
  • Integration with Flow
  • Using Docker with Node.js apps
  • Enhanced coding assistance for Angular 2
  • New React projects with Create React App
  • TypeScript support improvements

PyCharm incorporates most of the new functionality of the upcoming WebStorm 2016.3. Feel free to learn more about what’s coming from WebStorm 2016.3.

Database tool improvements

In PyCharm 2016.3 Public Preview you can find various Database tool enhancements, which come from DataGrip, the JetBrains database IDE. PyCharm incorporates all the new features of DataGrip:

  • Database Driver management
  • Edit several fields at once in the Table Editor
  • Bulk submit changes
  • Renaming views
  • XML extractor
  • and more

To download the preview build (available in both PyCharm editions) for your platform, go to our EAP page. As always, your feedback is very appreciated in our issue tracker!

Your PyCharm Team
The Drive to Develop

Comments below can no longer be edited.

16 Responses to PyCharm 2016.3 Public Preview

  1. Avatar

    Dan Gamble says:

    October 28, 2016

    I can’t get the `venv` activation working for me.

    I use `zsh` and `virtualenvwrapper` i even tried a normal `venv`. Is there something silly i’m doing wrong?

    • Avatar

      Dmitry Filippov says:

      November 2, 2016

      Hi, could you please check whether it is really activated or not. It can be in fact activated silently without “(venv)” mark before command prompt. Then this is known bug. There’s another bug related to prezto https://youtrack.jetbrains.com/issue/IDEA-163404. If it’s not your case, please file a bug to https://youtrack.jetbrains.com/issues/PY specifying your operating system, and attaching logs (Help | Find logs in files).

  2. Avatar

    John says:

    October 28, 2016

    Excited for branch coverage to make it into PyCharm. Are there any plans to support reading this information from the standard .coveragerc file?


    • Avatar

      Dmitry Filippov says:

      November 2, 2016

      This is something we plan to implement with the next release. It’s on our backlog

  3. Avatar

    Bastian says:

    November 2, 2016

    does pycharm support the native docker for mac app, yet?

    I think the problem was that it only uses a file socket to communicate with docker, not a tcp port.

    • Avatar

      Dmitry Filippov says:

      November 2, 2016

      No it doesn’t. It still uses a socket file. We’ve run into some technical difficulties with that, so currently trying to figure out the best way to solve these problems.

  4. Avatar

    James Emery says:

    November 2, 2016

    Any progress with a drag-and-drop GUI builder for Python GUI (tkinter, wxpython, pyqt) applications? I know it’s a feature which will separate you from other Python IDEs and it’s also a feature which has been requested a lot – please do this!

  5. Avatar

    TM says:

    November 2, 2016

    Can you please finally fix `flask.ext.*` import generation? It’s deprecated in Flask and shows a warning (so it can be considered a bug in PyCharm now) and should be `flask_*` instead all the time. The issue in the tracker is not getting much love… https://youtrack.jetbrains.com/issue/PY-13974

    • Avatar

      Dmitry Filippov says:

      November 8, 2016

      Thank you for pointing at this bug. We’ll discuss it when planning the next release.

  6. Avatar

    Sergey says:

    November 7, 2016

    What about docker for mac support? How to use it? Do you have tutorial?

  7. Avatar

    AxelB says:

    November 8, 2016


    I am quite disappointed there still is no option to change host ip of pydevd when debugging on a docker env.

    It seems that this ip is hardcoded to, cf:
    -> https://youtrack.jetbrains.com/issue/PY-20065

    Maybe on the next release ? 🙂

    Best Regards,

    • Avatar

      Dmitry Filippov says:

      November 8, 2016

      Yes, the work on this bug should be planed for the next release.

  8. Avatar

    Emanuel Ilyayev says:

    December 16, 2016

    Unfortunately this version doesn’t recognize my app templates anymore.

    To recognize app templates you expect the following configuration in settings.py:

    ‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’,
    ‘APP_DIRS’: True,

    Though, when I have “loaders” in templates options (https://docs.djangoproject.com/en/1.8/ref/settings/#std:setting-TEMPLATES-OPTIONS)

    I must delete ‘APP_DIRS’ line. In this case – pycharm does not recognize the app templates anymore. It worked fine in 2016.2 version

    • Avatar

      Emanuel Ilyayev says:

      December 16, 2016

      To solve this all you need to do is to check if APP_DIRS is True *OR* django.template.loaders.app_directories.Loader’ is in the loaders list

      • Avatar

        Emanuel Ilyayev says:

        December 16, 2016

        For those who get this error too, a stupid workaround is to define APP_DIRS in the TEMPLATES setting and then to unset is in the following line::

        TEMPLATES = [
        ‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’,
        ‘APP_DIRS’: True,


        TEMPLATES[0][‘APP_DIRS’] = None

        Worked for me.

Discover more