本地正常运行的Django应用部署服务器后manage.py报语法错误
解决Python 2.7环境下manage.py的SyntaxError问题
哦,这个问题我之前帮朋友排查过!你遇到的语法错误根源很明确——raise ... from exc是Python 3.x才引入的语法特性,而你服务器上跑的是Python 2.7,它完全不支持这种写法。
为什么本地运行正常呢?虽然你说自己用的是Python 2.7和Django 1.11,但大概率你本地的manage.py是Django 1.11原生生成的(它完美适配Python 2.7),而上传到服务器的版本可能是不小心从更高版本的Django项目里复制过来的,或者用新版本Django重新生成过,所以带了Python 3专属的语法。
给你两个简单的解决方案:
方案1:替换为Django 1.11兼容的manage.py
直接把服务器上的manage.py换成下面这段适配Python 2.7的代码(这就是Django 1.11默认生成的manage.py内容):
import os import sys if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "chatbot.settings") try: from django.core.management import execute_from_command_line except ImportError: try: import django except ImportError: raise ImportError( "Couldn't import Django. Are you sure it's installed and " "available on your PYTHONPATH environment variable? Did you " "forget to activate a virtual environment?" ) raise execute_from_command_line(sys.argv)
方案2:修改报错的语法行
如果你不想替换整个文件,只需要把报错的那一行改了就行——删掉from exc部分,把异常抛出语句改成Python 2.7能识别的写法:
except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed and " "available on your PYTHONPATH environment variable? Did you " "forget to activate a virtual environment?" )
这样去掉Python 3的专属语法后,Python 2.7就能正常解析这个文件了。
最后多嘴提一句:Python 2.7和Django 1.11都已经停止维护好几年了,不仅没有安全补丁,很多新的依赖库也不再支持它们,建议尽早升级到Python 3和对应的LTS版本Django(比如Django 3.2,它支持Python 3.6到3.10),避免后续踩更多坑。
内容的提问来源于stack exchange,提问作者TeeKay
相关产品推荐
相关产品推荐

