我今天很困惑。
我试图在python脚本中使用django应用程序模型。
这是我的方法
import os, sys
sys.path.append("/var/www/cloudloon/horizon")
os.environ["DJANGO_SETTINGS_MODULE"] = "openstack_dashboard.settings"
from django.contrib.auth.models import User
我很困惑为什么它会给我
ImportError: Could not import settings 'openstack_dashboard.settings' (Is it on sys.path?): cannot import name auth
在检查时,我创建了一个名为creds的文件,其中包括
export PYTHONPATH=$PYTHONPATH:/var/www/cloudloon/horizon/;
export DJANGO_SETTINGS_MODULE=openstack_dashboard.settings; django-admin.py shell;
从creds文件所在的终端窗口,我知道
source creds
从django-admin.py shell中,我可以导入任何django应用程序模型,而不会出现任何错误。
为什么它在我的python脚本中不起作用?
我已经完成了Django,我需要做的是创建一个python守护进程脚本,该脚本将访问我的Django应用程序模型。
我在Ubuntu12.04中使用django 1.5
在我寻找解决方案时,我做到了:
import os, sys
sys.path.append("/var/www/cloudloon/horizon")
sys.path.append("/var/www/cloudloon/horizon/openstack_dashboard")
# os.environ["DJANGO_SETTINGS_MODULE"] = "settings"
os.environ.setdefault("DJANGO_SETTINGS_MODULE",
"openstack_dashboard.settings")
print os.environ["DJANGO_SETTINGS_MODULE"]
for s in sys.path:
print s
from django.contrib.auth.models import User
这里是输出:http://paste.openstack.org/show/48787/
如您所见,settings.py所在的目录位于my sys.path中,但是,它仍然无法导入openstack_dashboard.settings。
谢谢大家。
这对我有效:
如果项目的布局(以及设置文件的路径)如下所示,则下面的脚本应该可以工作:
我相信您看到的问题是由于项目的安排,或者您需要将另一个目录级别附加到脚本中的
sys.path
调用。编辑:
查看您的github项目,
horizon
和openstack_dashboard
位于同一目录级别。您要做的是将sys.path
设置为更高的级别:你需要写一个custom management command,而不是做这些奇怪的杂技。
创建名为management的模块(换句话说,创建一个目录
management
,并在其中创建一个空的__init__.py
文件),该目录位于您在INSTALLED_APPS
中列出的任何应用程序的目录中。所以如果你有myapp
,你会创建:然后在管理目录中,创建另一个模块
commands
,并在其中创建一个文件,该文件是命令的名称;例如my_command.py
,如下所示:在
my_command.py
中,编写以下样板代码:保存文件后,您就可以执行
python manage.py my_command
,它将可以访问您的所有模型和设置。如果需要将其作为守护进程运行,Daniel Roseman编写了^{} 来完成这项工作。安装后:
完成后from the github readme:
相关问题 更多 >
编程相关推荐