python + django:无法找到带Popen的模块

3 投票
2 回答
1940 浏览
提问于 2025-04-16 23:22

我在我的一个视图中使用了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。现在看起来在使用Popen的时候,ss这个模块本身并不在sys.path中……

我这里做错了什么吗?

2 个回答

0

你还需要把

 /home/socialsense/ss 
加到 Python 的路径里。

5

这个路径只会在当前的Python实例中有效。如果你想在另一个实例中使用它,可以通过给Popen传递env参数,并使用os.pathsep来实现:

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

你真的应该看看multiprocessing模块,它可以帮助你同时运行多个Python实例。

补充说明:@Graham在评论中提到,你可能想用一个不同版本的Python来运行这个外部脚本,而不是你当前使用的版本。虽然我觉得这种情况不太可能,但如果真是这样,你需要大部分PYTHONPATH都不同才能正常工作,所以你需要添加/home/socialsense/ss/src

撰写回答