Запустить shell_plus через PyCharm?

Есть ли способ настроить PyCharm для запуска shell_plus вместо оболочка по умолчанию?

Я попытался поместить текст команды управления в «Начальный сценарий», но затем я получаю следующее: django_manage_shell.run("/Users/cmason/counsyl/code/website/counsyl/product") import os import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")

    # The new Django 1.4 default manage.py wants "from django..." before
    # importing settings, but we usually tinker with sys.path in
    # settings_local.py, which is called from settings.py. Importing
    # settings.py works but does mean some double importing. Luckily that
    # module does very little work.
    import settings
    # appease pyflakes; don't ever do this in
    # non-super-meta-namespace-trickery code
    settings

    from django.core.management import execute_from_command_line

    execute_from_command_line("shellplus")

и на самом деле он не запускал shell_plus.

Похоже, что «Запуск сценария» происходит в дополнение, а не вместо значения по умолчанию.

Помимо прочего, Shell_plus автоматически импортирует все классы моделей Django.


person Christopher Mason    schedule 08.11.2013    source источник
comment
Я смог заставить его работать, просто используя shell_plus в качестве пользовательской команды запуска.   -  person jproffitt    schedule 09.11.2013
comment
Это работает, но у него нет возможности завершения командной строки PyCharm, и вы не можете использовать редактирование командной строки (например, стрелки вверх и вниз).   -  person Christopher Mason    schedule 10.11.2013


Ответы (8)


Я получил автоматическую загрузку объектов модели, подключившись к коду shell_plus. Я добавил это к сценарию запуска по умолчанию в Preferences > Build, Execution, Deployment > Console > Django Console:

from django_extensions.management import shells
from django.core.management.color import color_style
imported_items = shells.import_objects({}, color_style())
for k, v in imported_items.items():
    globals()[k] = v

Это было на PyCharm 2018.3.3 Pro

Для полноты это было полное содержимое стартового скрипта:

import sys; print('Python %s on %s' % (sys.version, sys.platform))
import django; print('Django %s' % django.get_version())
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
if 'setup' in dir(django): django.setup()
import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)

from django_extensions.management import shells
from django.core.management.color import color_style
imported_items = shells.import_objects({}, color_style())
for k, v in imported_items.items():
    globals()[k] = v
person chrisbunney    schedule 13.02.2019
comment
Мне пришлось добавить DJANGO_SETTINGS_MODULE с его значением в переменных окружения. Опубликуйте это, этот скрипт работал отлично! - person Sameer Kumar; 14.01.2020

Я искал решение той же проблемы, и я оказался здесь. Я пробовал решения, предложенные другими, но ни одно из них не помогло решить эту проблему. Поэтому я решил найти другое решение. Вот что я придумал:

Блок кода ниже представляет собой исходный скрипт запуска консоли Django для PyCharm 2019.2:

import sys, django
print('Python %s on %s' % (sys.version, sys.platform))
print('Django %s' % django.get_version())
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
if 'setup' in dir(django):
    django.setup()
import django_manage_shell
django_manage_shell.run(PROJECT_ROOT)

Установив IPython и изменив последние две строки, как показано ниже, все будет сделано наиболее правильным образом:

from IPython.core.getipython import get_ipython
ipython = get_ipython()
from django_extensions.management.notebook_extension import load_ipython_extension
load_ipython_extension(ipython)

Чтобы это заработало: откройте настройки PyCharm (CTRL+S) и перейдите в раздел Консоль Django. Затем внесите изменения в окне Starting script и примените. Наконец, запустите новый экземпляр Python Console.

person Sencer H.    schedule 03.10.2019
comment
Спасибо. Работает как часы! (Мне также нужно установить ipython в моем venv) - person Pedram Parsian; 29.11.2019
comment
Я работал над Django 1.8, Python 3.7 и django-extensions 1.7.4. - person RobertPro; 29.03.2021


Это не полный ответ, но я нашел этот скрипт это, по крайней мере, загружает все модели приложений. Поместите это в «Настройки»> «Консоль»> «Консоль Django»> «Запуск сценария»:

import sys
import logging
logging.basicConfig(format="%(levelname)-8s %(asctime)s %(name)s %(message)s", datefmt='%m/%d/%y %H:%M:%S', stream=sys.stdout )
log = logging.getLogger("root")

from django.db.models import get_models
from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned

logging.config.dictConfig(settings.LOGGING)
log.debug("Logging has been initialized at DEBUG")
log.setLevel( logging.DEBUG)
log.disabled = False

for _class in get_models():
    if _class.__name__.startswith("Historical"): continue
    log.debug("Registering model {}".format(_class.__name__))
    globals()[_class.__name__] = _class

def debug_sql():
    from debug_toolbar.management.commands import debugsqlshell
    return

Я также отправил этот запрос функции в JetBrains.

person Christopher Mason    schedule 12.11.2013
comment
Обратите внимание, что модели получения теперь устарели, вам необходимо внести изменения в соответствии с github.com/wq/django-swappable-models/pull/9/files?diff=split - person Yunti; 25.02.2016

Один из способов решить эту проблему — создать новую конфигурацию запуска Python. Установите цель на модуль и выберите файл manage.py для проекта. Затем введите shell_plus в поле Параметры. Установите рабочий каталог в каталог проекта. Затем, наконец, установите Execution на Run with Python Console. Примените изменения, затем запустите новую конфигурацию.

Скриншот конфигураций запуска/отладки PyCharm

person King Leon    schedule 12.03.2020

В Django 1.7 следующий скрипт можно использовать в качестве обходного пути с PyCharm 3.4:

Файл -> Настройки -> Консоль -> Консоль Django и параметры manage.py

В Starting script поместите:

import sys
import django
django.setup()

from django.db.models import get_models

for _class in get_models():
    globals()[_class.__name__] = _class
person SaeX    schedule 13.11.2014

Поскольку django.db.models.get_models больше не существует, вот обновленная версия, которая будет выполнять те же функции, что и версия Кристофера Мейсона.

import sys; print('Python %s on %s' % (sys.version, sys.platform))
import django; print('Django %s' % django.get_version())
import logging
logging.basicConfig(format="%(levelname)-8s %(asctime)s %(name)s %(message)s", datefmt='%m/%d/%y %H:%M:%S', stream=sys.stdout )
log = logging.getLogger("root")

from django.apps import apps
from django.conf import settings  
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned

logging.config.dictConfig(settings.LOGGING)
log.debug("Logging has been initialized at DEBUG")
log.setLevel( logging.DEBUG)
log.disabled = False

for _configs in apps.get_app_configs():
    for _class in _configs.get_models():
        if _class.__name__.startswith("Historical"): continue
        log.debug("Registering model {}".format(_class.__name__))
        globals()[_class.__name__] = apps.get_model(_configs.label, _class.__name__)

def debug_sql():
    from debug_toolbar.management.commands import debugsqlshell
    return
person ilikerobots    schedule 31.10.2018

конфигурация запуска оболочки django

Эта конфигурация работает для меня

person Just trying    schedule 04.02.2021