【问题标题】:PyCharm not running project via built-in run, but run in terminalPyCharm 不通过内置运行运行项目,而是在终端中运行
【发布时间】:2020-01-28 19:03:44
【问题描述】:

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,但它不应该说太多,因为在终端中它正在正常启动..

【问题讨论】:

  • 我猜你要么有 2 个不同的 venv,要么你正在运行的其中一个没有使用 venv。
  • “我将项目的 django 版本从 2.2.7 更新到 3.0.2 后开始出现此错误” - 你是如何进行此升级的?
  • @TomDalton 通过将虚拟环境的 Django 版本从 2.2.7 更改为 3.0.2。并通过docs.djangoproject.com/en/3.0/howto/upgrade-versiondocs.djangoproject.com/en/3.0/releases 并确保它能够正常工作。无论如何,该项目通过终端正常启动,我想有一些 PyCharm 配置无法启动。我只是好奇是否有人知道。

标签: python django pycharm


【解决方案1】:

原来是因为 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,该类 CommandParser 不是从 Django 继承 ArgumentParser,而是从 GAE SDK 继承的。并且 GAE 的 ArgumentParserclass 不支持 'allow_abbrev' 参数。 但在我删除 GAE SDK 后,它开始运行良好。然后我重新安装了GAE SDK,现在又可以正常运行了。

【讨论】:

    猜你喜欢
    • 2013-09-21
    • 2021-10-20
    • 1970-01-01
    • 2021-09-12
    • 2022-11-25
    • 2021-11-21
    • 2015-08-30
    • 2020-12-18
    • 1970-01-01
    相关资源
    最近更新 更多