python - 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,所以它们是相同的。
你能说,我应该检查吗?我已经尝试过:
- 使缓存无效并重新启动
- 删除 venv 文件夹并重新安装所有内容
- 谷歌搜索这个错误约 2 小时并没有给我任何帮助,所以我决定在这里问,因为我进入循环..
附加信息:我当前的 Python 版本 3.7.2,但它不应该说什么,因为在终端它正在正常启动..
解决方案
原来是因为 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,它现在又可以正常运行了。
推荐阅读
- c++ - 使用媒体基金会时如何读取-“unsigned char const *”?
- python - 如何在 Python 中更改查询字符串的值?
- reactjs - 可以在浏览器平台上使用带有 Ionic React 的 SQLite 插件吗?
- c - 如何从 Julia Ptr 访问 C 结构属性?
- java - Cloud Firestore 错误,名称为 [DEFAULT] 的 FirebaseApp 不存在
- pentaho - 在 Pentaho 中插入选择状态
- javascript - 获取多个 html 文档中的元素
- react-native - 为什么 React Native FlatList 不能在 Android 上运行,但它适用于 Web?
- java - 如何使用 JSOUP 获取页面的 html(带有 js 脚本)
- scala - 线程“主”java.lang.ClassNotFoundException 中的异常:找不到数据源:jdbc