当前位置:  开发笔记 > 编程语言 > 正文

如何从子目录导入Django项目settings.py Python文件?

如何解决《如何从子目录导入Django项目settings.pyPython文件?》经验,为你挑选了2个好方法。

我创建了一个我的Django项目的子目录,bin在那里我想放置所有命令行运行的Python脚本.其中一些脚本需要导入我settings.py父目录中的Django项目文件bin.

如何settings.py从项目的子目录导入文件?

我在命令行脚本中使用的代码设置为项目的"Django上下文":

from django.core.management import setup_environ
import settings
setup_environ(settings)

如果脚本位于项目的根目录中,则此方法可以正常工作.

我尝试了以下两个hacks来导入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

Joe Holloway.. 16

我认为你的方法可能会让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,这也为您提供了一个获取激活脚本的好地方.

等等



1> Joe Holloway..:

我认为你的方法可能会让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,这也为您提供了一个获取激活脚本的好地方.

等等



2> Carl Meyer..:

这比你的问题提高了一级,但这里最好的解决方案是将脚本实现为自定义manage.py(django-admin.py)命令.这为您提供了所有Django的免费功能(包括设置),没有任何丑陋的路径攻击,以及选项解析等命令行细节.我从未见过以任何其他方式编写与Django相关的命令行脚本的充分理由.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有