[英]how to import the custormed settings.py variable in django project?
[英]How to import a Django project settings.py Python file from a sub-directory?
我创建了一个名为bin
的 Django 项目的子目录,我想在其中放置所有命令行运行 Python 脚本。 其中一些脚本需要导入我的 Django 项目settings.py
文件,该文件位于bin
的父目录中。
如何从项目的子目录中导入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
我认为您的方法可能会使 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,这也为您提供了一个获取激活脚本的好地方。
等等等等
这比您的问题更上一层楼,但这里最好的解决方案可能是将您的脚本实现为自定义 manage.py (django-admin.py) commands 。 这为您免费提供了 Django 的所有功能(包括设置),没有丑陋的路径黑客,以及像选项解析这样的命令行细节。 我从未见过以其他方式编写与 Django 相关的命令行脚本的充分理由。
将父目录添加到您的路径:
import sys
sys.path.append('../')
import settings
评论更新:
不要忘记包含您的 settings.py 的目录中的
__init__.py
文件 – S.Lott
假设您的项目目录是 /opt/someProject/`
这有如下文件:
管理.py
现在你有了你可能在任何地方都有你的子目录,没关系。 例如。 子目录可能像:
/opt/someproject/dir1/dir2
现在让您在 /opt/someProject/dir1/dir2 中导入您的项目设置
您需要设置 PYTHONPATH 变量
导出 PYTHONPATH=/opt/someproject/
现在从 bin 导入模块
从某个项目导入箱
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.