我在我的Django项目中创建了一个名为bin
的子目录,我想在这个目录中放置所有命令行运行Python脚本。其中一些脚本需要导入bin
父目录中的Django项目settings.py
文件。
如何从项目的子目录导入settings.py
文件?
我在命令行脚本中用于设置项目的"Django上下文“的代码是:
from django.core.management import setup_environ
import settings
setup_environ(settings)
如果脚本位于我的项目的根目录中,则可以很好地工作。
我尝试了以下两种方法来导入settings.py
文件,然后设置项目:
import os
os.chdir("..")
import sys
sys.path = [str(sys.path[0]) + "/../"] + sys.path
这个残酷的黑客可以导入settings.py
,但随后我得到了错误:
project_module = __import__(project_name, {}, {}, [''])
ValueError: Empty module name
发布于 2009-03-07 20:38:01
这是您的问题的上一级,但这里最好的解决方案可能是将您的脚本实现为custom manage.py (django-admin.py) commands。这为您免费提供了Django的所有功能(包括设置),没有丑陋的路径攻击,以及选项解析等命令行功能。我从来没有看到过以其他方式编写与Django相关的命令行脚本的好理由。
发布于 2009-03-06 21:21:18
我认为您的方法可能使Django 1.x为您提供的东西过于复杂。只要您的项目位于python路径中,就可以在脚本顶部设置环境变量DJANGO_SETTINGS_MODULE,如下所示:
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
在需要读取设置的命令行脚本中,只需从'django.conf‘导入设置模块,就像在应用程序代码中所做的那样:
from django.conf import settings
很快,您的脚本就有了自己的设置和支持Django的环境。
我个人更喜欢在名为'proj_env‘的bash脚本中使用'/usr/bin/env’来设置我的DJANGO_SETTINGS_MODULE,这样我就不必重复了
#!/bin/bash
proj_env="DJANGO_SETTINGS_MODULE=myproject.settings"
/usr/bin/env $proj_env ${*}
现在,我可以在Django应用程序的上下文中运行任何python脚本:
proj_env python -m 'myproject.bin.myscript'
如果您使用virtualenv,这也为您提供了一个很好的地方来编写激活脚本。
等等等等。
https://stackoverflow.com/questions/620342
复制相似问题