python + django: невозможно найти модуль с Popen - PullRequest
2 голосов
/ 11 августа 2011

Я использую подпроцесс. Открыть в одном из моих представлений:

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ДЖАНГО.

Но когда я проверял свой файл журнала, bar.py обнаружил ошибку, ImportError: No module named ss.discovery.models.Теперь кажется, что сам модуль ss не находится в sys.path при использовании Popen ...

что-то, что я здесь неправильно сделал?

Ответы [ 2 ]

5 голосов
/ 11 августа 2011

Это будет только в sys.path для текущего экземпляра Python. Чтобы получить его для другого, используйте аргумент env для Popen с 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.

0 голосов
/ 11 августа 2011

вам также нужно добавить

/home/socialsense/ss 
в путь к питону.
...