虽然通过PyCharm运行shell_plus?

问题描述 投票:8回答:5

我是否可以将PyCharm配置为运行shell_plus而不是默认Shell?

我尝试将manage命令的文本放入“启动脚本”中,但随后出现以下问题django_manage_shell.run(“ /用户/ cmason / counsyl / code /网站/ counsyl / product”)导入操作系统导入系统

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模型类,以及其他。

python django pycharm
5个回答
3
投票

通过连接到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

2
投票

这不是一个完整的答案,但我发现this script至少加载了所有应用程序模型。将其放在设置>控制台> 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

我也将此feature request to JetBrains.提交给了此人>


1
投票

在Django 1.7中,以下脚本可用作PyCharm 3.4的解决方法:


0
投票

由于django.db.models.get_models不再存在,所以这里的更新版本将与Christopher Mason的版本相同。


0
投票

这是PyCharm的原始Django控制台启动脚本:

© www.soinside.com 2019 - 2024. All rights reserved.