Previous synchronization of background updates in PythonSdkUpdater was flawed. It didn't prevent us from launching several concurrent updates for the same SDK, but only blocked subsequent refresh tasks on a BlockingSet, still showing the corresponding progress indicators, piling up threads and exhausting system resources. The new implementation attempts to enforce the following policy: no two updates for the same SDK can be run concurrently, and all subsequent updates for an SDK already being refreshed are squashed and queued to be executed once it finished. We also adjusted PythonSdkUpdater interface to better indicate synchronization of individual methods. The old update() method, which performed a few of update operations in a blocking fashion, is now deprecated and replaced with more explicit scheduleUpdate(), always asynchronous, and internal updateVersionAndPathsSynchronouslyAndScheduleRemaining() that replicates the old behavior for the time being due to a number of existing usages, but is to be revised. Synchronous version and paths refreshes are now performed under a modal progress indicator. The legacy updating mechanism can be restored as a fallback if "python.use.new.sdk.updater" Registry flag is reset. Additionally, internal PyUpdateProjectSdk action was added for diagnostic. These changes are a result of a joint effort with Alexey Kniazev. GitOrigin-RevId: 6260cda7a22c4f5932f7d78eb6660a50e2b972b6
PyCharm Community Edition
The "python" directory in the source repository contains the source code of PyCharm Community Edition and the Python plugin for IntelliJ IDEA Community Edition.
Building and Running
The code is part of the main IntelliJ IDEA Community Edition project and is compiled together with the rest of the codebase. To run PyCharm Community Edition, please use the provided run configuration "PyCharm Community Edition". To run IntelliJ IDEA with the Python plugin, please use the "IDEA with Python plugin" run configuration.
To run the test suite, use the built-in JUnit test runner and run all tests in the "python-community-tests" module.
Building from the Command Line
To build the distribution archive of PyCharm Community Edition, execute build.xml Ant build script in this directory. The results of the build execution can be found at out/artifacts.
Building the Python Plugin
To build the Python plugin for IntelliJ IDEA Community Edition:
-
Download the .tar.gz distribution of the most recent EAP or release build of IntelliJ IDEA Community Edition;
-
Run the following command:
ant -Didea.path= -Didea.build.number=<build number of the build you're using> plugin
The .zip file of the built plugin will be placed at distCE/python-community-.SNAPSHOT.zip