首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从子目录导入Django项目settings.py Python文件?

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

Stack Overflow用户
提问于 2009-03-06 20:42:12
回答 2查看 25.3K关注 0票数 17

我在我的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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-03-07 20:38:01

这是您的问题的上一级,但这里最好的解决方案可能是将您的脚本实现为custom manage.py (django-admin.py) commands。这为您免费提供了Django的所有功能(包括设置),没有丑陋的路径攻击,以及选项解析等命令行功能。我从来没有看到过以其他方式编写与Django相关的命令行脚本的好理由。

票数 10
EN

Stack Overflow用户

发布于 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,这也为您提供了一个很好的地方来编写激活脚本。

等等等等。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/620342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档