我的项目有一个base.py
、一个dev.py
和一个product.py
(非常不言自明)。
在我的 PC 上,我只保留 dev.py
和 base.py
,在服务器上,我只保留 product.py
和 base.py
.
虽然 WSGI 不是问题,但我确实发现自己总是必须在每次部署后进入 manage.py
来更改 os.environ.setdefault()
设置。
我想改变这个:
from __future__ import absolute_import, unicode_literals
import os
import sys
if __name__ == "__main__":
try:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.dev") #or project.settings.production
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
对此:
from __future__ import absolute_import, unicode_literals
import os
import sys
if __name__ == "__main__":
try:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.dev")
except:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.production")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
但是这仍然会引发ImportError
。有什么想法吗?或者您知道更好的方法吗?
最佳答案
控制此问题的一个好方法是在要使用 manage.py
的 shell 中使用 DJANGO_SETTINGS_MODULE
环境变量。
默认的 manage.py
不必更改:
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
至于ImportError
,
我不确定我们是否有足够的信息来调试它。
但基本上您需要确保该文件可以从当前工作目录访问,
或来自 PYTHONPATH
上的目录。
例如,如果您从项目的根目录运行 manage.py
,
并且 project/settings/dev.py
存在,那么值“project.settings.dev”应该有效。
关于python - 修改manage.py用于开发和生产,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45196579/