首页 > 解决方案 > PyCharm 不通过内置运行运行项目,而是在终端中运行

问题描述

PyCharm 通过命令从终端启动时完美运行项目:py manage.py runserver 8000

但是当我尝试通过绿色按钮(运行)启动同一个项目时,我得到了这个错误:

E:\work\wowzers-webapp\venv\Scripts\python.exe E:/work/wowzers-webapp/manage.py runserver 8000
Traceback (most recent call last):
  File "E:/work/wowzers-webapp/manage.py", line 21, in <module>
    main()
  File "E:/work/wowzers-webapp/manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "E:\work\wowzers-webapp\venv\lib\site-packages\django\core\management\__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "E:\work\wowzers-webapp\venv\lib\site-packages\django\core\management\__init__.py", line 334, in execute
    parser = CommandParser(usage='%(prog)s subcommand [options] [args]', add_help=False, allow_abbrev=False)
  File "E:\work\wowzers-webapp\venv\lib\site-packages\django\core\management\base.py", line 48, in __init__
    super().__init__(**kwargs)
TypeError: __init__() got an unexpected keyword argument 'allow_abbrev'

Process finished with exit code 1

在我将项目的 django 版本从 2.2.7 更新到 3.0.2 后,此错误开始出现

我检查了运行配置,python manage.py runserver 8000 我什至将pycharm用于启动项目的相同运行命令复制粘贴到终端中:E:/work/wowzers-webapp/manage.py runserver并且在终端项目中正常启动。在终端和运行配置中都使用了 virtualenv python,所以它们是相同的。

你能说,我应该检查吗?我已经尝试过:

  1. 使缓存无效并重新启动
  2. 删除 venv 文件夹并重新安装所有内容
  3. 谷歌搜索这个错误约 2 小时并没有给我任何帮助,所以我决定在这里问,因为我进入循环..

附加信息:我当前的 Python 版本 3.7.2,但它不应该说什么,因为在终端它正在正常启动..

标签: pythondjangopycharm

解决方案


原来是因为 Google App Engine SDK。Django中有一个类,发生此错误:

class CommandParser(ArgumentParser):
    """
    Customized ArgumentParser class to improve some error messages and prevent
    SystemExit in several occasions, as SystemExit is unacceptable when a
    command is called programmatically.
    """
    def __init__(self, *, missing_args_message=None, called_from_command_line=None, **kwargs):
        self.missing_args_message = missing_args_message
        self.called_from_command_line = called_from_command_line
        super().__init__(**kwargs)

在这一行:super().__init__(**kwargs) 所以,正如我所理解的,由于 GAE SDK 那个类,不是从 DjangoCommandParser继承ArgumentParser的,而是从 GAE SDK 继承的。并且 GAE 的ArgumentParser类不支持'allow_abbrev'参数。但在我删除 GAE SDK 后,它开始运行良好。然后我重新安装了GAE SDK,它现在又可以正常运行了。


推荐阅读