我正在通过芹菜任务运行脚本,由于某种原因我无法导入我的某个应用模型。如果我尝试从IDE导入模型,则导入OK。
我正在设置我的环境:
#! /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]:
经过一番搜索我的怀疑是一个名称空间问题,但我找不到冲突。任何人的想法?
答案 0 :(得分:0)
好吧,看起来你的模块安排得很奇怪,所以你需要在sys.paths中添加更多的路径。
sys.path.append('/tools/envs/networktools/nettools/scripts/python/')
这一切都取决于您从哪个目录启动解释器。我假设您正在从我正在添加到上面的sys.path
的python目录中打开IDE中的解释器,这会将pingsweep
模块直接放在您的路径上。
您的脚本从nettools
目录开始。如果您想从那里访问pingsweep
,则需要说:
from scripts.python.pingsweep import .. # dont do this
但您还需要确保__init__.py
和scripts
目录中有python
个文件。那可能不是你想做什么。