python + django:无法用Popen找到模块

时间:2011-08-11 08:17:32

标签: python django subprocess mod-wsgi wsgi

我在其中一个视图中使用了subprocess.Popen:

path = os.path.join(os.path.dirname(__file__), 'foo/bar.py')
subprocess.Popen(["python",path])

在我的wsgi文件中,我有

import os
import sys

ppath = '/home/socialsense/ss/src'
if ppath not in sys.path:
        sys.path.append(ppath)

os.environ['DJANGO_SETTINGS_MODULE'] = 'ss.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

并在src下我有ss,我的django项目。

但是当我检查我的日志文件时,bar.py遇到错误ImportError: No module named ss.discovery.models。现在,使用ss时,模块sys.path本身似乎不在Popen ...

我在这里做错了什么?

2 个答案:

答案 0 :(得分:5)

对于当前的Python实例,它只会在sys.path中。要将其用于另一个,请使用envPopen os.pathsep的{​​{1}}参数:

import subprocess
import os
import sys
subprocess.Popen(["python",path], env = {'PYTHONPATH': os.pathsep.join(sys.path)})

你应该真正研究multiprocessing module来运行多个Python实例。

编辑:@Graham在评论中指出,您可能希望使用与您调用它不同的Python版本来运行此外部脚本。这对我来说听起来不太可能,但如果是这样,那么您需要使大部分PYTHONPATH与其不同才能正常工作,因此您只需要添加/home/socialsense/ss/src

答案 1 :(得分:0)

您还需要将

 /home/socialsense/ss 
添加到python路径。