【问题标题】:python + django: unable to find module with Popenpython + django:无法使用 Popen 找到模块
【发布时间】:2011-10-24 18:25:24
【问题描述】:

我在其中一种观点中使用 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这个模块本身在使用Popen的时候不在sys.path里面...

我在这里做错了什么?

【问题讨论】:

    标签: python django subprocess mod-wsgi wsgi


    【解决方案1】:

    对于当前的 Python 实例,它只会在 sys.path 中。要获得另一个,请使用Popenenv 参数和os.pathsep

    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

    【讨论】:

    • 严格来说,您不应该将整个 sys.path 添加到 PYTHONPATH 中,以防万一 WSGI 应用程序不是使用默认 Python 版本而是使用备用版本运行。 IE。 'python' 是 Python 2.6,但 mod_wsgi 是为 Python 2.7 编译的。
    【解决方案2】:

    你需要添加

     /home/socialsense/ss 
    到 python 路径。

    【讨论】:

    • 其他他还没有遇到的问题。 ;-)
    猜你喜欢
    • 1970-01-01
    • 2013-09-18
    • 2014-07-19
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 2022-11-22
    • 2018-08-04
    • 1970-01-01
    相关资源
    最近更新 更多