【发布时间】:2015-12-06 22:13:28
【问题描述】:
我正在通过 celery 任务运行脚本,但由于某种原因,我无法导入其中一个应用模型。如果我尝试从 IDE 导入模型,则导入正常。
我正在这样设置我的环境:
#! /tools/envs/networktools/networktools/bin/ipython
import os
import sys
sys.path.append('/tools/envs/networktools/nettools/')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'nettools.settings')
from django.conf import settings
from django.core.mail import EmailMessage
from siteinfo.models import SiteCode, Subnets
from pingsweep.models import RunTime, HostStatus << this causes the following error
通过脚本运行时出错
(networktools) NetworkTools> tail logs/celery-worker.log
ImportError Traceback (most recent call last)
/tools/envs/networktools/nettools/scripts/python/pingsweep/pingsweep_db.py in <module>()
8
9 from siteinfo.models import SiteCode, Subnets
---> 10 from pingsweep.models import RunTime, HostStatus
11
12 from operator import itemgetter
ImportError: No module named 'pingsweep.models'; 'pingsweep' is not a package
如果我通过 IDE 运行,我可以导入包
In [1]: #! /tools/envs/networktools/networktools/bin/ipython
In [2]: import os
In [3]: import sys
In [4]: sys.path.append('/tools/envs/networktools/nettools/')
In [5]: os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'nettools.settings')
Out[5]: 'nettools.settings'
In [6]: from django.conf import settings
In [7]: from django.core.mail import EmailMessage
In [8]: from siteinfo.models import SiteCode, Subnets
In [9]: from pingsweep.models import RunTime, HostStatus
In [10]:
经过一番搜索,我怀疑是名称空间问题,但我找不到冲突。有什么想法吗?
【问题讨论】:
-
您的
pingsweep目录中有__init__.py文件吗?此外,如果您使用的是 Django 1.8(可能还有 1.7),则需要调用django.setup()才能正确加载所有内容。 -
我有一个 init.py,我试试 django.setup() 看看效果如何,同样使用 Django 1.8
-
@JoshSmeaton 不幸的是没有骰子,同样的错误。仅供参考,以前不必使用 django.setup() 并且我有许多使用相同设置运行的脚本