domandinho
domandinho

Reputation: 1320

Skip system checks on Django server in DEBUG mode in Pycharm

I am running django application in Pycharm in DEBUG mode. Each time when i change some code system checks are performed.

pydev debugger: process 2354 is connecting

Performing system checks...

Is there any way to skip system checks/speed up this checks?

UPDATE: I want to disable system checks after changes in code, because they are too slow.

Upvotes: 30

Views: 10035

Answers (3)

ColemanDunn
ColemanDunn

Reputation: 21

I don't have enough reputation to comment on Louis' answer, but it is no longer the case as of django 4.0 that runserver command explicitly calls self.check(). It now conditionally runs based on the --skip-checks option.

def inner_run(self, *args, **options):
        [ Earlier irrelevant code omitted ...]

        if not options["skip_checks"]:
            self.stdout.write("Performing system checks...\n\n")
            self.check(display_num_errors=True)
        # Need to check migrations here, so can't use the
        # requires_migrations_check attribute.
        self.check_migrations()

         [ ... more code ...]

In other words, python manage.py runserver --skip-checks will skip system checks.

See the changelog and the code

Upvotes: 2

Louis
Louis

Reputation: 151491

The Problem

Unfortunately, there's no command-line argument or setting you can just turn on in order to turn off the checks in runserver. In general, there's the --skip-checks option which can turn off system checks but they are of no use for runserver.

If you read the code of the runserver command, you see that it essentially ignores the requires_system_checks and requires_migration_checks flags but instead explicitly calls self.check() and self.check_migrations() in its inner_run method, no matter what:

def inner_run(self, *args, **options):
    [ Earlier irrelevant code omitted ...]

    self.stdout.write("Performing system checks...\n\n")
    self.check(display_num_errors=True)
    # Need to check migrations here, so can't use the
    # requires_migrations_check attribute.
    self.check_migrations()

    [ ... more code ...]

A Solution

What you could do is derive your own run command, which takes the runserver command but overrides the methods that perform the checks:

from django.core.management.commands.runserver import Command as RunServer

class Command(RunServer):

    def check(self, *args, **kwargs):
        self.stdout.write(self.style.WARNING("SKIPPING SYSTEM CHECKS!\n"))

    def check_migrations(self, *args, **kwargs):
        self.stdout.write(self.style.WARNING("SKIPPING MIGRATION CHECKS!\n"))

You need to put this under <app>/management/commands/run.py where <app> is whatever appropriate app should have this command. Then you can invoke it with ./manage.py run and you'll get something like:

Performing system checks...

SKIPPING SYSTEM CHECKS!

SKIPPING MIGRATION CHECKS!

January 18, 2017 - 12:18:06
Django version 1.10.2, using settings 'foo.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Upvotes: 50

Taufiq Rahman
Taufiq Rahman

Reputation: 5714

There's one thing that might speed up the PyCharm's debugger and that is to turn off the "Collect run-time types information for code insight" setting :located under File > Settings > Build, Execution, Deployment > Python Debugger.

Upvotes: 2

Related Questions